changeset 83213:d83f49cefda3

Merged in changes from CVS trunk. Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-593 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-594 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-595 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-596 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-597 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-598 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-599 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-600 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-601 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-602 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-603 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-42 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-43 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-44 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-253
author Karoly Lorentey <lorentey@elte.hu>
date Thu, 07 Oct 2004 16:52:19 +0000
parents f70dc61a797f (current diff) ef5d2ed6459e (diff)
children 2bd6d4c2d21c
files ChangeLog admin/FOR-RELEASE lisp/ChangeLog lisp/url/url-handlers.el man/ChangeLog man/info.texi src/.gdbinit src/Makefile.in src/config.in src/fileio.c src/fringe.c src/macterm.c src/window.c src/xdisp.c src/xterm.c
diffstat 50 files changed, 2785 insertions(+), 735 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sun Oct 03 13:08:55 2004 +0000
+++ b/ChangeLog	Thu Oct 07 16:52:19 2004 +0000
@@ -1,3 +1,13 @@
+2004-10-06  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* configure.in (HAVE_RANDOM_HEAPSTART): Change AC_MSG_ERROR to
+	AC_MSG_WARN.  Move output of warning message to end of configure run.
+
+2004-10-05  Jan Dj,Ad(Brv.  <jan.h.d@swipnet.se>
+
+	* configure.in (HAVE_RANDOM_HEAPSTART): Renamed HAVE_EXECSHIELD.
+	Run test to see if heap start address is random.
+
 2004-09-29  Miles Bader  <miles@gnu.org>
 
 	* configure.in (HAVE_EXECSHIELD): Test correct env variable to see
--- a/admin/FOR-RELEASE	Sun Oct 03 13:08:55 2004 +0000
+++ b/admin/FOR-RELEASE	Thu Oct 07 16:52:19 2004 +0000
@@ -28,8 +28,6 @@
 
 ** Finish updating the Emacs Lisp manual.
 
-*** New display properties (KFS to provide input).
-
 ** Update the Emacs manual.
 
 *** Update man/info.texi.
@@ -88,7 +86,7 @@
 man/screen.texi     "Luc Teirlinck"
 man/search.texi     "Luc Teirlinck"
 man/sending.texi
-man/text.texi
+man/text.texi       "Luc Teirlinck"
 man/trouble.texi
 man/windows.texi    "Luc Teirlinck"
 man/xresources.texi
--- a/configure	Sun Oct 03 13:08:55 2004 +0000
+++ b/configure	Thu Oct 07 16:52:19 2004 +0000
@@ -310,7 +310,7 @@
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT LN_S CPP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB INSTALL_INFO EGREP SETARCH LIBSOUND SET_MAKE PKG_CONFIG GTK_CFLAGS GTK_LIBS ALLOCA liblockfile LIBOBJS NEED_SETGID KMEM_GROUP GETLOADAVG_LIBS version configuration canonical srcdir lispdir locallisppath lisppath x_default_search_path etcdir archlibdir docdir bitmapdir gamedir gameuser c_switch_system c_switch_machine LD_SWITCH_X_SITE LD_SWITCH_X_SITE_AUX C_SWITCH_X_SITE X_TOOLKIT_TYPE machfile opsysfile carbon_appdir LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT LN_S CPP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB INSTALL_INFO EGREP LIBSOUND SETARCH SET_MAKE PKG_CONFIG GTK_CFLAGS GTK_LIBS ALLOCA liblockfile LIBOBJS NEED_SETGID KMEM_GROUP GETLOADAVG_LIBS version configuration canonical srcdir lispdir locallisppath lisppath x_default_search_path etcdir archlibdir docdir bitmapdir gamedir gameuser c_switch_system c_switch_machine LD_SWITCH_X_SITE LD_SWITCH_X_SITE_AUX C_SWITCH_X_SITE X_TOOLKIT_TYPE machfile opsysfile carbon_appdir LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -984,7 +984,7 @@
     else
       echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
     fi
-    cd "$ac_popdir"
+    cd $ac_popdir
   done
 fi
 
@@ -3250,7 +3250,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3308,7 +3309,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3424,7 +3426,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3478,7 +3481,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3523,7 +3527,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3567,7 +3572,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4200,7 +4206,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4271,91 +4278,6 @@
 
 
 
-echo "$as_me:$LINENO: checking for /proc/sys/kernel/exec-shield" >&5
-echo $ECHO_N "checking for /proc/sys/kernel/exec-shield... $ECHO_C" >&6
-if test "${ac_cv_file__proc_sys_kernel_exec_shield+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  test "$cross_compiling" = yes &&
-  { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
-echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
-   { (exit 1); exit 1; }; }
-if test -r "/proc/sys/kernel/exec-shield"; then
-  ac_cv_file__proc_sys_kernel_exec_shield=yes
-else
-  ac_cv_file__proc_sys_kernel_exec_shield=no
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_file__proc_sys_kernel_exec_shield" >&5
-echo "${ECHO_T}$ac_cv_file__proc_sys_kernel_exec_shield" >&6
-if test $ac_cv_file__proc_sys_kernel_exec_shield = yes; then
-  emacs_cv_execshield=1
-else
-  emacs_cv_execshield=0
-fi
-
-if test "$emacs_cv_execshield" = 1; then
-  # Extract the first word of "setarch", so it can be a program name with args.
-set dummy setarch; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_SETARCH+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $SETARCH in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_SETARCH="$SETARCH" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_SETARCH="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_path_SETARCH" && ac_cv_path_SETARCH="no"
-  ;;
-esac
-fi
-SETARCH=$ac_cv_path_SETARCH
-
-if test -n "$SETARCH"; then
-  echo "$as_me:$LINENO: result: $SETARCH" >&5
-echo "${ECHO_T}$SETARCH" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-
-  if test "$SETARCH" != no && test "$machine" = "intel386"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_EXECSHIELD 1
-_ACEOF
-
-  else
-    case "`cat /proc/sys/kernel/exec-shield`" in
-      0) ;;
-      *)
-        { { echo "$as_me:$LINENO: error: Exec-shield is turned on.
-Emacs can not dump itself if exec-shield is turned on.
-See \`etc/PROBLEMS' for further information." >&5
-echo "$as_me: error: Exec-shield is turned on.
-Emacs can not dump itself if exec-shield is turned on.
-See \`etc/PROBLEMS' for further information." >&2;}
-   { (exit 1); exit 1; }; }
-    esac
-  fi
-fi
 
 #### Extract some information from the operating system and machine files.
 
@@ -4561,7 +4483,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4590,7 +4513,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4660,7 +4584,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4712,7 +4637,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4783,7 +4709,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4835,7 +4762,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4905,7 +4833,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5075,7 +5004,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5144,7 +5074,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5298,7 +5229,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5391,7 +5323,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5594,7 +5527,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5759,7 +5693,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5822,7 +5757,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5895,7 +5831,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5981,7 +5918,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6054,7 +5992,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6124,7 +6063,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6183,7 +6123,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6252,7 +6193,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6313,7 +6255,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6379,7 +6322,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6525,7 +6469,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6589,7 +6534,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6654,7 +6600,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6700,7 +6647,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6774,7 +6722,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6839,7 +6788,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6883,7 +6833,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6954,7 +6905,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7004,7 +6956,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7075,7 +7028,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7125,7 +7079,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7196,7 +7151,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7246,7 +7202,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7317,7 +7274,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7367,7 +7325,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7438,7 +7397,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7488,7 +7448,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7575,7 +7536,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7681,7 +7643,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7741,7 +7704,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7777,6 +7741,124 @@
 fi
 
 
+echo "$as_me:$LINENO: checking whether heap start address is randomized" >&5
+echo $ECHO_N "checking whether heap start address is randomized... $ECHO_C" >&6
+if test x"$ac_cv_header_unistd_h" != x && test x"$ac_cv_header_stdlib_h" != x
+then
+  if test "$cross_compiling" = yes; then
+  emacs_cv_randomheap='assuming no'
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+int main (int argc, char *argv[])
+{
+  unsigned long old_sbrk = 0;
+  unsigned long this_sbrk = (unsigned long) sbrk(0);
+  int nr = 1;
+  if (argc != 1) {
+    old_sbrk = strtoul (argv[1], 0, 0);
+    nr = atoi (argv[2])+1;
+  }
+  if (argc == 1 || (old_sbrk == this_sbrk && nr < 3))
+  {
+    char buf1[32], buf2[32];
+    sprintf (buf1, "%lu", this_sbrk);
+    sprintf (buf2, "%d", nr);
+    execl (argv[0], argv[0], buf1, buf2, 0);
+    exit (-1);
+  }
+  exit (this_sbrk == old_sbrk);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  emacs_cv_randomheap=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+emacs_cv_randomheap=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+else
+  emacs_cv_randomheap='assuming no'
+fi
+echo "$as_me:$LINENO: result: $emacs_cv_randomheap" >&5
+echo "${ECHO_T}$emacs_cv_randomheap" >&6
+
+if test "$emacs_cv_randomheap" = yes; then
+  # Extract the first word of "setarch", so it can be a program name with args.
+set dummy setarch; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_SETARCH+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $SETARCH in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_SETARCH="$SETARCH" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_SETARCH="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_SETARCH" && ac_cv_path_SETARCH="no"
+  ;;
+esac
+fi
+SETARCH=$ac_cv_path_SETARCH
+
+if test -n "$SETARCH"; then
+  echo "$as_me:$LINENO: result: $SETARCH" >&5
+echo "${ECHO_T}$SETARCH" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+  if test "$SETARCH" != no && test "$machine" = "intel386"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_RANDOM_HEAPSTART 1
+_ACEOF
+
+  else
+        emacs_cv_randomheap=warn
+  fi
+fi
+
+
 
 echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
@@ -7863,7 +7945,6 @@
 echo "$as_me:$LINENO: checking for X" >&5
 echo $ECHO_N "checking for X... $ECHO_C" >&6
 
-ac_path_x_has_been_run=yes
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -7956,7 +8037,7 @@
 /usr/openwin/share/include'
 
 if test "$ac_x_includes" = no; then
-  # Guess where to find include files, by looking for a specified header file.
+  # Guess where to find include files, by looking for Intrinsic.h.
   # First, try using that file with no special directory specified.
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -8030,7 +8111,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8090,12 +8172,8 @@
   # Update the cache value to reflect the command line values.
   ac_cv_have_x="have_x=yes \
 		ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
-  # It might be that x_includes is empty (headers are found in the
-  # standard search path. Then output the corresponding message
-  ac_out_x_includes=$x_includes
-  test "x$x_includes" = x && ac_out_x_includes="in standard search path"
-  echo "$as_me:$LINENO: result: libraries $x_libraries, headers $ac_out_x_includes" >&5
-echo "${ECHO_T}libraries $x_libraries, headers $ac_out_x_includes" >&6
+  echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
+echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
 fi
 
 if test "$no_x" = yes; then
@@ -8259,7 +8337,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8354,7 +8433,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8413,7 +8493,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8497,7 +8578,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8681,7 +8763,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8933,7 +9016,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9000,7 +9084,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9069,7 +9154,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9154,7 +9240,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9231,7 +9318,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9285,7 +9373,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9354,7 +9443,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9458,7 +9548,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9525,7 +9616,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9595,7 +9687,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9833,7 +9926,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9907,7 +10001,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9979,7 +10074,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10061,7 +10157,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10140,7 +10237,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10214,7 +10312,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10282,7 +10381,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10351,7 +10451,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10475,7 +10576,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10571,7 +10673,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10651,7 +10754,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10719,7 +10823,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10864,7 +10969,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10973,7 +11079,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -11118,7 +11225,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -11225,7 +11333,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -11379,7 +11488,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -11454,7 +11564,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -11602,7 +11713,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -11679,7 +11791,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -11826,7 +11939,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -11902,7 +12016,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -12067,7 +12182,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -12212,7 +12328,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -12288,7 +12405,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -12351,7 +12469,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -12432,7 +12551,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -12573,7 +12693,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -12718,7 +12839,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -12794,7 +12916,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -12867,7 +12990,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -13022,7 +13146,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -13088,7 +13213,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -13346,7 +13472,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -13413,7 +13540,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -13565,7 +13693,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -13749,7 +13878,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -14076,7 +14206,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -14177,7 +14308,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -14250,7 +14382,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -14329,7 +14462,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -14398,7 +14532,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -14466,7 +14601,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -14540,7 +14676,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -14644,7 +14781,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -14719,7 +14857,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -14871,7 +15010,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -14939,7 +15079,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -15116,7 +15257,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -15192,7 +15334,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -15346,7 +15489,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -15497,7 +15641,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -15648,7 +15793,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -15790,7 +15936,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -15834,7 +15981,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -15980,7 +16128,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16024,7 +16173,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16089,7 +16239,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16152,7 +16303,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16254,7 +16406,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16323,7 +16476,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16430,7 +16584,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16533,7 +16688,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16609,7 +16765,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16713,7 +16870,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16805,7 +16963,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16870,7 +17029,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -16936,7 +17096,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17046,7 +17207,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17111,7 +17273,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17191,7 +17354,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17264,7 +17428,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17337,7 +17502,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17410,7 +17576,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17484,7 +17651,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17556,7 +17724,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17631,7 +17800,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17703,7 +17873,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17776,7 +17947,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -17926,7 +18098,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -18072,7 +18245,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -18218,7 +18392,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -18375,7 +18550,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -18521,7 +18697,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -18667,7 +18844,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -18825,7 +19003,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -18983,7 +19162,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -19172,7 +19352,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -19245,7 +19426,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -19313,7 +19495,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -19359,7 +19542,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -19433,7 +19617,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -19497,7 +19682,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -19635,7 +19821,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -19696,7 +19883,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -19841,7 +20029,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -19997,7 +20186,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -20168,7 +20358,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -20236,7 +20427,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -20421,7 +20613,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -20714,7 +20907,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -20779,7 +20973,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -20842,7 +21037,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -20908,7 +21104,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -20949,7 +21146,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -21016,7 +21214,8 @@
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -21234,6 +21433,29 @@
 echo "  Does Emacs use X toolkit scroll bars?                   ${USE_TOOLKIT_SCROLL_BARS}"
 echo
 
+if test "$emacs_cv_randomheap" = warn; then
+  { echo "$as_me:$LINENO: WARNING:
+**********************************************************************
+
+Heap start address is randomized and no workaround is known.
+Emacs will probably dump core when temacs is run in the build phase.
+Maybe exec-shield is turned on.  Read about exec-shield in \`etc/PROBLEMS'
+for further information.
+
+**********************************************************************
+" >&5
+echo "$as_me: WARNING:
+**********************************************************************
+
+Heap start address is randomized and no workaround is known.
+Emacs will probably dump core when temacs is run in the build phase.
+Maybe exec-shield is turned on.  Read about exec-shield in \`etc/PROBLEMS'
+for further information.
+
+**********************************************************************
+" >&2;}
+fi
+
 # Remove any trailing slashes in these variables.
 test "${prefix}" != NONE &&
   prefix=`echo "${prefix}" | sed 's,\([^/]\)/*$,\1,'`
@@ -21921,8 +22143,8 @@
 s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
 s,@INSTALL_INFO@,$INSTALL_INFO,;t t
 s,@EGREP@,$EGREP,;t t
+s,@LIBSOUND@,$LIBSOUND,;t t
 s,@SETARCH@,$SETARCH,;t t
-s,@LIBSOUND@,$LIBSOUND,;t t
 s,@SET_MAKE@,$SET_MAKE,;t t
 s,@PKG_CONFIG@,$PKG_CONFIG,;t t
 s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t
@@ -22123,6 +22345,11 @@
   *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
   esac
 
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
   # Let's still pretend it is `configure' which instantiates (i.e., don't
   # use $as_me), people would be surprised to read:
   #    /* config.h.  Generated by config.status.  */
@@ -22161,12 +22388,6 @@
 	 fi;;
       esac
     done` || { (exit 1); exit 1; }
-
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
   sed "$ac_vpsub
--- a/configure.in	Sun Oct 03 13:08:55 2004 +0000
+++ b/configure.in	Thu Oct 07 16:52:19 2004 +0000
@@ -1286,25 +1286,6 @@
 dnl checks for Unix variants
 AC_AIX
 
-dnl check if exec-shield is present.
-AC_CHECK_FILE(/proc/sys/kernel/exec-shield, emacs_cv_execshield=1,
-                                            emacs_cv_execshield=0)
-if test "$emacs_cv_execshield" = 1; then
-  AC_PATH_PROG(SETARCH, setarch, no)
-  AC_SUBST(SETARCH)
-  if test "$SETARCH" != no && test "$machine" = "intel386"; then
-    AC_DEFINE(HAVE_EXECSHIELD, 1,
-    [Define to 1 if this OS has exec shield and we can handle it.])
-  else
-    case "`cat /proc/sys/kernel/exec-shield`" in
-      0) ;;
-      *)
-        AC_MSG_ERROR([Exec-shield is turned on.
-Emacs can not dump itself if exec-shield is turned on.
-See `etc/PROBLEMS' for further information.])
-    esac
-  fi
-fi
 
 #### Extract some information from the operating system and machine files.
 
@@ -1591,6 +1572,53 @@
 	    [Define as `void' if your compiler accepts `void *'; otherwise
 	     define as `char'.])dnl
 
+dnl Test if heap start address is randomized (exec-shield does this).
+dnl The test program requires unistd.h and stdlib.h.  They are present
+dnl on the systems that currently have exec-shield.
+AC_MSG_CHECKING(whether heap start address is randomized)
+if test x"$ac_cv_header_unistd_h" != x && test x"$ac_cv_header_stdlib_h" != x
+then
+  AC_TRY_RUN([#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+int main (int argc, char *argv[])
+{
+  unsigned long old_sbrk = 0;
+  unsigned long this_sbrk = (unsigned long) sbrk(0);
+  int nr = 1;
+  if (argc != 1) {
+    old_sbrk = strtoul (argv[1], 0, 0);
+    nr = atoi (argv[2])+1;
+  }
+  if (argc == 1 || (old_sbrk == this_sbrk && nr < 3))
+  {
+    char buf1[32], buf2[32];
+    sprintf (buf1, "%lu", this_sbrk);
+    sprintf (buf2, "%d", nr);
+    execl (argv[0], argv[0], buf1, buf2, 0);
+    exit (-1);
+  }
+  exit (this_sbrk == old_sbrk);
+}], emacs_cv_randomheap=yes, emacs_cv_randomheap=no,
+     emacs_cv_randomheap='assuming no')
+else
+  emacs_cv_randomheap='assuming no'
+fi
+AC_MSG_RESULT($emacs_cv_randomheap)
+
+if test "$emacs_cv_randomheap" = yes; then
+  AC_PATH_PROG(SETARCH, setarch, no)
+  AC_SUBST(SETARCH)
+  if test "$SETARCH" != no && test "$machine" = "intel386"; then
+    AC_DEFINE(HAVE_RANDOM_HEAPSTART, 1,
+    [Define to 1 if this OS randomizes the start address of the heap.])
+  else
+    dnl We do the warning at the end of the configure run so it is seen.
+    emacs_cv_randomheap=warn
+  fi
+fi
+
+
 dnl This could be used for targets which can have both byte sexes.
 dnl We could presumably replace the hardwired WORDS_BIG_ENDIAN generally.
 dnl AC_C_BIGENDIAN
@@ -3058,6 +3086,19 @@
 echo "  Does Emacs use X toolkit scroll bars?                   ${USE_TOOLKIT_SCROLL_BARS}"
 echo
 
+if test "$emacs_cv_randomheap" = warn; then 
+  AC_MSG_WARN([
+**********************************************************************
+
+Heap start address is randomized and no workaround is known.
+Emacs will probably dump core when temacs is run in the build phase.
+Maybe exec-shield is turned on.  Read about exec-shield in `etc/PROBLEMS'
+for further information.
+
+**********************************************************************
+])
+fi
+
 # Remove any trailing slashes in these variables.
 [test "${prefix}" != NONE &&
   prefix=`echo "${prefix}" | sed 's,\([^/]\)/*$,\1,'`
--- a/etc/ChangeLog	Sun Oct 03 13:08:55 2004 +0000
+++ b/etc/ChangeLog	Thu Oct 07 16:52:19 2004 +0000
@@ -1,3 +1,12 @@
+2004-10-04  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* enriched.doc: Update for new bindings of `set-left-margin' and
+	`set-right-margin'.
+
+2004-10-04  Kim F. Storm  <storm@cua.dk>
+
+	* DEBUG: Mention pp and ff commands.
+
 2004-09-26  Luc Teirlinck  <teirllm@auburn.edu>
 
 	* enriched.doc: `enriched-annotation-alist' is now called
--- a/etc/DEBUG	Sun Oct 03 13:08:55 2004 +0000
+++ b/etc/DEBUG	Thu Oct 07 16:52:19 2004 +0000
@@ -69,9 +69,11 @@
 in the ordinary way, with the `p' command.  Then type `pr' with no
 arguments.  This calls a subroutine which uses the Lisp printer.
 
-Note: It is not a good idea to try `pr' if you know that Emacs is in
-deep trouble: its stack smashed (e.g., if it encountered SIGSEGV due
-to stack overflow), or crucial data structures, such as `obarray',
+You can also use `pp value' to print the emacs value directly.
+
+Note: It is not a good idea to try `pr' or `pp' if you know that Emacs
+is in deep trouble: its stack smashed (e.g., if it encountered SIGSEGV
+due to stack overflow), or crucial data structures, such as `obarray',
 corrupted, etc.  In such cases, the Emacs subroutine called by `pr'
 might make more damage, like overwrite some data that is important for
 debugging the original problem.
@@ -442,6 +444,9 @@
 Emacs compiled with GLYPH_DEBUG defined; type "C-h f dump- TAB" and
 "C-h f trace- TAB" to see the full list.
 
+When you debug display problems running emacs under X, you can use
+the `ff' command to flush all pending display updates to the screen.
+
 
 ** Debugging LessTif
 
--- a/etc/NEWS	Sun Oct 03 13:08:55 2004 +0000
+++ b/etc/NEWS	Thu Oct 07 16:52:19 2004 +0000
@@ -99,6 +99,11 @@
 * Changes in Emacs 21.4
 
 +++
+** In Enriched mode, `set-left-margin' and `set-right-margin' are now
+by default bound to `C-c [' and `C-c ]' instead of the former `C-c C-l'
+and `C-c C-r'.
+
++++
 ** In processing a local variables list, Emacs strips the prefix and
 suffix are from every line before processing all the lines.
 
@@ -1391,6 +1396,10 @@
 attempt to construct a unique auto-save name (e.g. for remote files).
 
 +++
+** There is a new calendar package, icalendar.el, that can be used to
+convert Emacs diary entries to/from the iCalendar format.
+
++++
 ** Diary sexp entries can have custom marking in the calendar.
 Diary sexp functions which only apply to certain days (such as
 `diary-block' or `diary-cyclic') now take an optional parameter MARK,
@@ -1406,6 +1415,11 @@
 year and day number, and moves to that date. Negative day numbers
 count backward from the end of the year.
 
++++
+** The new Calendar function `calendar-goto-iso-week' (g w)
+prompts for a year and a week number, and moves to the first
+day of that ISO week.
+
 ---
 ** The functions `holiday-easter-etc' and `holiday-advent' now take
 arguments, and only report on the specified holiday rather than all.
@@ -2483,9 +2497,8 @@
 `define-fringe-bitmap', and FACE is an optional face name to be used
 for displaying the bitmap.
 
-*** New function `fringe-bitmaps-at-pos' returns a cons (LEFT . RIGHT)
-identifying the current fringe bitmaps in the display line at a given
-buffer position.  A nil value means no bitmap.
+*** New function `fringe-bitmaps-at-pos' returns the current fringe
+bitmaps in the display line at a given buffer position.
 
 ** Multiple overlay arrows can now be defined and managed via the new
 variable `overlay-arrow-variable-list'.  It contains a list of
--- a/etc/enriched.doc	Sun Oct 03 13:08:55 2004 +0000
+++ b/etc/enriched.doc	Thu Oct 07 16:52:19 2004 +0000
@@ -98,8 +98,8 @@
 <indent>The fill functions also understand margins, which can be set for
 any region of a document.  In addition to the menu items, which
 increase or decrease the margins, there are two commands for
-setting the margins absolutely: <fixed>C-c C-l (set-left-margin)</fixed> and <fixed>C-c
-C-r (set-right-margin)</fixed>.
+setting the margins absolutely: <fixed>C-c [ (set-left-margin)</fixed> and <fixed>C-c
+] (set-right-margin)</fixed>.
 
 
 You <indent>can change indentation at any point in a paragraph, which
--- a/lisp/ChangeLog	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/ChangeLog	Thu Oct 07 16:52:19 2004 +0000
@@ -1,3 +1,69 @@
+2004-10-06  Nick Roberts  <nickrob@snap.net.nz>
+
+	* progmodes/gdb-ui.el (gdb-ann3): (Re-)initialise gdb-input-queue.
+
+2004-10-06  John Paul Wallington  <jpw@gnu.org>
+
+	* xml.el (xml-parse-dtd): Fix `error' call.
+
+2004-10-05  Mark A. Hershberger  <mah@everybody.org>
+
+	* xml.el (xml-substitute-special): Return a single string instead
+	of a list of strings if an entity substitution is made.
+
+2004-10-05  Ulf Jasper  <ulf.jasper@web.de>
+
+	* calendar/icalendar.el: New file.
+
+2004-10-05  Juri Linkov  <juri@jurta.org>
+
+	* isearch.el (isearch-done): Set mark after running hook.
+	Suggested by Drew Adams <drew.adams@oracle.com>.
+
+	* info.el (Info-history, Info-toc): Fix Info headers.
+	(Info-toc): Narrow buffer before Info-fontify-node.
+	(Info-build-toc): Don't check for special Info file names.
+	Set main-file to nil if Info-find-file returns a symbol.
+
+2004-10-05  Emilio C. Lopes  <eclig@gmx.net>:
+
+	* calendar/calendar.el (calendar-goto-iso-week): Add autoload.
+	(calendar-mode-map): Add binding for `calendar-goto-iso-week'.
+	* calendar/cal-menu.el (calendar-mode-map): Ditto.
+
+2004-10-05  Glenn Morris  <gmorris@ast.cam.ac.uk>
+
+	* calendar/cal-iso.el (calendar-iso-read-args): New function,
+	for old interactive spec from calendar-goto-iso-date.
+	(calendar-goto-iso-date): Use it.
+	(calendar-goto-iso-week): New function.  Suggested by Emilio
+	C. Lopes <eclig@gmx.net>.
+
+2004-10-04  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* textmodes/enriched.el (enriched-mode-map): Give
+	`set-left-margin' and `set-right-margin' bindings that follow the
+	minor mode conventions.
+
+2004-10-03  Stefan  <monnier@iro.umontreal.ca>
+
+	* textmodes/tex-mode.el (tex-dvi-view-command): Use `yap' on w32.
+	(tex-font-lock-keywords-1): Add url and nolinkurl for args with `_'.
+	(latex-block-args-alist): Add minipage and picture.
+	(latex-block-body-alist): Use reftex-label if enabled.
+	(latex-insert-block): Don't insert a \n if not necessary.
+	(tex-compile-commands): Make sure dvips doesn't send to printer.
+	(tex-compile-default): Handle the case where no executable is found.
+	(latex-noindent-environments): New var.
+	(latex-find-indent): Use it.  Take an empty line as an arg-breaker.
+	If tex-indent-allhanging is non-nil, make sure we only align for macros
+	at beginning of line.
+
+2004-10-03  Daniel Pfeiffer  <occitan@esperanto.org>
+
+	* newcomment.el (comment-beginning): Doc fix and don't choke on
+	unset `comment-end-skip' when at beginning of comment.
+
 2004-10-02  Dan Nicolaescu  <dann@ics.uci.edu>
 
 	* term.el (term-adjust-current-row-cache): Don't allow the current
@@ -5,9 +71,8 @@
 	(term-emulate-terminal): Fix insert mode. Handle tab insertion at
 	the end of the line. Fix scroll down. Add comments.
 	(term-handle-ansi-escape): Don't exceed terminal width when moving
-	right.  
-	(term-scroll-region): Move the cursor after setting the scroll
-	region. 
+	right.
+	(term-scroll-region): Move the cursor after setting the scroll region.
 
 2004-10-01  Luc Teirlinck  <teirllm@auburn.edu>
 
@@ -33,8 +98,8 @@
 
 2004-09-29  Luc Teirlinck  <teirllm@auburn.edu>
 
-	* textmodes/paragraphs.el (forward-paragraph): Avoid
-	args-out-of-range error when point winds up at the beginning of
+	* textmodes/paragraphs.el (forward-paragraph):
+	Avoid args-out-of-range error when point winds up at the beginning of
 	the buffer and hard newlines are enabled.
 
 	* newcomment.el (comment-multi-line): Doc fix.
--- a/lisp/calendar/cal-iso.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/calendar/cal-iso.el	Thu Oct 07 16:52:19 2004 +0000
@@ -1,8 +1,9 @@
 ;;; cal-iso.el --- calendar functions for the ISO calendar
 
-;; Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2004 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
+;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
 ;; Keywords: calendar
 ;; Human-Keywords: ISO calendar, calendar, diary
 
@@ -96,27 +97,39 @@
   (message "ISO date: %s"
            (calendar-iso-date-string (calendar-cursor-to-date t))))
 
+(defun calendar-iso-read-args (&optional dayflag)
+  "Interactively read the arguments for an iso date command."
+  (let* ((today (calendar-current-date))
+         (year (calendar-read
+                "ISO calendar year (>0): "
+                '(lambda (x) (> x 0))
+                (int-to-string (extract-calendar-year today))))
+         (no-weeks (extract-calendar-month
+                    (calendar-iso-from-absolute
+                     (1-
+                      (calendar-dayname-on-or-before
+                       1 (calendar-absolute-from-gregorian
+                          (list 1 4 (1+ year))))))))
+         (week (calendar-read
+                (format "ISO calendar week (1-%d): " no-weeks)
+                '(lambda (x) (and (> x 0) (<= x no-weeks)))))
+         (day (if dayflag (calendar-read
+                           "ISO day (1-7): "
+                           '(lambda (x) (and (<= 1 x) (<= x 7))))
+                1)))
+    (list (list week day year))))
+
 (defun calendar-goto-iso-date (date &optional noecho)
   "Move cursor to ISO DATE; echo ISO date unless NOECHO is t."
-  (interactive
-   (let* ((today (calendar-current-date))
-          (year (calendar-read
-                 "ISO calendar year (>0): "
-                 '(lambda (x) (> x 0))
-                 (int-to-string (extract-calendar-year today))))
-          (no-weeks (extract-calendar-month
-                     (calendar-iso-from-absolute
-                      (1-
-                       (calendar-dayname-on-or-before
-                        1 (calendar-absolute-from-gregorian
-                           (list 1 4 (1+ year))))))))
-          (week (calendar-read
-                 (format "ISO calendar week (1-%d): " no-weeks)
-                 '(lambda (x) (and (> x 0) (<= x no-weeks)))))
-          (day (calendar-read
-                "ISO day (1-7): "
-                '(lambda (x) (and (<= 1 x) (<= x 7))))))
-     (list (list week day year))))
+  (interactive (calendar-iso-read-args t))
+  (calendar-goto-date (calendar-gregorian-from-absolute
+                       (calendar-absolute-from-iso date)))
+  (or noecho (calendar-print-iso-date)))
+
+(defun calendar-goto-iso-week (date &optional noecho)
+  "Move cursor to ISO DATE; echo ISO date unless NOECHO is t.
+Interactively, goes to the first day of the specified week."
+  (interactive (calendar-iso-read-args))
   (calendar-goto-date (calendar-gregorian-from-absolute
                        (calendar-absolute-from-iso date)))
   (or noecho (calendar-print-iso-date)))
--- a/lisp/calendar/cal-menu.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/calendar/cal-menu.el	Thu Oct 07 16:52:19 2004 +0000
@@ -1,9 +1,10 @@
 ;;; cal-menu.el --- calendar functions for menu bar and popup menu support
 
-;; Copyright (C) 1994, 1995, 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 2001, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;;	Lara Rios <lrios@coewl.cen.uiuc.edu>
+;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
 ;; Keywords: calendar
 ;; Human-Keywords: calendar, popup menus, menu bar
 
@@ -121,6 +122,8 @@
   '("Astronomical Date" . calendar-goto-astro-day-number))
 (define-key calendar-mode-map [menu-bar goto iso]
   '("ISO Date" . calendar-goto-iso-date))
+(define-key calendar-mode-map [menu-bar goto iso-week]
+  '("ISO Week" . calendar-goto-iso-week))
 (define-key calendar-mode-map [menu-bar goto day-of-year]
   '("Day of Year" . calendar-goto-day-of-year))
 (define-key calendar-mode-map [menu-bar goto gregorian]
--- a/lisp/calendar/calendar.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/calendar/calendar.el	Thu Oct 07 16:52:19 2004 +0000
@@ -1769,6 +1769,10 @@
   "Move cursor to ISO date."
   t)
 
+(autoload 'calendar-goto-iso-week "cal-iso"
+  "Move cursor to start of ISO week."
+  t)
+
 (autoload 'calendar-print-iso-date "cal-iso"
   "Show the ISO date equivalents of date."
   t)
@@ -2204,6 +2208,7 @@
   (define-key calendar-mode-map "ge"  'calendar-goto-ethiopic-date)
   (define-key calendar-mode-map "gp"  'calendar-goto-persian-date)
   (define-key calendar-mode-map "gc"  'calendar-goto-iso-date)
+  (define-key calendar-mode-map "gw"  'calendar-goto-iso-week)
   (define-key calendar-mode-map "gf"  'calendar-goto-french-date)
   (define-key calendar-mode-map "gml"  'calendar-goto-mayan-long-count-date)
   (define-key calendar-mode-map "gmpc" 'calendar-previous-calendar-round-date)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/calendar/icalendar.el	Thu Oct 07 16:52:19 2004 +0000
@@ -0,0 +1,1299 @@
+;;; icalendar.el --- iCalendar implementation
+
+;; Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
+
+;; Author:   Ulf Jasper <ulf.jasper@web.de>
+;; Created:  August 2002
+;; Keywords: calendar
+;; Human-Keywords: calendar, diary, iCalendar, vCalendar
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs 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 GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This package is documented in the Emacs Manual.
+
+
+;;; History:
+
+;;  0.06  Bugfixes regarding icalendar-import-format-*.
+;;        Fix in icalendar-convert-diary-to-ical -- thanks to Philipp Grau.
+
+;;  0.05: New import format scheme: Replaced icalendar-import-prefix-*,
+;;        icalendar-import-ignored-properties, and
+;;        icalendar-import-separator with icalendar-import-format(-*).
+;;        icalendar-import-file and icalendar-convert-diary-to-ical
+;;        have an extra parameter which should prevent them from
+;;        erasing their target files (untested!).
+;;        Tested with Emacs 21.3.2
+
+;;  0.04: Bugfix: import: double quoted param values did not work
+;;        Read DURATION property when importing.
+;;        Added parameter icalendar-duration-correction.
+
+;;  0.03: Export takes care of european-calendar-style.
+;;        Tested with Emacs 21.3.2 and XEmacs 21.4.12
+
+;;  0.02: Should work in XEmacs now.  Thanks to Len Trigg for the
+;;        XEmacs patches!
+;;        Added exporting from Emacs diary to ical.
+;;        Some bugfixes, after testing with calendars from
+;;        http://icalshare.com.
+;;        Tested with Emacs 21.3.2 and XEmacs 21.4.12
+
+;;  0.01: First published version.  Trial version.  Alpha version.
+
+;; ======================================================================
+;; To Do:
+
+;;  * Import from ical:
+;;    + Need more properties for icalendar-import-format
+;;    + check vcalendar version
+;;    + check (unknown) elements
+;;    + recurring events!
+;;    + works for european style calendars only! Does it?
+;;    + alarm
+;;    + exceptions in recurring events
+;;    + the parser is too soft
+;;    + error log is incomplete
+;;    + nice to have: #include "webcal://foo.com/some-calendar.ics"
+
+;;  * Export into ical
+;;    + diary-date, diary-float, and self-made sexp entries are not
+;;      understood
+;;    + timezones, currently all times are local!
+
+;;  * Other things
+;;    + defcustom icalendar-import-ignored-properties does not work with
+;;      XEmacs.
+;;    + clean up all those date/time parsing functions
+;;    + Handle todo items?
+;;    + Check iso 8601 for datetime and period
+;;    + Which chars to (un)escape?
+;;    + Time to find out how the profiler works?
+
+
+;;; Code:
+
+(defconst icalendar-version 0.06
+  "Version number of icalendar.el.")
+
+;; ======================================================================
+;; Customizables
+;; ======================================================================
+(defgroup icalendar nil
+  "Icalendar support."
+  :prefix "icalendar-"
+  :group 'calendar)
+
+(defcustom icalendar-import-format
+  "%s%d%l%o"
+  "Format string for importing events from iCalendar into Emacs diary.
+This string defines how iCalendar events are inserted into diary
+file.  Meaning of the specifiers:
+%d Description, see `icalendar-import-format-description'
+%l Location, see `icalendar-import-format-location'
+%o Organizer, see `icalendar-import-format-organizer'
+%s Subject, see `icalendar-import-format-subject'"
+  :type 'string
+  :group 'icalendar)
+
+(defcustom icalendar-import-format-subject
+  "%s"
+  "Format string defining how the subject element is formatted.
+This applies only if the subject is not empty! `%s' is replaced
+by the subject."
+  :type 'string
+  :group 'icalendar)
+
+(defcustom icalendar-import-format-description
+  "\n Desc: %s"
+  "Format string defining how the description element is formatted.
+This applies only if the description is not empty! `%s' is
+replaced by the description."
+  :type 'string
+  :group 'icalendar)
+
+(defcustom icalendar-import-format-location
+  "\n Location: %s"
+  "Format string defining how the location element is formatted.
+This applies only if the location is not empty! `%s' is replaced
+by the location."
+  :type 'string
+  :group 'icalendar)
+
+(defcustom icalendar-import-format-organizer
+  "\n Organizer: %s"
+  "Format string defining how the organizer element is formatted.
+This applies only if the organizer is not empty! `%s' is
+replaced by the organizer."
+  :type 'string
+  :group 'icalendar)
+
+(defcustom icalendar-duration-correction
+  t
+  "Workaround for all-day events.
+If non-nil the length=duration of iCalendar appointments that
+have a length of exactly n days is decreased by one day.  This
+fixes problems with all-day events, which appear to be one day
+longer than they are."
+  :type 'boolean
+  :group 'icalendar)
+
+
+;; ======================================================================
+;; NO USER SERVICABLE PARTS BELOW THIS LINE
+;; ======================================================================
+
+(defconst icalendar-weekdayabbrev-table
+  '(("mon\\(day\\)?"    . "MO")
+    ("tue\\(sday\\)?"   . "TU")
+    ("wed\\(nesday\\)?" . "WE")
+    ("thu\\(rsday\\)?"  . "TH")
+    ("fri\\(day\\)?"    . "FR")
+    ("sat\\(urday\\)?"  . "SA")
+    ("sun\\(day\\)?"    . "SU"))
+  "Translation table for weekdays.")
+
+(defconst icalendar-monthnumber-table
+  '(("^jan\\(uar\\)?y?$"       . 1)
+    ("^feb\\(ruar\\)?y?$"      . 2)
+    ("^mar\\(ch\\)?\\|märz?$" . 3)
+    ("^apr\\(il\\)?$"          . 4)
+    ("^ma[iy]$"                . 5)
+    ("^jun[ie]?$"              . 6)
+    ("^jul[iy]?$"              . 7)
+    ("^aug\\(ust\\)?$"         . 8)
+    ("^sep\\(tember\\)?$"      . 9)
+    ("^o[ck]t\\(ober\\)?$"     . 10)
+    ("^nov\\(ember\\)?$"       . 11)
+    ("^de[cz]\\(ember\\)?$"    . 12))
+  "Regular expressions for month names.
+Currently this matches only German and English.")
+
+(defvar icalendar-debug nil ".")
+
+;; ======================================================================
+;; all the other libs we need
+;; ======================================================================
+(require 'calendar)
+(require 'appt)
+
+;; ======================================================================
+;; Core functionality
+;; Functions for parsing icalendars, importing and so on
+;; ======================================================================
+
+(defun icalendar-get-unfolded-buffer (folded-ical-buffer)
+  "Return a new buffer containing the unfolded contents of a buffer.
+Folding is the iCalendar way of wrapping long lines.  In the
+created buffer all occurrences of CR LF BLANK are replaced by the
+empty string.  Argument FOLDED-ICAL-BUFFER is the unfolded input
+buffer."
+  (let ((unfolded-buffer (get-buffer-create " *icalendar-work*")))
+    (save-current-buffer
+      (set-buffer unfolded-buffer)
+      (erase-buffer)
+      (insert-buffer folded-ical-buffer)
+      (while (re-search-forward "\r?\n[ \t]" nil t)
+        (replace-match "" nil nil))
+      )
+    unfolded-buffer))
+
+;; Replace regexp RE with RP in string ST and return the new string.
+;; This is here for compatibility with XEmacs.
+(defsubst icalendar-rris (re rp st)
+  ;; XEmacs:
+  (if (fboundp 'replace-in-string)
+      (save-match-data ;; apparently XEmacs needs save-match-data
+        (replace-in-string st re rp))
+    ;; Emacs:
+    (replace-regexp-in-string re rp st)))
+
+(defun icalendar-read-element (invalue inparams)
+  "Recursively read the next iCalendar element in the current buffer.
+INVALUE gives the current iCalendar element we are reading.
+INPARAMS gives the current parameters.....
+This function calls itself recursively for each nested calendar element
+it finds"
+  (let (element children line name params param param-name param-value
+                value
+        (continue t))
+    (setq children '())
+    (while (and continue
+                (re-search-forward "^\\([A-Za-z0-9-]+\\)[;:]" nil t))
+      (setq name (intern (match-string 1)))
+      (backward-char 1)
+      (setq params '())
+      (setq line '())
+      (while (looking-at ";")
+        (re-search-forward ";\\([A-Za-z0-9-]+\\)=" nil nil)
+        (setq param-name (intern (match-string 1)))
+        (re-search-forward "\\(\\([^;,:\"]+\\)\\|\"\\([^\"]+\\)\"\\)[;:]"
+                           nil t)
+        (backward-char 1)
+        (setq param-value (or (match-string 2) (match-string 3)))
+        (setq param (list param-name param-value))
+        (while (looking-at ",")
+          (re-search-forward "\\(\\([^;,:]+\\)\\|\"\\([^\"]+\\)\"\\)"
+                             nil t)
+          (if (match-string 2)
+              (setq param-value (match-string 2))
+            (setq param-value (match-string 3)))
+          (setq param (append param param-value)))
+        (setq params (append params param)))
+      (unless (looking-at ":")
+        (error "Oops"))
+      (forward-char 1)
+      (re-search-forward  "\\(.*\\)\\(\r?\n[ \t].*\\)*" nil t)
+      (setq value (icalendar-rris "\r?\n[ \t]" "" (match-string 0)))
+      (setq line (list name params value))
+      (cond ((eq name 'BEGIN)
+             (setq children
+                   (append children
+                           (list (icalendar-read-element (intern value)
+                                                         params)))))
+            ((eq name 'END)
+             (setq continue nil))
+            (t
+             (setq element (append element (list line))))))
+    (if invalue
+        (list invalue inparams element children)
+      children)))
+
+;; ======================================================================
+;; helper functions for examining events
+;; ======================================================================
+
+(defsubst icalendar-get-all-event-properties (event)
+  "Return the list of properties in this EVENT."
+  (car (cddr event)))
+
+(defun icalendar-get-event-property (event prop)
+  "For the given EVENT return the value of the property PROP."
+  (catch 'found
+    (let ((props (car (cddr event))) pp)
+      (while props
+        (setq pp (car props))
+        (if (eq (car pp) prop)
+            (throw 'found (car (cddr pp))))
+        (setq props (cdr props))))
+    nil))
+
+(defun icalendar-set-event-property (event prop new-value)
+  "For the given EVENT set the property PROP to the value NEW-VALUE."
+  (catch 'found
+    (let ((props (car (cddr event))) pp)
+      (while props
+        (setq pp (car props))
+        (when (eq (car pp) prop)
+          (setcdr (cdr pp) new-value)
+          (throw 'found (car (cddr pp))))
+        (setq props (cdr props)))
+      (setq props (car (cddr event)))
+      (setcar (cddr event)
+              (append props (list (list prop nil new-value)))))))
+
+(defun icalendar-get-children (node name)
+  "Return all children of the given NODE which have a name NAME.
+For instance the VCALENDAR node can have VEVENT children as well as VTODO
+children."
+  (let ((result nil)
+        (children (cadr (cddr node))))
+    (when (eq (car node) name)
+      (setq result node))
+    ;;(message "%s" node)
+    (when children
+      (let ((subresult
+             (delq nil
+		   (mapcar (lambda (n)
+			     (icalendar-get-children n name))
+			   children))))
+        (if subresult
+            (if result
+                (setq result (append result subresult))
+              (setq result subresult)))))
+    result))
+
+; private
+(defun icalendar-all-events (icalendar)
+  "Return the list of all existing events in the given ICALENDAR."
+  (interactive "")
+  (icalendar-get-children (car icalendar) 'VEVENT))
+
+(defun icalendar-split-value (value-string)
+  "Splits VALUE-STRING at ';='."
+  (let ((result '())
+        param-name param-value)
+    (when value-string
+      (save-current-buffer
+        (set-buffer (get-buffer-create " *ical-temp*"))
+        (set-buffer-modified-p nil)
+        (erase-buffer)
+        (insert value-string)
+        (goto-char (point-min))
+        (while
+	    (re-search-forward
+	     "\\([A-Za-z0-9-]+\\)=\\(\\([^;,:]+\\)\\|\"\\([^\"]+\\)\"\\);?"
+	     nil t)
+          (setq param-name (intern (match-string 1)))
+          (setq param-value (match-string 2))
+          (setq result
+		(append result (list (list param-name param-value)))))))
+    result))
+
+(defun icalendar-decode-isodatetime (isodatetimestring)
+  "Return ISODATETIMESTRING in format like `decode-time'.
+Converts from ISO-8601 to Emacs representation.  If ISODATETIMESTRING
+specifies UTC time (trailing letter Z) the decoded time is given in
+the local time zone! FIXME: TZID-attributes are ignored....! FIXME:
+multiple comma-separated values should be allowed!"
+  (icalendar-dmsg isodatetimestring)
+  (if isodatetimestring
+      ;; day/month/year must be present
+      (let ((year  (read (substring isodatetimestring 0 4)))
+            (month (read (substring isodatetimestring 4 6)))
+            (day   (read (substring isodatetimestring 6 8)))
+            (hour 0)
+            (minute 0)
+            (second 0))
+        (when (> (length isodatetimestring) 12)
+	  ;; hour/minute present
+          (setq hour (read (substring isodatetimestring 9 11)))
+          (setq minute (read (substring isodatetimestring 11 13))))
+        (when (> (length isodatetimestring) 14)
+	  ;; seconds present
+          (setq second (read (substring isodatetimestring 13 15))))
+        (when (and (> (length isodatetimestring) 15)
+		   ;; UTC specifier present
+                   (char-equal ?Z (aref isodatetimestring 15)))
+          ;; if not UTC add current-time-zone offset
+          (setq second (+ (car (current-time-zone)) second)))
+        ;; create the decoded date-time
+        ;; FIXME!?!
+        (condition-case nil
+            (decode-time (encode-time second minute hour day month year))
+          (error
+           (message "Cannot decode \"%s\"" isodatetimestring)
+           ;; hope for the best...
+           (list second minute hour day month year 0 nil 0))))
+    ;; isodatetimestring == nil
+    nil))
+
+(defun icalendar-decode-isoduration (isodurationstring)
+  "Return ISODURATIONSTRING in format like `decode-time'.
+Converts from ISO-8601 to Emacs representation.  If ISODURATIONSTRING
+specifies UTC time (trailing letter Z) the decoded time is given in
+the local time zone! FIXME: TZID-attributes are ignored....! FIXME:
+multiple comma-separated values should be allowed!"
+  (if isodurationstring
+      (save-match-data
+        (string-match
+         (concat
+          "^P[+-]?\\("
+          "\\(\\([0-9]+\\)D\\)"         ; days only
+          "\\|"
+          "\\(\\(\\([0-9]+\\)D\\)?T\\(\\([0-9]+\\)H\\)?" ; opt days
+          "\\(\\([0-9]+\\)M\\)?\\(\\([0-9]+\\)S\\)?\\)" ; mand. time
+          "\\|"
+          "\\(\\([0-9]+\\)W\\)"         ; weeks only
+          "\\)$") isodurationstring)
+        (let ((seconds 0)
+              (minutes 0)
+              (hours 0)
+              (days 0)
+              (months 0)
+              (years 0))
+        (cond
+         ((match-beginning 2)           ;days only
+          (setq days (read (substring isodurationstring
+                                      (match-beginning 3)
+                                      (match-end 3))))
+          (when icalendar-duration-correction
+            (setq days (1- days))))
+         ((match-beginning 4)           ;days and time
+          (if (match-beginning 5)
+              (setq days (* 7 (read (substring isodurationstring
+                                               (match-beginning 6)
+                                               (match-end 6))))))
+          (if (match-beginning 7)
+              (setq hours (read (substring isodurationstring
+                                           (match-beginning 8)
+                                           (match-end 8)))))
+          (if (match-beginning 9)
+              (setq minutes (read (substring isodurationstring
+                                             (match-beginning 10)
+                                             (match-end 10)))))
+          (if (match-beginning 11)
+              (setq seconds (read (substring isodurationstring
+                                             (match-beginning 12)
+                                             (match-end 12)))))
+          )
+         ((match-beginning 13)          ;weeks only
+          (setq days (* 7 (read (substring isodurationstring
+                                           (match-beginning 14)
+                                           (match-end 14))))))
+         )
+        (list seconds minutes hours days months years)))
+    ;; isodatetimestring == nil
+    nil))
+
+(defun icalendar-add-decoded-times (time1 time2)
+  "Add TIME1 to TIME2.
+Both times must be given in decoded form.  One of these times must be
+valid (year > 1900 or something)."
+  ;; FIXME: does this function exist already?
+  (decode-time (encode-time
+                (+ (nth 0 time1) (nth 0 time2))
+                (+ (nth 1 time1) (nth 1 time2))
+                (+ (nth 2 time1) (nth 2 time2))
+                (+ (nth 3 time1) (nth 3 time2))
+                (+ (nth 4 time1) (nth 4 time2))
+                (+ (nth 5 time1) (nth 5 time2))
+                nil
+                nil
+                ;;(or (nth 6 time1) (nth 6 time2)) ;; FIXME?
+                )))
+
+(defun icalendar-datetime-to-noneuropean-date (datetime)
+  "Convert the decoded DATETIME to non-european-style format.
+Non-European format: (month day year)."
+  (if datetime
+      (list (nth 4 datetime) ;month
+            (nth 3 datetime) ;day
+            (nth 5 datetime));year
+    ;; datetime == nil
+    nil))
+
+(defun icalendar-datetime-to-european-date (datetime)
+  "Convert the decoded DATETIME to European format.
+European format: (day month year).
+FIXME"
+  (if datetime
+      (format "%d %d %d" (nth 3 datetime); day
+              (nth 4 datetime) ;month
+              (nth 5 datetime));year
+    ;; datetime == nil
+    nil))
+
+(defun icalendar-datetime-to-colontime (datetime)
+  "Extract the time part of a decoded DATETIME into 24-hour format.
+Note that this silently ignores seconds."
+  (format "%02d:%02d" (nth 2 datetime) (nth 1 datetime)))
+
+(defun icalendar-get-month-number (monthname)
+  "Return the month number for the given MONTHNAME."
+  (save-match-data
+    (let ((case-fold-search t))
+      (assoc-default monthname icalendar-monthnumber-table
+                     'string-match))))
+
+(defun icalendar-get-weekday-abbrev (weekday)
+  "Return the abbreviated WEEKDAY."
+  ;;FIXME: ISO-like(?).
+  (save-match-data
+    (let ((case-fold-search t))
+      (assoc-default weekday icalendar-weekdayabbrev-table
+                     'string-match))))
+
+(defun icalendar-datestring-to-isodate (datestring &optional day-shift)
+  "Convert diary-style DATESTRING to iso-style date.
+If DAY-SHIFT is non-nil, the result is shifted by DAY-SHIFT days
+-- DAY-SHIFT must be either nil or an integer.  This function
+takes care of european-style."
+  (let ((day -1) month year)
+    (save-match-data
+      (cond (;; numeric date
+	     (string-match (concat "\\s-*"
+				   "0?\\([1-9][0-9]?\\)[ \t/]\\s-*"
+				   "0?\\([1-9][0-9]?\\),?[ \t/]\\s-*"
+				   "\\([0-9]\\{4\\}\\)")
+			   datestring)
+	     (setq day (read (substring datestring (match-beginning 1)
+					(match-end 1))))
+	     (setq month (read (substring datestring (match-beginning 2)
+					  (match-end 2))))
+	     (setq year (read (substring datestring (match-beginning 3)
+					 (match-end 3))))
+	     (unless european-calendar-style
+	       (let ((x month))
+		 (setq month day)
+		 (setq day x))))
+	    (;; date contains month names -- european-style
+	     (and european-calendar-style
+		  (string-match (concat "\\s-*"
+					"0?\\([123]?[0-9]\\)[ \t/]\\s-*"
+					"\\([A-Za-z][^ ]+\\)[ \t/]\\s-*"
+					"\\([0-9]\\{4\\}\\)")
+				datestring))
+		 (setq day (read (substring datestring (match-beginning 1)
+					    (match-end 1))))
+		 (setq month (icalendar-get-month-number
+			      (substring datestring (match-beginning 2)
+					 (match-end 2))))
+		 (setq year (read (substring datestring (match-beginning 3)
+					     (match-end 3)))))
+	    (;; date contains month names -- non-european-style
+	     (and (not european-calendar-style)
+		  (string-match (concat "\\s-*"
+					"\\([A-Za-z][^ ]+\\)[ \t/]\\s-*"
+					"0?\\([123]?[0-9]\\),?[ \t/]\\s-*"
+					"\\([0-9]\\{4\\}\\)")
+				datestring))
+	     (setq day (read (substring datestring (match-beginning 2)
+					(match-end 2))))
+	     (setq month (icalendar-get-month-number
+			  (substring datestring (match-beginning 1)
+				     (match-end 1))))
+	     (setq year (read (substring datestring (match-beginning 3)
+					 (match-end 3)))))
+	    (t
+	     nil)))
+    (if (> day 0)
+	(let ((mdy (calendar-gregorian-from-absolute
+		    (+ (calendar-absolute-from-gregorian (list month day year))
+		       (or day-shift 0)))))
+	  (format "%04d%02d%02d" (nth 2 mdy) (nth 0 mdy) (nth 1 mdy)))
+      nil)))
+
+(defun icalendar-dmsg (&rest args)
+  "Print message ARGS if `icalendar-debug' is non-nil."
+  (if icalendar-debug
+      (apply 'message args)))
+
+(defun icalendar-diarytime-to-isotime (timestring ampmstring)
+  "Convert a a time like 9:30pm to an iso-conform string like T213000.
+In this example the TIMESTRING would be \"9:30\" and the AMPMSTRING
+would be \"pm\"."
+  (if timestring
+      (let ((starttimenum (read (icalendar-rris ":" "" timestring))))
+        ;; take care of am/pm style
+        (if (and ampmstring (string= "pm" ampmstring))
+            (setq starttimenum (+ starttimenum 1200)))
+        (format "T%04d00" starttimenum))
+    nil))
+
+(defun icalendar-convert-string-for-export (s)
+  "Escape comma and other critical characters in string S."
+  (icalendar-rris "," "\\\\," s))
+
+(defun icalendar-convert-for-import (string)
+  "Remove escape chars for comma, semicolon etc. from STRING."
+  (icalendar-rris
+   "\\\\n" "\n " (icalendar-rris
+               "\\\\\"" "\"" (icalendar-rris
+                              "\\\\;" ";" (icalendar-rris
+                                           "\\\\," "," string)))))
+
+;; ======================================================================
+;; export -- convert emacs-diary to icalendar
+;; ======================================================================
+
+(defun icalendar-convert-diary-to-ical (diary-filename ical-filename
+                                        &optional do-not-clear-diary-file)
+  "Export diary file to iCalendar format -- erases ical-filename!!!.
+Argument DIARY-FILENAME is the input `diary-file'.
+Argument ICAL-FILENAME is the output iCalendar file.
+If DO-NOT-CLEAR-DIARY-FILE is not nil the target iCalendar file
+is not erased."
+  (interactive "FExport diary data from file:
+Finto iCalendar file: ")
+  (let ((result "")
+        (start 0)
+        (entry-main "")
+        (entry-rest "")
+        (header "")
+        (contents)
+        (oops nil)
+        (nonmarker (concat "^" (regexp-quote diary-nonmarking-symbol)
+			   "?")))
+    (save-current-buffer
+      (set-buffer (find-file diary-filename))
+      (goto-char (point-min))
+      (while (re-search-forward
+              "^\\([^ \t\n].*\\)\\(\n[ \t].*\\)*" nil t)
+        (setq entry-main (match-string 1))
+        (if (match-beginning 2)
+            (setq entry-rest (match-string 2))
+          (setq entry-rest ""))
+        (setq header (format "\nBEGIN:VEVENT\nUID:emacs%d%d%d"
+                             (car (current-time))
+                             (cadr (current-time))
+                             (car (cddr (current-time)))))
+        (setq oops nil)
+        (cond
+         ;; anniversaries
+         ((string-match
+           (concat nonmarker
+                   "%%(diary-anniversary \\([^)]+\\))\\s-*\\(.*\\)")
+           entry-main)
+          (icalendar-dmsg "diary-anniversary %s" entry-main)
+          (let* ((datetime (substring entry-main (match-beginning 1)
+                                      (match-end 1)))
+                 (summary (icalendar-convert-string-for-export
+                           (substring entry-main (match-beginning 2)
+                                      (match-end 2))))
+                 (startisostring (icalendar-datestring-to-isodate
+				  datetime))
+                 (endisostring (icalendar-datestring-to-isodate
+				datetime 1)))
+            (setq contents
+                  (concat "\nDTSTART;VALUE=DATE:" startisostring
+                          "\nDTEND;VALUE=DATE:" endisostring
+                          "\nSUMMARY:" summary
+                          "\nRRULE:FREQ=YEARLY;INTERVAL=1"
+                          ;; the following is redundant,
+                          ;; but korganizer seems to expect this... ;(
+                          ;; and evolution doesn't understand it... :(
+                          ;; so... who is wrong?!
+                          ";BYMONTH=" (substring startisostring 4 6)
+                          ";BYMONTHDAY=" (substring startisostring 6 8)
+                          )))
+          (unless (string= entry-rest "")
+            (setq contents (concat contents "\nDESCRIPTION:"
+                                   (icalendar-convert-string-for-export
+                                    entry-rest)))))
+         ;; cyclic events
+         ;; %%(diary-cyclic )
+         ((string-match
+           (concat nonmarker
+                   "%%(diary-cyclic \\([^ ]+\\) +"
+                   "\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\))\\s-*\\(.*\\)")
+           entry-main)
+          (icalendar-dmsg "diary-cyclic %s" entry-main)
+          (let* ((frequency (substring entry-main (match-beginning 1)
+                                       (match-end 1)))
+                 (datetime (substring entry-main (match-beginning 2)
+                                      (match-end 2)))
+                 (summary (icalendar-convert-string-for-export
+                           (substring entry-main (match-beginning 3)
+                                      (match-end 3))))
+                 (startisostring (icalendar-datestring-to-isodate
+				  datetime))
+                 (endisostring (icalendar-datestring-to-isodate
+				datetime 1)))
+            (setq contents
+                  (concat "\nDTSTART;VALUE=DATE:" startisostring
+                          "\nDTEND;VALUE=DATE:" endisostring
+                          "\nSUMMARY:" summary
+                          "\nRRULE:FREQ=DAILY;INTERVAL=" frequency
+                          ;; strange: korganizer does not expect
+                          ;; BYSOMETHING here...
+                          )))
+          (unless (string= entry-rest "")
+            (setq contents (concat contents "\nDESCRIPTION:"
+                                   (icalendar-convert-string-for-export
+                                    entry-rest)))))
+         ;; diary-date -- FIXME
+         ((string-match
+           (concat nonmarker
+                   "%%(diary-date \\([^)]+\\))\\s-*\\(.*\\)")
+           entry-main)
+          (icalendar-dmsg "diary-date %s" entry-main)
+          (setq oops t))
+         ;; float events -- FIXME
+         ((string-match
+           (concat nonmarker
+                   "%%(diary-float \\([^)]+\\))\\s-*\\(.*\\)")
+           entry-main)
+          (icalendar-dmsg "diary-float %s" entry-main)
+          (setq oops t))
+         ;; block events
+         ((string-match
+           (concat nonmarker
+                   "%%(diary-block \\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\) +"
+                   "\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\))\\s-*\\(.*\\)")
+           entry-main)
+          (icalendar-dmsg "diary-block %s" entry-main)
+          (let* ((startstring (substring entry-main (match-beginning 1)
+                                         (match-end 1)))
+                 (endstring (substring entry-main (match-beginning 2)
+                                       (match-end 2)))
+                 (summary (icalendar-convert-string-for-export
+                           (substring entry-main (match-beginning 3)
+                                      (match-end 3))))
+                 (startisostring (icalendar-datestring-to-isodate
+				  startstring))
+                 (endisostring (icalendar-datestring-to-isodate
+				endstring 1)))
+            (setq contents
+                  (concat "\nDTSTART;VALUE=DATE:" startisostring
+                          "\nDTEND;VALUE=DATE:" endisostring
+                          "\nSUMMARY:" summary
+                          ))
+            (unless (string= entry-rest "")
+              (setq contents (concat contents "\nDESCRIPTION:"
+                                     (icalendar-convert-string-for-export
+                                      entry-rest))))))
+         ;; other sexp diary entries -- FIXME
+         ((string-match
+           (concat nonmarker
+                   "%%(\\([^)]+\\))\\s-*\\(.*\\)")
+           entry-main)
+          (icalendar-dmsg "diary-sexp %s" entry-main)
+          (setq oops t))
+         ;; weekly by day
+         ;; Monday 8:30 Team meeting
+         ((and (string-match
+                (concat nonmarker
+                        "\\([a-z]+\\)\\s-+"
+                        "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
+                        "\\(-0?"
+                        "\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
+                        "\\)?"
+                        "\\s-*\\(.*\\)$")
+                entry-main)
+               (icalendar-get-weekday-abbrev
+		(substring entry-main (match-beginning 1) (match-end 1))))
+          (icalendar-dmsg "weekly %s" entry-main)
+          (let* ((day (icalendar-get-weekday-abbrev
+                       (substring entry-main (match-beginning 1)
+                                  (match-end 1))))
+                 (starttimestring (icalendar-diarytime-to-isotime
+                                   (if (match-beginning 3)
+                                       (substring entry-main
+                                                  (match-beginning 3)
+                                                  (match-end 3))
+                                     nil)
+                                   (if (match-beginning 4)
+                                       (substring entry-main
+                                                  (match-beginning 4)
+                                                  (match-end 4))
+                                     nil)))
+                 (endtimestring (icalendar-diarytime-to-isotime
+                                 (if (match-beginning 6)
+                                     (substring entry-main
+						(match-beginning 6)
+                                                (match-end 6))
+                                   nil)
+                                 (if (match-beginning 7)
+                                     (substring entry-main
+						(match-beginning 7)
+                                                (match-end 7))
+                                   nil)))
+                 (summary (icalendar-convert-string-for-export
+                           (substring entry-main (match-beginning 8)
+                                      (match-end 8)))))
+            (when starttimestring
+              (unless endtimestring
+                (let ((time (read (icalendar-rris "^T0?" ""
+						  starttimestring))))
+                  (setq endtimestring (format "T%06d" (+ 10000 time))))))
+            (setq contents
+                  (concat "\nDTSTART"
+                          (if starttimestring "" ";VALUE=DATE")
+                          ":19000101" ;; FIXME? Probability that this
+                          ;; is the right day is 1/7
+                          (or starttimestring "")
+                          "\nDTEND"
+                          (if endtimestring "" ";VALUE=DATE")
+                          ":19000101" ;; FIXME?
+                          (or endtimestring "")
+                          "\nSUMMARY:" summary
+                          "\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=" day
+                          )))
+          (unless (string= entry-rest "")
+            (setq contents (concat contents "\nDESCRIPTION:"
+                                   (icalendar-convert-string-for-export
+                                    entry-rest)))))
+         ;; yearly by day
+         ;; 1 May Tag der Arbeit
+         ((string-match
+           (concat nonmarker
+                   (if european-calendar-style
+                       "0?\\([1-9]+[0-9]?\\)\\s-+\\([a-z]+\\)\\s-+"
+                     "\\([a-z]+\\)\\s-+0?\\([1-9]+[0-9]?\\)\\s-+")
+                   "\\*?\\s-*"
+                   "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
+                   "\\("
+		   "-0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
+		   "\\)?"
+                   "\\s-*\\([^0-9]+.*\\)$"; must not match years
+                   )
+           entry-main)
+          (icalendar-dmsg "yearly %s" entry-main)
+          (let* ((daypos (if european-calendar-style 1 2))
+                 (monpos (if european-calendar-style 2 1))
+                 (day (read (substring entry-main (match-beginning daypos)
+                                       (match-end daypos))))
+                 (month (icalendar-get-month-number
+                         (substring entry-main (match-beginning monpos)
+                                    (match-end monpos))))
+                 (starttimestring (icalendar-diarytime-to-isotime
+                                   (if (match-beginning 4)
+                                       (substring entry-main
+                                                  (match-beginning 4)
+                                                  (match-end 4))
+                                     nil)
+                                   (if (match-beginning 5)
+                                       (substring entry-main
+                                                  (match-beginning 5)
+                                                  (match-end 5))
+                                     nil)))
+                 (endtimestring (icalendar-diarytime-to-isotime
+                                 (if (match-beginning 7)
+                                     (substring entry-main
+						(match-beginning 7)
+                                                (match-end 7))
+                                   nil)
+                                 (if (match-beginning 8)
+                                     (substring entry-main
+						(match-beginning 8)
+                                                (match-end 8))
+                                   nil)))
+                 (summary (icalendar-convert-string-for-export
+                           (substring entry-main (match-beginning 9)
+                                      (match-end 9)))))
+            (when starttimestring
+              (unless endtimestring
+                (let ((time (read (icalendar-rris "^T0?" ""
+						  starttimestring))))
+                  (setq endtimestring (format "T%06d" (+ 10000 time))))))
+            (setq contents
+                  (concat "\nDTSTART"
+                          (if starttimestring "" ";VALUE=DATE")
+                          (format ":1900%02d%02d" month day)
+                          (or starttimestring "")
+                          "\nDTEND"
+                          (if endtimestring "" ";VALUE=DATE")
+                          (format ":1900%02d%02d" month day)
+                          (or endtimestring "")
+                          "\nSUMMARY:" summary
+                          "\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH="
+                          (format "%2d" month)
+                          ";BYMONTHDAY="
+                          (format "%2d" day)
+                          )))
+          (unless (string= entry-rest "")
+            (setq contents (concat contents "\nDESCRIPTION:"
+                                   (icalendar-convert-string-for-export
+                                    entry-rest)))))
+         ;; "ordinary" events, start and end time given
+         ;; 1 Feb 2003 Hs Hochzeitsfeier, Dreieich
+         ((string-match
+           (concat nonmarker
+                   "\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\)\\s-+"
+                   "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
+                   "\\("
+		   "-0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
+		   "\\)?"
+                   "\\s-*\\(.*\\)")
+           entry-main)
+          (icalendar-dmsg "ordinary %s" entry-main)
+          (let* ((datestring (icalendar-datestring-to-isodate
+                              (substring entry-main (match-beginning 1)
+                                         (match-end 1))))
+                 (starttimestring (icalendar-diarytime-to-isotime
+                                   (if (match-beginning 3)
+                                       (substring entry-main
+                                                  (match-beginning 3)
+                                                  (match-end 3))
+                                     nil)
+                                   (if (match-beginning 4)
+                                       (substring entry-main
+                                                  (match-beginning 4)
+                                                  (match-end 4))
+                                     nil)))
+                 (endtimestring (icalendar-diarytime-to-isotime
+                                 (if (match-beginning 6)
+                                     (substring entry-main
+						(match-beginning 6)
+                                                (match-end 6))
+                                   nil)
+                                 (if (match-beginning 7)
+                                     (substring entry-main
+						(match-beginning 7)
+                                                (match-end 7))
+                                   nil)))
+                 (summary (icalendar-convert-string-for-export
+                           (substring entry-main (match-beginning 8)
+                                      (match-end 8)))))
+            (when starttimestring
+              (unless endtimestring
+                (let ((time (read (icalendar-rris "^T0?" ""
+						  starttimestring))))
+                  (setq endtimestring (format "T%06d" (+ 10000 time))))))
+            (setq contents (format
+			    "\nDTSTART%s:%s%s\nDTEND%s:%s%s\nSUMMARY:%s"
+			    (if starttimestring "" ";VALUE=DATE")
+			    datestring
+			    (or starttimestring "")
+			    (if endtimestring ""
+			      ";VALUE=DATE")
+			    datestring
+			    (or endtimestring "")
+			    summary))
+            (unless (string= entry-rest "")
+              (setq contents (concat contents "\nDESCRIPTION:"
+                                     (icalendar-convert-string-for-export
+                                      entry-rest))))))
+         ;; everything else
+         (t
+          ;; Oops! what's that?
+          (setq oops t)))
+        (if oops
+            (message "Cannot export entry on line %d"
+		     (count-lines (point-min) (point)))
+          (setq result (concat result header contents "\nEND:VEVENT"))))
+      ;; we're done, insert everything into the file
+      (let ((coding-system-for-write 'utf8))
+        (set-buffer (find-file ical-filename))
+        (unless do-not-clear-diary-file
+          (erase-buffer))
+        (insert
+	 "BEGIN:VCALENDAR\nPRODID:-//Emacs//NONSGML icalendar.el//EN")
+        (insert "\nVERSION:2.0")
+        (insert result)
+        (insert "\nEND:VCALENDAR\n")))))
+
+
+;; ======================================================================
+;; import -- convert icalendar to emacs-diary
+;; ======================================================================
+
+;; user function
+(defun icalendar-import-file (ical-filename diary-filename
+                                            &optional non-marking
+                                            do-not-clear-diary-file)
+  "Import a iCalendar file and save to a diary file -- erases diary-file!
+Argument ICAL-FILENAME output iCalendar file.
+Argument DIARY-FILENAME input `diary-file'.
+Optional argument NON-MARKING determines whether events are created as
+non-marking or not.
+If DO-NOT-CLEAR-DIARY-FILE is not nil the target diary file is
+not erased."
+  (interactive "fImport iCalendar data from file:
+Finto diary file (will be erased!):
+p")
+  ;; clean up the diary file
+  (save-current-buffer
+    (unless do-not-clear-diary-file
+      ;; clear the target diary file
+      (set-buffer (find-file diary-filename))
+      (erase-buffer))
+    ;; now load and convert from the ical file
+    (set-buffer (find-file ical-filename))
+    (icalendar-extract-ical-from-buffer diary-filename t non-marking)))
+
+; user function
+(defun icalendar-extract-ical-from-buffer (&optional
+					   diary-file do-not-ask
+					   non-marking)
+  "Extract iCalendar events from current buffer.
+
+This function searches the current buffer for the first iCalendar
+object, reads it and adds all VEVENT elements to the diary
+DIARY-FILE.
+
+It will ask for each appointment whether to add it to the diary
+when DO-NOT-ASK is non-nil.  When called interactively,
+DO-NOT-ASK is set to t, so that you are asked fore each event.
+
+NON-MARKING determines whether diary events are created as
+non-marking.
+
+This function attempts to notify about problems that occur when
+reading, parsing, or converting iCalendar data!"
+  (interactive)
+  (save-current-buffer
+    ;; prepare ical
+    (message "Preparing icalendar...")
+    (set-buffer (icalendar-get-unfolded-buffer (current-buffer)))
+    (goto-char (point-min))
+    (message "Preparing icalendar...done")
+    (if (re-search-forward "^BEGIN:VCALENDAR\\s-*$" nil t)
+        (let (ical-contents ical-errors)
+          ;; read ical
+          (message "Reading icalendar...")
+          (beginning-of-line)
+          (setq ical-contents (icalendar-read-element nil nil))
+          (message "Reading icalendar...done")
+          ;; convert ical
+          (message "Converting icalendar...")
+          (setq ical-errors (icalendar-convert-ical-to-diary
+                             ical-contents
+                             diary-file do-not-ask non-marking))
+          (when diary-file
+            ;; save the diary file
+            (save-current-buffer
+              (set-buffer (find-buffer-visiting diary-file))
+              (save-buffer)))
+          (message "Converting icalendar...done")
+          (if (and ical-errors (y-or-n-p
+				(concat "Something went wrong -- "
+					"do you want to see the "
+					"error log? ")))
+              (switch-to-buffer " *icalendar-errors*")))
+      (message
+       "Current buffer does not contain icalendar contents!"))))
+
+;; ----------------------------------------------------------------------
+;; private area
+;; ----------------------------------------------------------------------
+(defun icalendar-format-ical-event (event)
+  "Create a string representation of an iCalendar EVENT."
+  (let ((string icalendar-import-format)
+        (conversion-list
+         '(("%d" DESCRIPTION icalendar-import-format-description)
+           ("%s" SUMMARY     icalendar-import-format-subject)
+           ("%l" LOCATION    icalendar-import-format-location)
+           ("%o" ORGANIZER   icalendar-import-format-organizer))))
+    ;; convert the specifiers in the format string
+    (mapcar (lambda (i)
+              (let* ((spec (car i))
+                     (prop (cadr i))
+                     (format (car (cddr i)))
+                     (contents (icalendar-get-event-property event prop))
+                     (formatted-contents ""))
+                ;;(message "%s" event)
+                ;;(message "contents%s = %s" prop contents)
+                (when (and contents (> (length contents) 0))
+                  (setq formatted-contents
+                        (icalendar-rris "%s"
+                                        (icalendar-convert-for-import
+                                         contents)
+                                        (symbol-value format))))
+                (setq string (icalendar-rris spec
+                                             formatted-contents
+                                             string))))
+            conversion-list)
+    string))
+
+(defun icalendar-convert-ical-to-diary (ical-list diary-file
+                                                  &optional do-not-ask
+                                                  non-marking)
+  "Convert an iCalendar file to an Emacs diary file.
+Import VEVENTS from the iCalendar object ICAL-LIST and saves them to a
+DIARY-FILE.  If DO-NOT-ASK is nil the user is asked for each event
+whether to actually import it.  NON-MARKING determines whether diary
+events are created as non-marking.
+This function attempts to return t if something goes wrong.  In this
+case an error string which describes all the errors and problems is
+written into the buffer ` *icalendar-errors*'."
+  (let* ((ev (icalendar-all-events ical-list))
+         (error-string "")
+         (event-ok t)
+         (found-error nil)
+         e diary-string)
+    ;; step through all events/appointments
+    (while ev
+      (setq e (car ev))
+      (setq ev (cdr ev))
+      (setq event-ok nil)
+      (condition-case error-val
+          (let* ((dtstart (icalendar-decode-isodatetime
+                           (icalendar-get-event-property e 'DTSTART)))
+                 (start-d (calendar-date-string
+                           (icalendar-datetime-to-noneuropean-date
+			    dtstart)
+                           t t))
+                 (start-t (icalendar-datetime-to-colontime dtstart))
+                 (dtend (icalendar-decode-isodatetime
+                         (icalendar-get-event-property e 'DTEND)))
+                 end-d
+                 end-t
+                 (subject (icalendar-convert-for-import
+                           (or (icalendar-get-event-property e 'SUMMARY)
+                               "No Subject")))
+                 (rrule (icalendar-get-event-property e 'RRULE))
+                 (rdate (icalendar-get-event-property e 'RDATE))
+                 (duration (icalendar-get-event-property e 'DURATION)))
+            (icalendar-dmsg "%s: %s" start-d subject)
+            (when duration
+              (let ((dtend2 (icalendar-add-decoded-times
+                             dtstart
+                             (icalendar-decode-isoduration duration))))
+                (if (and dtend (not (eq dtend dtend2)))
+                    (message "Inconsistent endtime and duration for %s"
+                             subject))
+                (setq dtend dtend2)))
+            (setq end-d (if dtend
+                            (calendar-date-string
+                             (icalendar-datetime-to-noneuropean-date
+			      dtend)
+                             t t)
+                          start-d))
+            (setq end-t (if dtend
+                            (icalendar-datetime-to-colontime dtend)
+                          start-t))
+            (icalendar-dmsg "start-d: %s, end-d: %s" start-d end-d)
+            (cond
+             ;; recurring event
+             (rrule
+              (icalendar-dmsg "recurring event")
+              (let* ((rrule-props (icalendar-split-value rrule))
+                     (frequency (car (cdr (assoc 'FREQ rrule-props))))
+                     (until (car (cdr (assoc 'UNTIL rrule-props))))
+                     (interval  (read (car (cdr (assoc 'INTERVAL
+						       rrule-props))))))
+                (cond ((string-equal frequency "WEEKLY")
+                       (if (not start-t)
+                           (progn
+                             ;; weekly and all-day
+                             (icalendar-dmsg "weekly all-day")
+                             (setq diary-string
+                                   (format
+				    "%%%%(diary-cyclic %d %s)"
+				    (* interval 7)
+				    (icalendar-datetime-to-european-date
+				     dtstart))))
+                         ;; weekly and not all-day
+                         (let* ((byday (cadr (assoc 'BYDAY rrule-props)))
+                                (weekday
+				 (cdr (rassoc
+				       byday
+				       icalendar-weekdayabbrev-table))))
+                           (icalendar-dmsg "weekly not-all-day")
+                           (if weekday
+                               (setq diary-string
+                                     (format "%s %s%s%s" weekday
+                                             start-t (if end-t "-" "")
+                                             (or end-t "")))
+                             ;; FIXME!!!!
+                             ;; DTSTART;VALUE=DATE-TIME:20030919T090000
+                             ;; DTEND;VALUE=DATE-TIME:20030919T113000
+                             (setq diary-string
+                                   (format
+				    "%%%%(diary-cyclic %s %s) %s%s%s"
+				    (* interval 7)
+				    (icalendar-datetime-to-european-date
+				     dtstart)
+				    start-t (if end-t "-" "") (or end-t ""))))
+                           (setq event-ok t))))
+                      ;; yearly
+                      ((string-equal frequency "YEARLY")
+                       (icalendar-dmsg "yearly")
+                       (setq diary-string
+                             (format
+			      "%%%%(diary-anniversary %s)"
+			      (icalendar-datetime-to-european-date dtstart)))
+                       (setq event-ok t))
+                      ;; FIXME: war auskommentiert:
+                      ((and (string-equal frequency "DAILY")
+                            ;;(not (string= start-d end-d))
+                            ;;(not start-t)
+                            ;;(not end-t)
+                            )
+                       (let ((ds (icalendar-datetime-to-noneuropean-date
+                                  (icalendar-decode-isodatetime
+                                   (icalendar-get-event-property e
+								 'DTSTART))))
+                             (de (icalendar-datetime-to-noneuropean-date
+                                  (icalendar-decode-isodatetime
+                                   until))))
+                         (setq diary-string
+                               (format
+				"%%%%(diary-block %d %d %d  %d %d %d)"
+				(nth 1 ds) (nth 0 ds) (nth 2 ds)
+				(nth 1 de) (nth 0 de) (nth 2 de))))
+                       (setq event-ok t)))
+                ))
+             (rdate
+              (icalendar-dmsg "rdate event")
+              (setq diary-string "")
+              (mapcar (lambda (datestring)
+                        (setq diary-string
+                              (concat diary-string
+                                      (format "......"))))
+                      (icalendar-split-value rdate)))
+             ;; non-recurring event
+             ;; long event
+             ((not (string= start-d end-d))
+              (icalendar-dmsg "non-recurring event")
+              (let ((ds (icalendar-datetime-to-noneuropean-date dtstart))
+                    (de (icalendar-datetime-to-noneuropean-date dtend)))
+                (setq diary-string
+                      (format "%%%%(diary-block %d %d %d   %d %d %d)"
+                              (nth 1 ds) (nth 0 ds) (nth 2 ds)
+                              (nth 1 de) (nth 0 de) (nth 2 de))))
+              (setq event-ok t))
+             ;; not all-day
+             ((and start-t (or (not end-t)
+                               (not (string= start-t end-t))))
+              (icalendar-dmsg "not all day event")
+              (cond (end-t
+                     (setq diary-string (format "%s %s-%s" start-d
+						start-t end-t)))
+                    (t
+                     (setq diary-string (format "%s %s" start-d
+						start-t))))
+              (setq event-ok t))
+             ;; all-day event
+             (t
+              (icalendar-dmsg "all day event")
+              (setq diary-string start-d)
+              (setq event-ok t)))
+            ;; add all other elements unless the user doesn't want to have
+            ;; them
+            (if event-ok
+                (progn
+                  (setq diary-string
+			(concat diary-string " "
+				(icalendar-format-ical-event e)))
+                  (if do-not-ask (setq subject nil))
+                  (icalendar-add-diary-entry diary-string diary-file
+                                             non-marking subject))
+              ;; event was not ok
+              (setq found-error t)
+              (setq error-string
+		    (format "%s\nCannot handle this event:%s"
+			    error-string e))))
+        ;; handle errors
+        (error
+         (message "Ignoring event \"%s\"" e)
+         (setq found-error t)
+         (setq error-string (format "%s\nCannot handle this event: %s"
+                                    error-string e)))))
+    (if found-error
+        (save-current-buffer
+          (set-buffer (get-buffer-create " *icalendar-errors*"))
+          (erase-buffer)
+          (insert error-string)))
+    (message "Converting icalendar...done")
+    found-error))
+
+(defun icalendar-add-diary-entry (string diary-file non-marking
+                                         &optional subject)
+  "Add STRING to the diary file DIARY-FILE.
+STRING must be a properly formatted valid diary entry.  NON-MARKING
+determines whether diary events are created as non-marking.  If
+SUBJECT is not nil it must be a string that gives the subject of the
+entry.  In this case the user will be asked whether he wants to insert
+the entry."
+  (when (or (not subject)                       ;
+            (y-or-n-p (format "Add appointment for `%s' to diary? "
+			      subject)))
+    (when subject
+      (setq non-marking
+            (y-or-n-p (format "Make appointment non-marking? "))))
+    (save-window-excursion
+      (unless diary-file
+        (setq diary-file
+              (read-file-name "Add appointment to this diary file: ")))
+      (make-diary-entry string non-marking diary-file))))
+
+;; ======================================================================
+;; (add-hook 'list-diary-entries-hook 'include-icalendar-files)
+;; ======================================================================
+(defun include-icalendar-files ()
+  "Not yet implemented.")
+
+(provide 'icalendar)
+
+;; arch-tag: 74fdbe8e-0451-4e38-bb61-4416e822f4fc
+;;; icalendar.el ends here
--- a/lisp/gnus/ChangeLog	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/gnus/ChangeLog	Thu Oct 07 16:52:19 2004 +0000
@@ -1,3 +1,21 @@
+2004-10-06  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* gnus-group.el (gnus-update-group-mark-positions):
+	* gnus-sum.el (gnus-update-summary-mark-positions):
+	* message.el (message-check-news-body-syntax):
+	* gnus-msg.el (gnus-debug): Use mm-string-as-multibyte instead
+	of string-as-multibyte.
+
+	* gnus-sum.el (gnus-summary-insert-subject): Remove redundant setq.
+
+2004-10-05  Juri Linkov  <juri@jurta.org>
+
+	* gnus-group.el (gnus-update-group-mark-positions):
+	* gnus-sum.el (gnus-update-summary-mark-positions):
+	* message.el (message-check-news-body-syntax):
+	* gnus-msg.el (gnus-debug): Use `string-as-multibyte' to convert
+	8-bit unibyte values to a multibyte string for search functions.
+
 2004-10-01  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* gnus-sum.el (gnus-summary-toggle-header): Make it work even if
--- a/lisp/gnus/gnus-group.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/gnus/gnus-group.el	Thu Oct 07 16:52:19 2004 +0000
@@ -1046,7 +1046,8 @@
       (gnus-group-insert-group-line "dummy.group" 0 nil 0 nil)
       (goto-char (point-min))
       (setq gnus-group-mark-positions
-	    (list (cons 'process (and (search-forward "\200" nil t)
+	    (list (cons 'process (and (search-forward
+				       (mm-string-as-multibyte "\200") nil t)
 				      (- (point) 2))))))))
 
 (defun gnus-mouse-pick-group (e)
--- a/lisp/gnus/gnus-msg.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/gnus/gnus-msg.el	Thu Oct 07 16:52:19 2004 +0000
@@ -1534,7 +1534,8 @@
     ;; Remove any control chars - they seem to cause trouble for some
     ;; mailers.  (Byte-compiled output from the stuff above.)
     (goto-char point)
-    (while (re-search-forward "[\000-\010\013-\037\200-\237]" nil t)
+    (while (re-search-forward (mm-string-as-multibyte
+			       "[\000-\010\013-\037\200-\237]") nil t)
       (replace-match (format "\\%03o" (string-to-char (match-string 0)))
 		     t t))))
 
--- a/lisp/gnus/gnus-sum.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/gnus/gnus-sum.el	Thu Oct 07 16:52:19 2004 +0000
@@ -3231,20 +3231,24 @@
 	   [0 "" "" "05 Apr 2001 23:33:09 +0400" "" "" 0 0 "" nil]
 	   0 nil t 128 t nil "" nil 1)
 	  (goto-char (point-min))
-	  (setq pos (list (cons 'unread (and (search-forward "\200" nil t)
-					     (- (point) (point-min) 1)))))
+	  (setq pos (list (cons 'unread
+				(and (search-forward
+				      (mm-string-as-multibyte "\200") nil t)
+				     (- (point) (point-min) 1)))))
 	  (goto-char (point-min))
-	  (push (cons 'replied (and (search-forward "\201" nil t)
+	  (push (cons 'replied (and (search-forward
+				     (mm-string-as-multibyte "\201") nil t)
 				    (- (point) (point-min) 1)))
 		pos)
 	  (goto-char (point-min))
-	  (push (cons 'score (and (search-forward "\202" nil t)
+	  (push (cons 'score (and (search-forward
+				   (mm-string-as-multibyte "\202") nil t)
 				  (- (point) (point-min) 1)))
 		pos)
 	  (goto-char (point-min))
-	  (push (cons 'download
-		      (and (search-forward "\203" nil t)
-			   (- (point) (point-min) 1)))
+	  (push (cons 'download (and (search-forward
+				      (mm-string-as-multibyte "\203") nil t)
+				     (- (point) (point-min) 1)))
 		pos)))
       (setq gnus-summary-mark-positions pos))))
 
@@ -6009,8 +6013,7 @@
       ;; Remove list identifiers from subject.
       (when gnus-list-identifiers
 	(let ((gnus-newsgroup-headers (list header)))
-	  (gnus-summary-remove-list-identifiers)
-	  (setq header (car gnus-newsgroup-headers))))
+	  (gnus-summary-remove-list-identifiers)))
       (when old-header
 	(mail-header-set-number header (mail-header-number old-header)))
       (setq gnus-newsgroup-sparse
--- a/lisp/gnus/message.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/gnus/message.el	Thu Oct 07 16:52:19 2004 +0000
@@ -4399,7 +4399,9 @@
 	     nil))))
    ;; Check for control characters.
    (message-check 'control-chars
-     (if (re-search-forward "[\000-\007\013\015-\032\034-\037\200-\237]" nil t)
+     (if (re-search-forward
+	  (mm-string-as-multibyte "[\000-\007\013\015-\032\034-\037\200-\237]")
+	  nil t)
 	 (y-or-n-p
 	  "The article contains control characters.  Really post? ")
        t))
--- a/lisp/info.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/info.el	Thu Oct 07 16:52:19 2004 +0000
@@ -1729,7 +1729,7 @@
       (let ((inhibit-read-only t))
         (erase-buffer)
         (goto-char (point-min))
-        (insert "\n\^_\nFile: history Node: Top, Up: (dir)\n\n")
+        (insert "\n\^_\nFile: history,  Node: Top,  Up: (dir)\n\n")
         (insert "Recently Visited Nodes\n**********************\n\n")
         (insert "* Menu:\n\n")
         (let ((hl (delete '("history" "Top") Info-history-list)))
@@ -1749,26 +1749,31 @@
   "Go to a node with table of contents of the current Info file.
 Table of contents is created from the tree structure of menus."
   (interactive)
-  (let ((curr-file Info-current-file)
-        (curr-node Info-current-node)
+  (let ((curr-file (substring-no-properties Info-current-file))
+        (curr-node (substring-no-properties Info-current-node))
         p)
     (with-current-buffer (get-buffer-create " *info-toc*")
       (let ((inhibit-read-only t)
             (node-list (Info-build-toc curr-file)))
         (erase-buffer)
         (goto-char (point-min))
-        (insert "\n\^_\nFile: toc Node: Top, Up: (dir)\n\n")
+        (insert "\n\^_\nFile: toc,  Node: Top,  Up: (dir)\n\n")
         (insert "Table of Contents\n*****************\n\n")
-        (insert "*Note Top::\n")
+        (insert "*Note Top: (" curr-file ")Top.\n")
         (Info-insert-toc
          (nth 2 (assoc "Top" node-list)) ; get Top nodes
-         node-list 0 (substring-no-properties curr-file)))
+         node-list 0 curr-file))
       (if (not (bobp))
           (let ((Info-hide-note-references 'hide)
                 (Info-fontify-visited-nodes nil))
             (Info-mode)
             (setq Info-current-file "toc" Info-current-node "Top")
-            (Info-fontify-node)))
+            (goto-char (point-min))
+            (narrow-to-region (or (re-search-forward "\n[\^_\f]\n" nil t)
+                                  (point-min))
+                              (point-max))
+            (Info-fontify-node)
+            (widen)))
       (goto-char (point-min))
       (if (setq p (search-forward (concat "*Note " curr-node ":") nil t))
           (setq p (- p (length curr-node) 2))))
@@ -1789,14 +1794,12 @@
 
 (defun Info-build-toc (file)
   "Build table of contents from menus of Info FILE and its subfiles."
-  (if (equal file "dir")
-      (error "Table of contents for Info directory is not supported yet"))
   (with-temp-buffer
-    (let* ((default-directory (or (and (stringp file)
-                                       (file-name-directory
-                                        (setq file (Info-find-file file))))
+    (let* ((file (and (stringp file) (Info-find-file file)))
+           (default-directory (or (and (stringp file)
+                                       (file-name-directory file))
                                   default-directory))
-           (main-file file)
+           (main-file (and (stringp file) file))
            (sections '(("Top" "Top")))
            nodes subfiles)
       (while (or main-file subfiles)
--- a/lisp/isearch.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/isearch.el	Thu Oct 07 16:52:19 2004 +0000
@@ -680,16 +680,7 @@
     (if isearch-small-window
 	(goto-char found-point)
       ;; Exiting the save-window-excursion clobbers window-start; restore it.
-      (set-window-start (selected-window) found-start t))
-
-    ;; If there was movement, mark the starting position.
-    ;; Maybe should test difference between and set mark iff > threshold.
-    (if (/= (point) isearch-opoint)
-	(or (and transient-mark-mode mark-active)
-	    (progn
-	      (push-mark isearch-opoint t)
-	      (or executing-kbd-macro (> (minibuffer-depth) 0)
-		  (message "Mark saved where search started"))))))
+      (set-window-start (selected-window) found-start t)))
 
   (setq isearch-mode nil)
   (if isearch-input-method-local-p
@@ -714,6 +705,16 @@
       (isearch-update-ring isearch-string isearch-regexp))
 
   (run-hooks 'isearch-mode-end-hook)
+
+  ;; If there was movement, mark the starting position.
+  ;; Maybe should test difference between and set mark iff > threshold.
+  (if (/= (point) isearch-opoint)
+      (or (and transient-mark-mode mark-active)
+	  (progn
+	    (push-mark isearch-opoint t)
+	    (or executing-kbd-macro (> (minibuffer-depth) 0)
+		(message "Mark saved where search started")))))
+
   (and (not edit) isearch-recursive-edit (exit-recursive-edit)))
 
 (defun isearch-update-ring (string &optional regexp)
--- a/lisp/newcomment.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/newcomment.el	Thu Oct 07 16:52:19 2004 +0000
@@ -423,7 +423,7 @@
 (defun comment-beginning ()
   "Find the beginning of the enclosing comment.
 Returns nil if not inside a comment, else moves point and returns
-the same as `comment-search-forward'."
+the same as `comment-search-backward'."
   ;; HACK ATTACK!
   ;; We should really test `in-string-p' but that can be expensive.
   (unless (eq (get-text-property (point) 'face) 'font-lock-string-face)
@@ -435,7 +435,7 @@
 	      (and
 	       ;; For modes where comment-start and comment-end are the same,
 	       ;; the search above may have found a `ce' rather than a `cs'.
-	       (or (not (looking-at comment-end-skip))
+	       (or (if comment-end-skip (not (looking-at comment-end-skip)))
 		   ;; Maybe font-lock knows that it's a `cs'?
 		   (eq (get-text-property (match-end 0) 'face)
 		       'font-lock-comment-face)
--- a/lisp/progmodes/gdb-ui.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/progmodes/gdb-ui.el	Thu Oct 07 16:52:19 2004 +0000
@@ -188,6 +188,7 @@
   (setq gdb-var-changed nil)
   (setq gdb-first-prompt nil)
   (setq gdb-prompting nil)
+  (setq gdb-input-queue nil)
   (setq gdb-current-item nil)
   (setq gdb-pending-triggers nil)
   (setq gdb-output-sink 'user)
--- a/lisp/textmodes/enriched.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/textmodes/enriched.el	Thu Oct 07 16:52:19 2004 +0000
@@ -258,8 +258,8 @@
 (define-key enriched-mode-map "\M-j" 'facemenu-justification-menu)
 (define-key enriched-mode-map "\M-S" 'set-justification-center)
 (define-key enriched-mode-map "\C-x\t" 'increase-left-margin)
-(define-key enriched-mode-map "\C-c\C-l" 'set-left-margin)
-(define-key enriched-mode-map "\C-c\C-r" 'set-right-margin)
+(define-key enriched-mode-map "\C-c[" 'set-left-margin)
+(define-key enriched-mode-map "\C-c]" 'set-right-margin)
 
 ;;;
 ;;; Some functions dealing with text-properties, especially indentation
--- a/lisp/textmodes/tex-mode.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/textmodes/tex-mode.el	Thu Oct 07 16:52:19 2004 +0000
@@ -1,7 +1,7 @@
 ;;; tex-mode.el --- TeX, LaTeX, and SliTeX mode commands -*- coding: utf-8 -*-
 
-;; Copyright (C) 1985,86,89,92,94,95,96,97,98,1999,2002,03,2004
-;;       Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1989, 1992, 1994, 1995, 1996, 1997, 1998, 1999,
+;;   2002, 2003, 2004  Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: tex
@@ -196,7 +196,11 @@
   :group 'tex-view)
 
 ;;;###autoload
-(defcustom tex-dvi-view-command '(if (eq window-system 'x) "xdvi" "dvi2tty * | cat -s")
+(defcustom tex-dvi-view-command
+  '(cond
+    ((eq window-system 'x) "xdvi")
+    ((eq window-system 'w32) "yap") 
+    (t "dvi2tty * | cat -s"))
   "*Command used by \\[tex-view] to display a `.dvi' file.
 If it is a string, that specifies the command directly.
 If this string contains an asterisk (`*'), that is replaced by the file name;
@@ -453,7 +457,8 @@
 		      '("input" "include" "includeonly" "bibliography"
 			"epsfig" "psfig" "epsf" "nofiles" "usepackage"
 			"documentstyle" "documentclass" "verbatiminput"
-			"includegraphics" "includegraphics*")
+			"includegraphics" "includegraphics*"
+			"url" "nolinkurl")
 		      t))
 	   ;; Miscellany.
 	   (slash "\\\\")
@@ -771,8 +776,10 @@
 				    "part" "chapter" "newcommand"
 				    "renewcommand") 'words)
 		      "\\|NeedsTeXFormat{LaTeX")))
-		  (if (looking-at
-		       "document\\(style\\|class\\)\\(\\[.*\\]\\)?{slides}")
+		  (if (and (looking-at
+			    "document\\(style\\|class\\)\\(\\[.*\\]\\)?{slides}")
+			   ;; SliTeX is almost never used any more nowadays.
+			   (tex-executable-exists-p slitex-run-command))
 		      'slitex-mode
 		    'latex-mode)
 		'plain-tex-mode))))
@@ -1219,8 +1226,13 @@
 (defvar latex-block-default "enumerate")
 
 (defvar latex-block-args-alist
-  '(("array" nil ?\{ (skeleton-read "[options]: ") ?\})
-    ("tabular" nil ?\{ (skeleton-read "[options]: ") ?\}))
+  '(("array" nil ?\{ (skeleton-read "Format: ") ?\})
+    ("tabular" nil ?\{ (skeleton-read "Format: ") ?\})
+    ("minipage" nil ?\{ (skeleton-read "Size: ") ?\})
+    ("picture" nil ?\( (skeleton-read "SizeX,SizeY: ") ?\))
+    ;; FIXME: This is right for Prosper, but not for seminar.
+    ;; ("slide" nil ?\{ (skeleton-read "Title: ") ?\})
+    )
   "Skeleton element to use for arguments to particular environments.
 Every element of the list has the form (NAME . SKEL-ELEM) where NAME is
 the name of the environment and SKEL-ELEM is an element to use in
@@ -1229,8 +1241,11 @@
 (defvar latex-block-body-alist
   '(("enumerate" nil '(latex-insert-item) > _)
     ("itemize" nil '(latex-insert-item) > _)
-    ("table" nil "\\caption{" > - "}" > \n _)
-    ("figure" nil  > _ \n "\\caption{" > _ "}" >))
+    ("table" nil "\\caption{" > (skeleton-read "Caption: ") "}" > \n
+     '(if (and (boundp 'reftex-mode) reftex-mode) (reftex-label "table"))
+     \n _)
+    ("figure" nil  > _ \n "\\caption{" > (skeleton-read "Caption: ") "}" > \n
+     '(if (and (boundp 'reftex-mode) reftex-mode) (reftex-label "table"))))
   "Skeleton element to use for the body of particular environments.
 Every element of the list has the form (NAME . SKEL-ELEM) where NAME is
 the name of the environment and SKEL-ELEM is an element to use in
@@ -1254,7 +1269,8 @@
     choice)
   \n "\\begin{" str "}"
   (cdr (assoc str latex-block-args-alist))
-  > \n (or (cdr (assoc str latex-block-body-alist)) '(nil > _)) \n
+  > \n (or (cdr (assoc str latex-block-body-alist)) '(nil > _))
+  (unless (bolp) '\n)
   "\\end{" str "}" > \n)
 
 (define-skeleton latex-insert-item
@@ -1598,7 +1614,7 @@
     ("texindex %r.??")
     ("dvipdfm %r" "%r.dvi" "%r.pdf")
     ("dvipdf %r" "%r.dvi" "%r.pdf")
-    ("dvips %r" "%r.dvi" "%r.ps")
+    ("dvips -o %r.ps %r" "%r.dvi" "%r.ps")
     ("ps2pdf %r.ps" "%r.ps" "%r.pdf")
     ("gv %r.ps &" "%r.ps")
     ("gv %r.pdf &" "%r.pdf")
@@ -1767,7 +1783,7 @@
 	(not (tex-uptodate-p (format-spec out fspec)))))))
 
 (defun tex-compile-default (fspec)
-  "Guess a default command given the format-spec FSPEC."
+  "Guess a default command given the `format-spec' FSPEC."
   ;; TODO: Learn to do latex+dvips!
   (let ((cmds nil)
 	(unchanged-in nil))
@@ -1777,6 +1793,9 @@
 	(if (tex-command-active-p cmd fspec)
 	    (push cmd cmds)
 	  (push (nth 1 cmd) unchanged-in))))
+    ;; If no command seems to be applicable, arbitrarily pick the first one.
+    (unless cmds
+      (setq cmds (list (car tex-compile-commands))))
     ;; Remove those commands whose input was considered stable for
     ;; some other command (typically if (t . "%.pdf") is inactive
     ;; then we're using pdflatex and the fact that the dvi file
@@ -2261,6 +2280,7 @@
 (defvar tex-indent-basic 2)
 (defvar tex-indent-item tex-indent-basic)
 (defvar tex-indent-item-re "\\\\\\(bib\\)?item\\>")
+(defvar latex-noindent-environments '("document"))
 
 (defvar tex-latex-indent-syntax-table
   (let ((st (make-syntax-table tex-mode-syntax-table)))
@@ -2311,7 +2331,6 @@
 	      (latex-find-indent 'virtual))))
      ;; Default (maybe an argument)
      (let ((pos (point))
-	   (char (char-after))
 	   ;; Outdent \item if necessary.
 	   (indent (if (looking-at tex-indent-item-re) (- tex-indent-item) 0))
 	   up-list-pos)
@@ -2329,6 +2348,17 @@
 	 ;; Have to indent relative to the open-paren.
 	 (goto-char up-list-pos)
 	 (if (and (not tex-indent-allhanging)
+		  (save-excursion
+		    ;; Make sure we're an argument to a macro and
+		    ;; that the macro is at the beginning of a line.
+		    (condition-case nil
+			(progn
+			  (while (eq (char-syntax (char-after)) ?\()
+			    (forward-sexp -1))
+			  (and (eq (char-syntax (char-after)) ?/)
+			       (progn (skip-chars-backward " \t&")
+				      (bolp))))
+		      (scan-error nil)))
 		  (> pos (progn (latex-down-list)
 				(forward-comment (point-max))
 				(point))))
@@ -2336,18 +2366,24 @@
 	     (current-column)
 	   ;; We're the first element after a hanging brace.
 	   (goto-char up-list-pos)
-	   (+ indent tex-indent-basic (latex-find-indent 'virtual))))
+	   (+ (if (and (looking-at "\\\\begin *{\\([^\n}]+\\)")
+		       (member (match-string 1)
+			       latex-noindent-environments))
+		  0 tex-indent-basic)
+	      indent (latex-find-indent 'virtual))))
 	;; We're now at the "beginning" of a line.
 	((not (and (not virtual) (eq (char-after) ?\\)))
 	 ;; Nothing particular here: just keep the same indentation.
 	 (+ indent (current-column)))
 	;; We're now looking at a macro call.
-	  ((looking-at tex-indent-item-re)
-	   ;; Indenting relative to an item, have to re-add the outdenting.
+	((looking-at tex-indent-item-re)
+	 ;; Indenting relative to an item, have to re-add the outdenting.
 	 (+ indent (current-column) tex-indent-item))
 	(t
 	 (let ((col (current-column)))
-	   (if (or (null char) (not (eq (char-syntax char) ?\()))
+	   (if (or (not (eq (char-syntax (or (char-after pos) ?\ )) ?\())
+		   ;; Can't be an arg if there's an empty line inbetween.
+		   (save-excursion (re-search-forward "^[ \t]*$" pos t)))
 	       ;; If the first char was not an open-paren, there's
 	       ;; a risk that this is really not an argument to the
 	       ;; macro at all.
@@ -2422,5 +2458,5 @@
 
 (provide 'tex-mode)
 
-;;; arch-tag: c0a680b1-63aa-4547-84b9-4193c29c0080
+;; arch-tag: c0a680b1-63aa-4547-84b9-4193c29c0080
 ;;; tex-mode.el ends here
--- a/lisp/url/ChangeLog	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/url/ChangeLog	Thu Oct 07 16:52:19 2004 +0000
@@ -1,3 +1,8 @@
+2004-10-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* url-handlers.el (url-insert-file-contents): Use the URL to decide the
+	encoding, not the buffer-file-name (which might not even exist).
+
 2004-09-20  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* url-handlers.el (url-insert-file-contents): Decode contents.
--- a/lisp/url/url-handlers.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/url/url-handlers.el	Thu Oct 07 16:52:19 2004 +0000
@@ -208,7 +208,7 @@
 	;; annotation which we could use as a hint of the locale in use
 	;; at the remote site.  Not sure how/if that should be done.  --Stef
 	(decode-coding-inserted-region
-	 start (point) buffer-file-name visit beg end replace)))
+	 start (point) url visit beg end replace)))
     (list url (length data))))
 
 (defun url-file-name-completion (url directory)
--- a/lisp/xml.el	Sun Oct 03 13:08:55 2004 +0000
+++ b/lisp/xml.el	Thu Oct 07 16:52:19 2004 +0000
@@ -598,8 +598,8 @@
 	      nil)
 	     (t
 	      (if xml-validating-parser 
-		  error "XML: (Validity) Invalid element type in the DTD")))
-
+		  (error "XML: (Validity) Invalid element type in the DTD"))))
+	    
 	    ;;  rule [45]: the element declaration must be unique
 	    (if (and (assoc element dtd)
 		     xml-validating-parser)
@@ -727,13 +727,13 @@
 				(match-string 1 this-part)))))))
 
 	(cond ((null children)
-	       (if (stringp expansion)
+	       (if (and (eq (length expansion) 1)
+			(stringp (cadr expansion)))
 		   (setq children (concat prev-part expansion))
-		 (if (stringp (car (last expansion)))
-		     (progn 
-			    (setq children
-				  (list (concat prev-part (car expansion))
-					(cdr expansion))))
+		 (if (stringp (car expansion))
+		     (setq children
+			   (list (concat prev-part (car expansion))
+				 (append (cdr expansion))))
 		   (setq children (append expansion prev-part)))))
 	      ((stringp children)
 	       (if (stringp expansion)
@@ -756,11 +756,15 @@
     (cond ((stringp children)
 	   (concat children (substring string point)))
 	  ((stringp (car (last children)))
-	   (concat (car children) (substring string point)))
+	   (concat (car (last children)) (substring string point)))
 	  ((null children)
 	   string)
 	  (t
-	   (nreverse children)))))
+	   (concat (mapconcat 'identity
+			      (nreverse children)
+			      "")
+		   (substring string point))))))
+
 ;;*******************************************************************
 ;;**
 ;;**  Printing a tree.
--- a/lispintro/emacs-lisp-intro.texi	Sun Oct 03 13:08:55 2004 +0000
+++ b/lispintro/emacs-lisp-intro.texi	Thu Oct 07 16:52:19 2004 +0000
@@ -1,6 +1,7 @@
-@c \input texinfo                                  @c -*-texinfo-*-
+\input texinfo                                  @c -*-texinfo-*-
 @comment %**start of header
 @setfilename ../info/eintr
+@c setfilename emacs-lisp-intro.info
 @c sethtmlfilename emacs-lisp-intro.html
 @settitle Programming in Emacs Lisp
 @syncodeindex vr cp
@@ -21,8 +22,8 @@
 
 @comment %**end of header
 
-@set edition-number 2.12
-@set update-date 2003 Nov 19
+@set edition-number 2.13
+@set update-date 2004 Oct  5
 
 @ignore
  ## Summary of shell commands to create various output formats:
@@ -61,6 +62,8 @@
       ## View Info output with standalone reader
       info emacs-lisp-intro.info
 
+ ## popd
+
 @end ignore
 
 @c ================ Included Figures ================
@@ -180,7 +183,7 @@
 Edition @value{edition-number}, @value{update-date}
 @sp 1
 Copyright @copyright{} 1990, 1991, 1992, 1993, 1994, 1995, 1997, 2001,
-2002, 2003 Free Software Foundation, Inc.
+2002, 2003, 2004 Free Software Foundation, Inc.
 @sp 1
 
 @iftex
@@ -1050,13 +1053,16 @@
 @chapter List Processing
 
 To the untutored eye, Lisp is a strange programming language.  In Lisp
-code there are parentheses everywhere.  Some people even claim that the
-name stands for `Lots of Isolated Silly Parentheses'.  But the claim is
-unwarranted.  Lisp stands for LISt Processing, and the programming
-language handles @emph{lists} (and lists of lists) by putting them
-between parentheses.  The parentheses mark the boundaries of the list.
-Sometimes a list is preceded by a single apostrophe or quotation mark,
-@samp{'}.  Lists are the basis of Lisp.
+code there are parentheses everywhere.  Some people even claim that
+the name stands for `Lots of Isolated Silly Parentheses'.  But the
+claim is unwarranted.  Lisp stands for LISt Processing, and the
+programming language handles @emph{lists} (and lists of lists) by
+putting them between parentheses.  The parentheses mark the boundaries
+of the list.  Sometimes a list is preceded by a single apostrophe or
+quotation mark, @samp{'}@footnote{The single apostrophe or quotation
+mark is an abbreviation for the function @code{quote}; you need not
+think about functions now; functions are defined in @ref{Making
+Errors, , Generate an Error Message}.}  Lists are the basis of Lisp.
 
 @menu
 * Lisp Lists::                  What are lists?
@@ -2135,7 +2141,8 @@
 
 @need 1250
 As usual, the error message tries to be helpful and makes sense after you
-learn how to read it.
+learn how to read it.@footnote{@code{(quote hello)} is an expansion of
+the abbreviation @code{'hello}.}
 
 The first part of the error message is straightforward; it says
 @samp{wrong type argument}.  Next comes the mysterious jargon word
@@ -20638,6 +20645,7 @@
 @end smallexample
 @end ifnottex
 
+@c qqq
 @ignore
 Graphing Definitions Re-listed
 
@@ -21137,6 +21145,7 @@
     (print-X-axis numbers-list horizontal-step)))
 @end group
 @end smallexample
+@c qqq
 @end ignore
 
 @page
--- a/lispref/ChangeLog	Sun Oct 03 13:08:55 2004 +0000
+++ b/lispref/ChangeLog	Thu Oct 07 16:52:19 2004 +0000
@@ -1,3 +1,7 @@
+2004-10-05  Kim F. Storm  <storm@cua.dk>
+
+	* display.texi (Fringe Bitmaps): Update fringe-bitmaps-at-pos.
+
 2004-09-29  Kim F. Storm  <storm@cua.dk>
 
 	* display.texi (Fringe Bitmaps): Use symbols rather than numbers
--- a/lispref/display.texi	Sun Oct 03 13:08:55 2004 +0000
+++ b/lispref/display.texi	Thu Oct 07 16:52:19 2004 +0000
@@ -2655,9 +2655,10 @@
 @defun fringe-bitmaps-at-pos &optional pos window
 This function returns the fringe bitmaps of the display line
 containing position @var{pos} in window @var{window}.  The return
-value has the form @code{(@var{left} . @var{right})}, where @var{left}
+value has the form @code{(@var{left} @var{right} @var{ov})}, where @var{left}
 is the symbol for the fringe bitmap in the left fringe (or @code{nil}
-if no bitmap), and @var{right} is similar for the right fringe.
+if no bitmap), @var{right} is similar for the right fringe, and @var{ov}
+is non-@code{nil} if there is an overlay arrow in the left fringe.
 
 The value is @code{nil} if @var{pos} is not visible in @var{window}.
 If @var{window} is @code{nil}, that stands for the selected window.
--- a/man/ChangeLog	Sun Oct 03 13:08:55 2004 +0000
+++ b/man/ChangeLog	Thu Oct 07 16:52:19 2004 +0000
@@ -1,3 +1,53 @@
+2004-10-06  Karl Berry  <karl@gnu.org>
+
+	* info.texi (@kbd{1}--@kbd{9}): no space around --, for
+	consistency with other uses of dashes.
+
+2004-10-06  Nick Roberts  <nickrob@snap.net.nz>
+
+	* building.texi (Starting GUD): Note that multiple debugging
+	sessions requires `gdb --fullname'.
+
+2004-10-05  Karl Berry  <karl@gnu.org>
+
+	* info.texi: consistently use --- throughout, periods at end of
+	menu descriptions, and a couple typos.
+	From: Benno Schulenberg <benno@nietvergeten.nl>,
+	in bug-texinfo mail.
+
+2004-10-05  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* text.texi: Various small changes in addition to the following.
+	(Text): Replace xref for autotype with inforef.
+	(Sentences): Explain nil value for `sentence-end'.
+	(Paragraphs): Update default values for `paragraph-start' and
+	`paragraph-separate'.
+	(Text Mode): Correct description of Text mode's effect on the
+	syntax table.
+	(Outline Visibility): `hide-other' does not hide top level headings.
+	`selective-display-ellipses' no longer has an effect on Outline mode.
+	(TeX Misc): Add missing @cindex.
+	Replace xref for RefTeX with inforef.
+	(Requesting Formatted Text): the variable
+	`enriched-fill-after-visiting' no longer exists.
+	(Editing Format Info): Update names of menu items and commands.
+	(Format Faces): Mention special effect of specifying the default face.
+	Describe inheritance of text properties.
+	Correct description of `fixed' face.
+	(Format Indentation): Correct description of effect of setting
+	margins.  Mention `set-left-margin' and `set-right-margin'.
+	(Format Justification): Update names of menu items.
+	`set-justification-full' is now bound to `M-j b'.
+	Mention that `default-justification' is a per buffer variable.
+	(Format Properties): Update name of menu item.
+	(Forcing Enriched Mode): `format-decode-buffer' automatically
+	turns on Enriched mode if the buffer is in text/enriched format.
+
+
+2004-10-05  Emilio C. Lopes  <eclig@gmx.net>
+
+	* calendar.texi (From Other Calendar): Add calendar-goto-iso-week.
+
 2004-09-28  Kim F. Storm  <storm@cua.dk>
 
 	* display.texi (Display Custom) <indicate-buffer-boundaries>:
@@ -893,7 +943,7 @@
 
 	* misc.texi: Section "Saving Emacs Sessions" rewritten.
 
-2003-09-29  Jan D.  <jhd@gaffa.gaia.swipnet.se>
+2003-09-29  Jan Dj,Ad(Brv.  <jan.h.d@swipnet.se>
 
 	* xresources.texi (GTK names in Emacs): Correct typo.
 
--- a/man/building.texi	Sun Oct 03 13:08:55 2004 +0000
+++ b/man/building.texi	Thu Oct 07 16:52:19 2004 +0000
@@ -336,11 +336,13 @@
 @findex gdb
 Run GDB as a subprocess of Emacs.  If the variable
 @code{gud-gdb-command-name} is ``gdb --annotate=3'' (the default
-value) then GDB starts as for @kbd{M-x gdba} below.  If you want to
-GDB to start as in Emacs 21.3 and earlier then set
-@code{gud-gdb-command-name} to ``gdb --fullname''.  In this case, the
-command creates a buffer for input and output to GDB, and switches to
-it.  If a GDB buffer already exists, it just switches to that buffer.
+value) then GDB starts as for @kbd{M-x gdba} below.  If you want GDB
+to start as in Emacs 21.3 and earlier then edit the string in the
+minibuffer or set @code{gud-gdb-command-name} to ``gdb --fullname''.
+You need to do this if you want to run multiple debugging sessions
+within one Emacs session.  In this case, the command creates a buffer
+for input and output to GDB, and switches to it.  If a GDB buffer
+already exists, it just switches to that buffer.
 
 @item M-x gdba @key{RET} @var{file} @key{RET}
 Run GDB as a subprocess of Emacs, providing a graphical interface
--- a/man/calendar.texi	Sun Oct 03 13:08:55 2004 +0000
+++ b/man/calendar.texi	Thu Oct 07 16:52:19 2004 +0000
@@ -37,6 +37,7 @@
 * Other Calendars::     Converting dates to other calendar systems.
 * Diary::               Displaying events from your diary.
 * Appointments::	Reminders when it's time to do something.
+* iCalendar::           Converting diary events to/from iCalendar format.
 * Daylight Savings::    How to specify when daylight savings time is active.
 * Time Intervals::      Keeping track of time intervals.
 @end menu
@@ -754,6 +755,7 @@
 
 @kindex g @var{char} @r{(Calendar mode)}
 @findex calendar-goto-iso-date
+@findex calendar-goto-iso-week
 @findex calendar-goto-julian-date
 @findex calendar-goto-astro-day-number
 @findex calendar-goto-hebrew-date
@@ -767,6 +769,9 @@
 @item g c
 Move to a date specified in the ISO commercial calendar
 (@code{calendar-goto-iso-date}).
+@item g w
+Move to a week specified in the ISO commercial calendar
+(@code{calendar-goto-iso-week}).
 @item g j
 Move to a date specified in the Julian calendar
 (@code{calendar-goto-julian-date}).
@@ -1379,6 +1384,57 @@
 list without affecting your diary file.  You delete entries from the
 appointment list with @kbd{M-x appt-delete}.
 
+@node iCalendar
+@section iCalendar
+@cindex iCalendar support
+
+  The icalendar package aims at providing an implementation of the
+iCalendar standard, as defined in ``RFC 2445 -- Internet Calendaring and
+Scheduling Core Object Specification (iCalendar)''.  It provides a means
+for importing [iv]Calendar data into Emacs diary files and vice versa.
+
+  Importing should work correctly for ``ordinary'', i.e. non-recurring,
+events.  Recurring events may not be imported correctly, if they are
+imported at all.  Exporting of diary files into iCalendar files should
+work correctly for most diary entries.  Please note that
+@file{icalendar.el} is work in progress, so usage may evolve in future.
+
+@subsection Usage
+
+  To activate the package, use @code{(require 'icalendar)}.
+
+@findex icalendar-extract-ical-from-buffer
+  The command @code{icalendar-extract-ical-from-buffer} extracts
+iCalendar data from the current buffer and adds it to your (default)
+diary file.  It can be used interactively, or for automatic extraction
+of iCalendar data; for example with the VM mail reader one could use:
+
+@example
+(add-hook 'vm-select-new-message-hook 'icalendar-extract-ical-from-buffer)
+@end example
+
+@findex icalendar-import-file
+  The function @code{icalendar-import-file} can be used
+non-interactively to import an iCalendar file.  @strong{Caution:} the
+contents of the target diary file are @emph{deleted} by default!  It is
+highly recommended to use a dedicated diary file for importing.  For
+example:
+
+@example
+(icalendar-import-file "/here/is/calendar.ics" "/there/goes/ical-diary")
+@end example
+
+@noindent
+The import file can be added to the diary using an @code{#include}
+directive.  @xref{Fancy Diary Display,,, elisp, The Emacs Lisp Reference
+Manual}.
+
+@findex icalendar-convert-diary-to-ical
+  Use @code{icalendar-convert-diary-to-ical} to interactively export an
+Emacs diary file to iCalendar format.  @strong{Caution:} the contents of
+the target file are @emph{deleted} by default!
+
+
 @node Daylight Savings
 @section Daylight Savings Time
 @cindex daylight savings time
--- a/man/info.texi	Sun Oct 03 13:08:55 2004 +0000
+++ b/man/info.texi	Thu Oct 07 16:52:19 2004 +0000
@@ -130,15 +130,15 @@
 @end ifnotinfo
 
 @menu
-* Help-Small-Screen::   Starting Info on a Small Screen
-* Help::                How to use Info
-* Help-P::              Returning to the Previous node
+* Help-Small-Screen::   Starting Info on a Small Screen.
+* Help::                How to use Info.
+* Help-P::              Returning to the Previous node.
 * Help-^L::             The Space, DEL, B and ^L commands.
 * Help-Inv::            Invisible text in Emacs Info.
-* Help-M::              Menus
-* Help-Xref::           Following cross-references
-* Help-Int::            Some intermediate Info commands
-* Help-Q::              Quitting Info
+* Help-M::              Menus.
+* Help-Xref::           Following cross-references.
+* Help-Int::            Some intermediate Info commands.
+* Help-Q::              Quitting Info.
 @end menu
 
 @node Help-Small-Screen
@@ -212,8 +212,8 @@
 If you have managed to get here, go back to the beginning with
 @kbd{DEL} (or @key{BACKSPACE}), and come back here again, then you
 understand the about the @samp{Space} and @samp{Backspace} keys.  So
-now type an @kbd{n} ---just one character; don't type the quotes and
-don't type the Return key afterward--- to get to the normal start of
+now type an @kbd{n}---just one character; don't type the quotes and
+don't type the Return key afterward---to get to the normal start of
 the course.
 @end ifinfo
 
@@ -243,8 +243,8 @@
 and the duplicate remains at the top of the window all the time even
 if you scroll through the node.
 
-  Besides a @samp{Next}, a node can have a @samp{Previous} or an
-@samp{Up} links, or both.  As you can see, this node has all of these
+  Besides a @samp{Next}, a node can have a @samp{Previous} link, or an
+@samp{Up} link, or both.  As you can see, this node has all of these
 links.
 
 @kindex n @r{(Info mode)}
@@ -375,7 +375,7 @@
 
 @kindex C-l @r{(Info mode)}
   If your screen is ever garbaged, you can tell Info to display it
-again by typing @kbd{C-l} (@kbd{Control-L}, that is---hold down
+again by typing @kbd{C-l} (@kbd{Control-L}---that is, hold down
 @key{CTRL} and type @kbd{L} or @kbd{l}).
 
 @format
@@ -414,8 +414,8 @@
 
   (If you are using the stand-alone Info reader, type @kbd{C-x 0} to
 return here, that is---press and hold @key{CTRL}, type an @kbd{x},
-then release @key{CTRL} and @kbd{x}, and press @kbd{0}---a zero, not
-the letter ``o''.)
+then release @key{CTRL} and @kbd{x}, and press @kbd{0}; that's a zero,
+not the letter ``o''.)
 
   From now on, you will encounter large nodes without warning, and
 will be expected to know how to use @key{SPC} and @key{BACKSPACE} to
@@ -971,7 +971,7 @@
 all of the current file by typing @kbd{g*@key{RET}} or all of any
 other file with @kbd{g(@var{filename})@key{RET}}.
 
-@subheading @kbd{1} -- @kbd{9} choose a menu subtopic by its number
+@subheading @kbd{1}--@kbd{9} choose a menu subtopic by its number
 
 @kindex 1 @r{through} 9 @r{(Info mode)}
 @findex Info-nth-menu-item
@@ -1061,7 +1061,7 @@
 echo area the full index entry it found.  Often, the text of the full
 index entry already gives you enough information to decide whether it
 is relevant to what you are looking for, so we recommend that you read
-what Emacs shows in the echo area before looking at the node it
+what Info shows in the echo area before looking at the node it
 displays.
 
   Since @kbd{i} looks for a substring, you can search for subjects even
@@ -1205,7 +1205,7 @@
   A menu begins with a line starting with @w{@samp{* Menu:}}.  The
 rest of the line is a comment.  After the starting line, every line
 that begins with a @samp{* } lists a single topic.  The name of the
-topic--what the user must type at the @kbd{m}'s command prompt to
+topic---what the user must type at the @kbd{m}'s command prompt to
 select this topic---comes right after the star and space, and is
 followed by a colon, spaces and tabs, and the name of the node which
 discusses that topic.  The node name, like node names following
--- a/man/text.texi	Sun Oct 03 13:08:55 2004 +0000
+++ b/man/text.texi	Thu Oct 07 16:52:19 2004 +0000
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985,86,87,93,94,95,97,2000,2001, 2002
+@c Copyright (C) 1985,86,87,93,94,95,97,2000,2001, 2002, 2004
 @c   Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Text, Programs, Indentation, Top
@@ -55,7 +55,7 @@
 @cindex autotyping
 @cindex automatic typing
   The ``automatic typing'' features may be useful when writing text.
-@xref{Top,, Autotyping, autotype, Features for Automatic Typing}.
+@inforef{Top,, autotype}.
 
 @menu
 * Words::	        Moving over and killing words.
@@ -215,10 +215,12 @@
 A sentence also begins or ends wherever a paragraph begins or ends.
 
 @vindex sentence-end
-  The variable @code{sentence-end} controls recognition of the end of a
-sentence.  It is a regexp that matches the last few characters of a
-sentence, together with the whitespace following the sentence.  Its
-normal value is
+  The variable @code{sentence-end} controls recognition of the end of
+a sentence.  If non-@code{nil}, it is a regexp that matches the last
+few characters of a sentence, together with the whitespace following
+the sentence.  If the value is @code{nil}, the default, then Emacs
+computes the regexp according to various criteria.  The result is
+normally similar to the following regexp:
 
 @example
 "[.?!][]\"')]*\\($\\| $\\|\t\\|  \\)[ \t\n]*"
@@ -298,9 +300,10 @@
 that separate paragraphs without being part of any paragraph (for
 example, blank lines).  Lines that start a new paragraph and are
 contained in it must match only @code{paragraph-start}, not
-@code{paragraph-separate}.  For example, in Fundamental mode,
-@code{paragraph-start} is @w{@code{"[ \t\n\f]"}}, and
-@code{paragraph-separate} is @w{@code{"\f\\|[ \t]*$"}}.
+@code{paragraph-separate}.  Each regular expression must match at the
+left margin.  For example, in Fundamental mode, @code{paragraph-start}
+is @w{@code{"\f\\|[ \t]*$"}}, and @code{paragraph-separate} is
+@w{@code{"[ \t\f]*$"}}.
 
   Normally it is desirable for page boundaries to separate paragraphs.
 The default values of these variables recognize the usual separator for
@@ -312,9 +315,9 @@
 @cindex pages
 @cindex formfeed
   Files are often thought of as divided into @dfn{pages} by the
-@dfn{formfeed} character (@acronym{ASCII} control-L, octal code 014).  When you
-print hardcopy for a file, this character forces a page break; thus,
-each page of the file goes on a separate page on paper.  Most Emacs
+@dfn{formfeed} character (@acronym{ASCII} control-L, octal code 014).
+When you print hardcopy for a file, this character forces a page break;
+thus, each page of the file goes on a separate page on paper.  Most Emacs
 commands treat the page-separator character just like any other
 character: you can insert it with @kbd{C-q C-l}, and delete it with
 @key{DEL}.  Thus, you are free to paginate your file or not.  However,
@@ -575,7 +578,7 @@
 conditions for where line-breaking is allowed.  Its value is either
 @code{nil} or a Lisp function; the function is called with no
 arguments, and if it returns a non-@code{nil} value, then point is not
-a good place to break the line.  The standard functions you can use
+a good place to break the line.  Two standard functions you can use are
 @code{fill-single-word-nobreak-p} (don't break after the first word of
 a sentence or before the last) and @code{fill-french-nobreak-p} (don't
 break after @samp{(} or before @samp{)}, @samp{:} or @samp{?}).
@@ -606,11 +609,12 @@
 
 @kindex C-x .
 @findex set-fill-prefix
-  To specify a fill prefix, move to a line that starts with the desired
-prefix, put point at the end of the prefix, and give the command
-@w{@kbd{C-x .}}@: (@code{set-fill-prefix}).  That's a period after the
-@kbd{C-x}.  To turn off the fill prefix, specify an empty prefix: type
-@w{@kbd{C-x .}}@: with point at the beginning of a line.@refill
+  To specify a fill prefix for the current buffer, move to a line that
+starts with the desired prefix, put point at the end of the prefix,
+and give the command @w{@kbd{C-x .}}@: (@code{set-fill-prefix}).
+That's a period after the @kbd{C-x}.  To turn off the fill prefix,
+specify an empty prefix: type @w{@kbd{C-x .}}@: with point at the
+beginning of a line.@refill
 
   When a fill prefix is in effect, the fill commands remove the fill
 prefix from each line before filling and insert it on each line after
@@ -824,14 +828,14 @@
 @kindex TAB @r{(Text mode)}
   Text mode defines @key{TAB} to run @code{indent-relative}
 (@pxref{Indentation}), so that you can conveniently indent a line like
-the previous line.  When the previous line is not indented,
-@code{indent-relative} runs @code{tab-to-tab-stop}, which uses Emacs tab
-stops that you can set (@pxref{Tab Stops}).
+the previous line.
 
   Text mode turns off the features concerned with comments except when
-you explicitly invoke them.  It changes the syntax table so that periods
-are not considered part of a word, while apostrophes, backspaces and
-underlines are considered part of words.
+you explicitly invoke them.  It changes the syntax table so that
+single-quotes are considered part of words.  However, if a word starts
+with single-quotes, then these are treated as a prefix for purposes
+such as capitalization.  That is, @kbd{M-c} will convert
+@samp{'hello'} into @samp{'Hello'}, as expected.
 
 @cindex Paragraph-Indent Text mode
 @cindex mode, Paragraph-Indent Text
@@ -896,8 +900,8 @@
 
   Editing commands that operate on lines, such as @kbd{C-n} and
 @kbd{C-p}, treat the text of the invisible line as part of the previous
-visible line.  Killing an entire visible line, including its terminating
-newline, really kills all the following invisible lines along with it.
+visible line.  Killing the ellipsis at the end of a visible line
+really kills all the following invisible lines.
 
   Outline minor mode provides the same commands as the major mode,
 Outline mode, but you can use it in conjunction with other major modes.
@@ -1137,12 +1141,9 @@
 @findex hide-other
 @kindex C-c C-o @r{(Outline mode)}
   The command @kbd{C-c C-o} (@code{hide-other}) hides everything except
-the heading or body text that point is in, plus its parents (the headers
-leading up from there to top level in the outline).
-
-  You can turn off the use of ellipses at the ends of visible lines by
-setting @code{selective-display-ellipses} to @code{nil}.  Then there is
-no visible indication of the presence of invisible lines.
+the heading and body text that point is in, plus its parents (the headers
+leading up from there to top level in the outline) and the top level
+headings.
 
 @findex reveal-mode
   When incremental search finds text that is hidden by Outline mode,
@@ -1180,7 +1181,7 @@
 nested portion of the outline, while hiding its relatives at higher
 levels.
 
-  Consider an Outline mode buffer all the text and subheadings under
+  Consider an Outline mode buffer with all the text and subheadings under
 level-1 headings hidden.  To look at what is hidden under one of these
 headings, you could use @kbd{C-c C-e} (@kbd{M-x show-entry}) to expose
 the body, or @kbd{C-c C-i} to expose the child (level-2) headings.
@@ -1215,8 +1216,8 @@
   To unzoom (exit) a fold, use @kbd{C-c C-x} (@kbd{M-x foldout-exit-fold}).
 This hides all the text and subheadings under the top-level heading and
 returns you to the previous view of the buffer.  Specifying a numeric
-argument exits that many levels of folds.  Specifying a zero argument exits all
-folds.
+argument exits that many levels of folds.  Specifying a zero argument
+exits all folds.
 
   To cancel the narrowing of a fold without hiding the text and
 subheadings, specify a negative argument.  For example, @kbd{M--2 C-c
@@ -1633,7 +1634,7 @@
 @findex iso-iso2gtex
 @findex iso-gtex2iso
 @cindex Latin-1 @TeX{} encoding
-@TeX{} encoding
+@cindex @TeX{} encoding
   The commands @kbd{M-x iso-iso2tex}, @kbd{M-x iso-tex2iso}, @kbd{M-x
 iso-iso2gtex} and @kbd{M-x iso-gtex2iso} can be used to convert
 between Latin-1 encoded files and @TeX{}-encoded equivalents.
@@ -1659,7 +1660,7 @@
 @cindex references, La@TeX{}
 @cindex La@TeX{} references
   For managing all kinds of references for La@TeX{}, you can use
-Ref@TeX{}.  @xref{Top, , RefTeX, reftex}.
+Ref@TeX{}.  @inforef{Top,, reftex}.
 
 @node HTML Mode
 @section SGML, XML, and HTML Modes
@@ -1880,16 +1881,6 @@
 recognize the format, reconvert the text, and turn on Enriched mode
 again.
 
-@vindex enriched-fill-after-visiting
-  Normally, after visiting a file in text/enriched format, Emacs refills
-each paragraph to fit the specified right margin.  You can turn off this
-refilling, to save time, by setting the variable
-@code{enriched-fill-after-visiting} to @code{nil} or to @code{ask}.
-
-  However, when visiting a file that was saved from Enriched mode, there
-is no need for refilling, because Emacs saves the right margin settings
-along with the text.
-
 @vindex enriched-translations
   You can add annotations for saving additional text properties, which
 Emacs normally does not save, by adding to @code{enriched-translations}.
@@ -1951,22 +1942,22 @@
 @table @code
 @findex facemenu-remove-face-props
 @item Remove Face Properties
-Delete from the region all the text properties that the Text Properties
-menu works with (@code{facemenu-remove-face-props}).
+Delete from the region all face and color text properties
+(@code{facemenu-remove-face-props}).
 
 @findex facemenu-remove-all
-@item Remove All
+@item Remove Text Properties
 Delete @emph{all} text properties from the region
 (@code{facemenu-remove-all}).
 
-@findex describe-text-at
+@findex describe-text-properties
 @cindex text properties of characters
 @cindex overlays at character position
 @cindex widgets at buffer position
 @cindex buttons at buffer position
-@item Describe Text
+@item Describe Properties
 List all the text properties, widgets, buttons, and overlays of the
-character following point (@code{describe-text-at}).
+character following point (@code{describe-text-properties}).
 
 @item Display Faces
 Display a list of all the defined faces (@code{list-faces-display}).
@@ -2018,8 +2009,20 @@
 
   If you use these commands with a prefix argument---or, in Transient Mark
 mode, if the region is not active---then these commands specify a face
-to use for your next self-inserting input.  @xref{Transient Mark}.  This
-applies to both the keyboard commands and the menu commands.
+to use for any immediately following self-inserting input.
+@xref{Transient Mark}.  This applies to both the keyboard commands and
+the menu commands.
+
+  Specifying the @code{default} face also resets foreground and
+background color to their defaults.(@pxref{Format Colors}).
+
+  Any self-inserting character you type inherits, by default, the face
+properties (as well as most other text properties) of the preceding
+character.  Specifying any face property, including foreground or
+background color, for your next self-inserting character will prevent
+it from inheriting any face properties from the preceding character,
+although it will still inherit other text properties.  Characters
+inserted by yanking do not inherit text properties.
 
   Enriched mode defines two additional faces: @code{excerpt} and
 @code{fixed}.  These correspond to codes used in the text/enriched file
@@ -2029,20 +2032,17 @@
 same as @code{italic} unless you customize it (@pxref{Face Customization}).
 
   The @code{fixed} face means, ``Use a fixed-width font for this part
-of the text.''  This makes a visible difference only if you have
-specified a variable-width font in the default face; however, even if
-the default font is fixed-width, applying the @code{fixed} face to a
-part of the text will cause that part of the text to appear in a
-fixed-width font, if the file is ever displayed with a variable-width
-default font.  This applies to Emacs and to other systems that display
-text/enriched format.  So if you specifically want a certain part of
-the text to use a fixed-width font, you should specify the
-@code{fixed} face for that part.
+of the text.''  Applying the @code{fixed} face to a part of the text
+will cause that part of the text to appear in a fixed-width font, even
+if the default font is variable-width.  This applies to Emacs and to
+other systems that display text/enriched format.  So if you
+specifically want a certain part of the text to use a fixed-width
+font, you should specify the @code{fixed} face for that part.
 
-  The @code{fixed} face is normally set up to use a different font
-from the default, even if the default face is also fixed-width.
-Different systems have different fonts installed, so you may need to
-customize this.  @xref{Face Customization}.
+  By default, the @code{fixed} face looks the same as @code{bold}.
+This is an attempt to distinguish it from @code{default}.  You may
+wish to customize @code{fixed} to some other fixed-width medium font.
+@xref{Face Customization}.
 
   If your terminal cannot display different faces, you will not be
 able to see them, but you can still edit documents containing faces,
@@ -2058,20 +2058,20 @@
 for specifying the background color.  Each color menu lists all the
 colors that you have used in Enriched mode in the current Emacs session.
 
-  If you specify a color with a prefix argument---or, in Transient Mark
-mode, if the region is not active---then it applies to your next
-self-inserting input.  @xref{Transient Mark}.  Otherwise, the command
-applies to the region.
+  If you specify a color with a prefix argument---or, in Transient
+Mark mode, if the region is not active---then it applies to any
+immediately following self-inserting input.  @xref{Transient Mark}.
+Otherwise, the command applies to the region.
 
   Each color menu contains one additional item: @samp{Other}.  You can use
 this item to specify a color that is not listed in the menu; it reads
-the color name with the minibuffer.  To display list of available colors
+the color name with the minibuffer.  To display a list of available colors
 and their names, use the @samp{Display Colors} menu item in the Text
 Properties menu (@pxref{Editing Format Info}).
 
   Any color that you specify in this way, or that is mentioned in a
-formatted text file that you read in, is added to both color menus for
-the duration of the Emacs session.
+formatted text file that you read in, is added to the corresponding
+color menu for the duration of the Emacs session.
 
 @findex facemenu-set-foreground
 @findex facemenu-set-background
@@ -2113,33 +2113,42 @@
   You can use these commands repeatedly to increase or decrease the
 indentation.
 
-  The most common way to use these commands is to change the indentation
-of an entire paragraph.  However, that is not the only use.  You can
-change the margins at any point; the new values take effect at the end
-of the line (for right margins) or the beginning of the next line (for
-left margins).
+  The most common way to use them is to change the indentation of an
+entire paragraph.  For other uses, the effects of refilling can be
+hard to predict, except in some special cases like the one described
+next.
 
-  This makes it possible to format paragraphs with @dfn{hanging indents},
-which means that the first line is indented less than subsequent lines.
-To set up a hanging indent, increase the indentation of the region
-starting after the first word of the paragraph and running until the end
-of the paragraph.
+  The most common other use is to format paragraphs with @dfn{hanging
+indents}, which means that the first line is indented less than
+subsequent lines.  To set up a hanging indent, increase the
+indentation of the region starting after the first word of the
+paragraph and running until the end of the paragraph.
 
   Indenting the first line of a paragraph is easier.  Set the margin for
 the whole paragraph where you want it to be for the body of the
 paragraph, then indent the first line by inserting extra spaces or tabs.
 
-  Sometimes, as a result of editing, the filling of a paragraph becomes
-messed up---parts of the paragraph may extend past the left or right
-margins.  When this happens, use @kbd{M-q} (@code{fill-paragraph}) to
-refill the paragraph.
-
 @vindex standard-indent
   The variable @code{standard-indent} specifies how many columns these
 commands should add to or subtract from the indentation.  The default
 value is 4.  The overall default right margin for Enriched mode is
 controlled by the variable @code{fill-column}, as usual.
 
+@kindex C-c [ @r{(Enriched mode)}
+@kindex C-c ] @r{(Enriched mode)}
+@findex set-left-margin
+@findex set-right-margin
+  There are also two commands for setting the left or right margin of
+the region absolutely: @code{set-left-margin} and
+@code{set-right-margin}.  Enriched mode binds these commands to
+@kbd{C-c [} and @kbd{C-c ]}, respectively.  You can specify the
+margin width either with a numeric argument or in the minibuffer.
+
+  Sometimes, as a result of editing, the filling of a paragraph becomes
+messed up---parts of the paragraph may extend past the left or right
+margins.  When this happens, use @kbd{M-q} (@code{fill-paragraph}) to
+refill the paragraph.
+
   The fill prefix, if any, works in addition to the specified paragraph
 indentation: @kbd{C-x .} does not include the specified indentation's
 whitespace in the new value for the fill prefix, and the fill commands
@@ -2157,11 +2166,11 @@
 the style.  The submenu contains five items:
 
 @table @code
-@item Flush Left
+@item Left
 This is the most common style of justification (at least for English).
 Lines are aligned at the left margin but left uneven at the right.
 
-@item Flush Right
+@item Right
 This aligns each line with the right margin.  Spaces and tabs are added
 on the left, if necessary, to make lines line up on the right.
 
@@ -2175,7 +2184,7 @@
 @item Center
 This centers every line between the current margins.
 
-@item None
+@item Unfilled
 This turns off filling entirely.  Each line will remain as you wrote it;
 the fill and auto-fill functions will have no effect on text which has
 this setting.  You can, however, still indent the left margin.  In
@@ -2195,9 +2204,9 @@
 @findex set-justification-right
 @item M-j r
 Make the region right-filled (@code{set-justification-right}).
-@kindex M-j f @r{(Enriched mode)}
+@kindex M-j b @r{(Enriched mode)}
 @findex set-justification-full
-@item M-j f
+@item M-j b
 Make the region fully justified (@code{set-justification-full}).
 @kindex M-j c @r{(Enriched mode)}
 @kindex M-S @r{(Enriched mode)}
@@ -2220,11 +2229,15 @@
   The default justification style is specified by the variable
 @code{default-justification}.  Its value should be one of the symbols
 @code{left}, @code{right}, @code{full}, @code{center}, or @code{none}.
+This is a per-buffer variable.  Setting the variable directly affects
+only the current buffer.  However, customizing it in a Custom buffer
+sets (as always) the default value for buffers that do not override it.
+@xref{Locals}, and @ref{Easy Customization}.
 
 @node Format Properties
 @subsection Setting Other Text Properties
 
-  The Other Properties menu lets you add or remove three other useful text
+  The Special Properties menu lets you add or remove three other useful text
 properties: @code{read-only}, @code{invisible} and @code{intangible}.
 The @code{intangible} property disallows moving point within the text,
 the @code{invisible} text property hides text from display, and the
@@ -2253,10 +2266,10 @@
 not recognize the file as being in the text/enriched format.  In this
 case, when you visit the file you will see the formatting commands
 rather than the formatted text.  Type @kbd{M-x format-decode-buffer} to
-translate it.
+translate it.  This also automatically turns on Enriched mode.
 
 @item
-When you @emph{insert} a file into a buffer, rather than visiting it.
+When you @emph{insert} a file into a buffer, rather than visiting it,
 Emacs does the necessary conversions on the text which you insert, but
 it does not enable Enriched mode.  If you wish to do that, type @kbd{M-x
 enriched-mode}.
@@ -2268,7 +2281,7 @@
 tells Emacs to guess the format.
 
 @findex format-find-file
-  If you wish to look at text/enriched file in its raw form, as a
+  If you wish to look at a text/enriched file in its raw form, as a
 sequence of characters rather than as formatted text, use the @kbd{M-x
 find-file-literally} command.  This visits a file, like
 @code{find-file}, but does not do format conversion.  It also inhibits
--- a/msdos/ChangeLog	Sun Oct 03 13:08:55 2004 +0000
+++ b/msdos/ChangeLog	Thu Oct 07 16:52:19 2004 +0000
@@ -1,3 +1,8 @@
+2004-10-06  Eli Zaretskii  <eliz@gnu.org>
+
+	* sed1v2.inp (LC_ALL=C): Fix src/Makefile breakage caused by
+	recent (2004-09-24) changes in src/Makefile.in.
+
 2004-08-14  Eli Zaretskii  <eliz@gnu.org>
 
 	* sedleim.inp: Remove the lines which say "<TAB>@true", to avoid
--- a/msdos/sed1v2.inp	Sun Oct 03 13:08:55 2004 +0000
+++ b/msdos/sed1v2.inp	Thu Oct 07 16:52:19 2004 +0000
@@ -20,9 +20,9 @@
 s/^[ \f\t][ \f\t]*$//
 s/^ /	/
 s/\.h\.in/.h-in/
-/^	LC_ALL=C \.\/temacs/i\
+/^	LC_ALL=C \$(RUN_TEMACS)/i\
 	stubedit temacs.exe minstack=100k
-/^	LC_ALL=C.*temacs/s/LC_ALL=C/set &;/
+/^	LC_ALL=C.*\$(RUN_TEMACS)/s/LC_ALL=C/set &;/
 /^MAKE *=/s/^/# /
 /^SHELL *=/s/^/# /
 /^srcdir *=/s/@[^@\n]*@/./
--- a/nt/ChangeLog	Sun Oct 03 13:08:55 2004 +0000
+++ b/nt/ChangeLog	Thu Oct 07 16:52:19 2004 +0000
@@ -77,7 +77,7 @@
 
 	* multi-install-info.bat: New file.
 
-2003-06-27  Jan D.  <jan.h.d@swipnet.se>
+2003-06-27  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
 
 	* config.nt (my_strftime): New define.
 
--- a/src/.gdbinit	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/.gdbinit	Thu Oct 07 16:52:19 2004 +0000
@@ -60,6 +60,16 @@
 Works only when an inferior emacs is executing.
 end
 
+# Print out s-expressions
+define pp
+  set $tmp = $arg0
+  set debug_print ($tmp)
+end
+document pp
+Print the argument as an emacs s-expression
+Works only when an inferior emacs is executing.
+end
+
 define xtype
   xgettype $
   output $type
@@ -429,6 +439,16 @@
 end
 xreload
 
+# Flush display (X only)
+define ff
+  set x_flush (0)
+end
+document ff
+Flush pending X window display updates to screen.
+Works only when an inferior emacs is executing.
+end
+
+
 define hook-run
   xreload
 end
--- a/src/ChangeLog	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/ChangeLog	Thu Oct 07 16:52:19 2004 +0000
@@ -1,3 +1,72 @@
+2004-10-06  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+	* macfns.c (mac_get_window_bounds): Add extern.
+	(x_real_positions): Use mac_get_window_bounds.
+
+	* macmenu.c (update_submenu_strings): Apply 2004-09-07 change for
+	xmenu.c (YAILOM).
+	
+	* macterm.c [!MAC_OSX]: Include Windows.h.
+	(front_emacs_window): Rename from mac_front_window.  All uses
+	changed.  Return the frontmost non-tooltip emacs window.
+	(mac_get_window_bounds): New function.
+	(x_calc_absolute_position): Use the difference of width and height
+	between the inner and outer window.
+	(x_set_offset): Specify window position by the coordinae of the
+	outer window.  Adjust the position if the title bar is completely
+	outside the screen.
+	(app_is_suspended, app_sleep_time): Remove unused variables.
+	(do_app_resume, do_app_suspend): Remove their contents because
+	window-activate/deactivate events will do the job.
+	(do_zoom_window): Remove unused variables.  Make compliant to the
+	standard way of zooming.  Set f->left_pos and f->top_pos.
+	(XTread_socket): Don't use argument `expected'.  Don't use
+	FrontWindow to determine the clicked window.  Exclude unprocessed
+	mouseUp cases in the early stage.  Add parentheses to fix operator
+	precedence.
+	(XTread_socket) [TARGET_API_MAC_CARBON]: Don't specify drag area.
+
+
+2004-10-05  Jan Dj,Ad(Brv.  <jan.h.d@swipnet.se>
+
+	* config.in: Regenerate.
+
+	* Makefile.in (RUN_TEMACS): Check HAVE_RANDOM_HEAPSTART instead of
+	HAVE_EXECSHIELD.
+
+2004-10-05  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
+	a row if Alt or Meta has been found for that row.  Also stop scanning
+	for Keysyms for that row.
+
+2004-10-04  Kim F. Storm  <storm@cua.dk>
+
+	* fringe.c (Ffringe_bitmaps_at_pos): Change return value from cons
+	to list.  Include overlay arrow bitmap in return value.
+
+	* xterm.c (XTset_vertical_scroll_bar): Improve handling of scroll
+	bars with fractional column width.  If scroll bar separates two
+	windows, move it towards the window it belongs to.  Only update
+	the padding area below the scroll bar widget when necessary,
+	i.e. when scroll bar widget is created, moved, or resized.
+
+	* xdisp.c (define_frame_cursor1): Do not change frame cursor
+	while tracking/dragging mouse.
+	(x_draw_vertical_border): Do not draw line if frame has scroll bars.
+
+	* window.c (coordinates_in_window): Relax check for cursor
+	on vertial border between mode lines.
+	(Fset_window_fringes): Do not allow negative widths.
+	(Fset_window_scroll_bars): Likewise.
+
+	* .gdbinit (pp): Shorthand for p ARG + pr.
+	(ff): New command: flush frame updates (X only).
+
+2004-10-03  Michael Albinus  <michael.albinus@gmx.de>
+
+	* fileio.c (auto_save_1) Call Ffile_modes for remote files.
+
 2004-09-30  Kenichi Handa  <handa@m17n.org>
 
 	* process.c (send_process): Free composition data.
--- a/src/Makefile.in	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/Makefile.in	Thu Oct 07 16:52:19 2004 +0000
@@ -909,7 +909,7 @@
 #define OBJECTS_MACHINE
 #endif
 
-#ifdef HAVE_EXECSHIELD
+#ifdef HAVE_RANDOM_HEAPSTART
 #undef i386
 RUN_TEMACS = @SETARCH@ i386 ./temacs
 #else
--- a/src/config.in	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/config.in	Thu Oct 07 16:52:19 2004 +0000
@@ -136,9 +136,6 @@
 /* Define to 1 if you have the `euidaccess' function. */
 #undef HAVE_EUIDACCESS
 
-/* Define to 1 if this OS has exec shield and we can handle it. */
-#undef HAVE_EXECSHIELD
-
 /* Define to 1 if you have the <fcntl.h> header file. */
 #undef HAVE_FCNTL_H
 
@@ -432,6 +429,9 @@
 /* Define to 1 if you have the `random' function. */
 #undef HAVE_RANDOM
 
+/* Define to 1 if this OS randomizes the start address of the heap. */
+#undef HAVE_RANDOM_HEAPSTART
+
 /* Define to 1 if you have the `recvfrom' function. */
 #undef HAVE_RECVFROM
 
--- a/src/fileio.c	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/fileio.c	Thu Oct 07 16:52:19 2004 +0000
@@ -5720,6 +5720,9 @@
       && stat (SDATA (current_buffer->filename), &st) >= 0)
     /* But make sure we can overwrite it later!  */
     auto_save_mode_bits = st.st_mode | 0600;
+  else if (! NILP (current_buffer->filename))
+    /* Remote files don't cooperate with stat.  */
+    auto_save_mode_bits = XINT (Ffile_modes (current_buffer->filename)) | 0600;
   else
     auto_save_mode_bits = 0666;
 
--- a/src/fringe.c	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/fringe.c	Thu Oct 07 16:52:19 2004 +0000
@@ -1348,9 +1348,10 @@
        0, 2, 0,
        doc: /* Return fringe bitmaps of row containing position POS in window WINDOW.
 If WINDOW is nil, use selected window.  If POS is nil, use value of point
-in that window.  Return value is a cons (LEFT . RIGHT) where LEFT and RIGHT
-are the fringe bitmap numbers for the bitmaps in the left and right fringe,
-resp.  If left or right fringe is empty, the corresponding element is nil.
+in that window.  Return value is a list (LEFT RIGHT OV), where LEFT
+is the symbol for the bitmap in the left fringe (or nil if no bitmap),
+RIGHT is similar for the right fringe, and OV is non-nil if there is an
+overlay arrow in the left fringe.
 Return nil if POS is not visible in WINDOW.  */)
   (pos, window)
      Lisp_Object pos, window;
@@ -1377,8 +1378,9 @@
   row = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
   row = row_containing_pos (w, textpos, row, NULL, 0);
   if (row)
-    return Fcons (get_fringe_bitmap_name (row->left_fringe_bitmap),
-		  get_fringe_bitmap_name (row->right_fringe_bitmap));
+    return list3 (get_fringe_bitmap_name (row->left_fringe_bitmap),
+		  get_fringe_bitmap_name (row->right_fringe_bitmap),
+		  (row->overlay_arrow_p ? Qt : Qnil));
   else
     return Qnil;
 }
--- a/src/macfns.c	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/macfns.c	Thu Oct 07 16:52:19 2004 +0000
@@ -312,6 +312,9 @@
 							     Lisp_Object,
 							     char *, char *,
 							     int));
+
+extern void mac_get_window_bounds P_ ((struct frame *, Rect *, Rect *));
+
 /* Store the screen positions of frame F into XPTR and YPTR.
    These are the positions of the containing window manager window,
    not Emacs's own window.  */
@@ -321,33 +324,15 @@
      FRAME_PTR f;
      int *xptr, *yptr;
 {
-  Point pt;
-  GrafPtr oldport;
-
-  GetPort (&oldport);
-  SetPortWindowPort (FRAME_MAC_WINDOW (f));
-
-#if TARGET_API_MAC_CARBON
-  {
-    Rect r;
-
-    GetWindowPortBounds (FRAME_MAC_WINDOW (f), &r);
-    SetPt (&pt, r.left, r.top);
-  }
-#else /* not TARGET_API_MAC_CARBON */
-  SetPt (&pt,
-	 FRAME_MAC_WINDOW (f)->portRect.left,
-	 FRAME_MAC_WINDOW (f)->portRect.top);
-#endif /* not TARGET_API_MAC_CARBON */
-  LocalToGlobal (&pt);
-  SetPort (oldport);
-
-  /* MAC has no frame pixel diff.  */
-  f->x_pixels_diff = 0;
-  f->y_pixels_diff = 0;
-
-  *xptr = pt.h;
-  *yptr = pt.v;
+  Rect inner, outer;
+
+  mac_get_window_bounds (f, &inner, &outer);
+
+  f->x_pixels_diff = inner.left - outer.left;
+  f->y_pixels_diff = inner.top - outer.top;
+
+  *xptr = outer.left;
+  *yptr = outer.top;
 }
 
 
--- a/src/macmenu.c	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/macmenu.c	Thu Oct 07 16:52:19 2004 +0000
@@ -1322,7 +1322,7 @@
 
   for (wv = first_wv; wv; wv = wv->next)
     {
-      if (wv->lname && ! NILP (wv->lname))
+      if (STRINGP (wv->lname))
         {
           wv->name = SDATA (wv->lname);
 
@@ -1336,7 +1336,7 @@
             }
         }
 
-      if (wv->lkey && ! NILP (wv->lkey))
+      if (STRINGP (wv->lkey))
         wv->key = SDATA (wv->lkey);
 
       if (wv->contents)
--- a/src/macterm.c	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/macterm.c	Thu Oct 07 16:52:19 2004 +0000
@@ -50,6 +50,7 @@
 #include <TextUtils.h>
 #include <LowMem.h>
 #include <Controls.h>
+#include <Windows.h>
 #if defined (__MRC__) || (__MSL__ >= 0x6000)
 #include <ControlDefinitions.h>
 #endif
@@ -3887,18 +3888,21 @@
 
 
 static WindowPtr
-mac_front_window ()
+front_emacs_window ()
 {
 #if TARGET_API_MAC_CARBON
-  return GetFrontWindowOfClass (kDocumentWindowClass, true);
+  WindowPtr wp = GetFrontWindowOfClass (kDocumentWindowClass, true);
+
+  while (wp && !is_emacs_window (wp))
+    wp = GetNextWindowOfClass (wp, kDocumentWindowClass, true);
 #else
-  WindowPtr front_window = FrontWindow ();
-
-  if (tip_window && front_window == tip_window)
-    return GetNextWindow (front_window);
-  else
-    return front_window;
+  WindowPtr wp = FrontWindow ();
+
+  while (wp && (wp == tip_window || !is_emacs_window (wp)))
+    wp = GetNextWindow (wp);
 #endif
+
+  return wp;
 }
 
 #define mac_window_to_frame(wp) (((mac_output *) GetWRefCon (wp))->mFP)
@@ -3934,7 +3938,7 @@
 {
   Point mouse_pos;
   int ignore1, ignore2;
-  WindowPtr wp = mac_front_window ();
+  WindowPtr wp = front_emacs_window ();
   struct frame *f;
   Lisp_Object frame, tail;
 
@@ -4551,7 +4555,7 @@
      unsigned long *time;
 {
   struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar);
-  WindowPtr wp = mac_front_window ();
+  WindowPtr wp = front_emacs_window ();
   Point mouse_pos;
   struct frame *f = mac_window_to_frame (wp);
   int win_y, top_range;
@@ -5036,6 +5040,26 @@
  */
 
 
+void
+mac_get_window_bounds (f, inner, outer)
+     struct frame *f;
+     Rect *inner, *outer;
+{
+#if TARGET_API_MAC_CARBON
+  GetWindowBounds (FRAME_MAC_WINDOW (f), kWindowContentRgn, inner);
+  GetWindowBounds (FRAME_MAC_WINDOW (f), kWindowStructureRgn, outer);
+#else /* not TARGET_API_MAC_CARBON */
+  RgnHandle region = NewRgn ();
+    
+  GetWindowRegion (FRAME_MAC_WINDOW (f), kWindowContentRgn, region);
+  *inner = (*region)->rgnBBox;
+  GetWindowRegion (FRAME_MAC_WINDOW (f), kWindowStructureRgn, region);
+  *outer = (*region)->rgnBBox;
+  DisposeRgn (region);
+#endif /* not TARGET_API_MAC_CARBON */
+}
+
+
 /* Calculate the absolute position in frame F
    from its current recorded position values and gravity.  */
 
@@ -5043,47 +5067,36 @@
 x_calc_absolute_position (f)
      struct frame *f;
 {
-  Point pt;
+  int width_diff = 0, height_diff = 0;
   int flags = f->size_hint_flags;
-
-  pt.h = pt.v = 0;
-
-  /* Find the position of the outside upper-left corner of
+  Rect inner, outer;
+
+  /* We have nothing to do if the current position
+     is already for the top-left corner.  */
+  if (! ((flags & XNegative) || (flags & YNegative)))
+    return;
+
+  /* Find the offsets of the outside upper-left corner of
      the inner window, with respect to the outer window.  */
-  if (f->output_data.mac->parent_desc != FRAME_MAC_DISPLAY_INFO (f)->root_window)
-    {
-      GrafPtr savePort;
-      GetPort (&savePort);
-
-      SetPortWindowPort (FRAME_MAC_WINDOW (f));
-
-#if TARGET_API_MAC_CARBON
-      {
-        Rect r;
-
-        GetWindowPortBounds (FRAME_MAC_WINDOW (f), &r);
-        SetPt(&pt, r.left,  r.top);
-      }
-#else /* not TARGET_API_MAC_CARBON */
-      SetPt(&pt, FRAME_MAC_WINDOW (f)->portRect.left,  FRAME_MAC_WINDOW (f)->portRect.top);
-#endif /* not TARGET_API_MAC_CARBON */
-      LocalToGlobal (&pt);
-      SetPort (savePort);
-    }
+  mac_get_window_bounds (f, &inner, &outer);
+
+  width_diff = (outer.right - outer.left) - (inner.right - inner.left);
+  height_diff = (outer.bottom - outer.top) - (inner.bottom - inner.top);
 
   /* Treat negative positions as relative to the leftmost bottommost
      position that fits on the screen.  */
   if (flags & XNegative)
     f->left_pos = (FRAME_MAC_DISPLAY_INFO (f)->width
-		   - 2 * f->border_width - pt.h
+                   - width_diff
 		   - FRAME_PIXEL_WIDTH (f)
 		   + f->left_pos);
-  /* NTEMACS_TODO: Subtract menubar height?  */
+
   if (flags & YNegative)
     f->top_pos = (FRAME_MAC_DISPLAY_INFO (f)->height
-		  - 2 * f->border_width - pt.v
+		  - height_diff
 		  - FRAME_PIXEL_HEIGHT (f)
 		  + f->top_pos);
+
   /* The left_pos and top_pos
      are now relative to the top and left screen edges,
      so the flags should correspond.  */
@@ -5102,8 +5115,6 @@
      register int xoff, yoff;
      int change_gravity;
 {
-  int modified_top, modified_left;
-
   if (change_gravity > 0)
     {
       f->top_pos = yoff;
@@ -5120,11 +5131,55 @@
   BLOCK_INPUT;
   x_wm_set_size_hint (f, (long) 0, 0);
 
-  modified_left = f->left_pos;
-  modified_top = f->top_pos;
-
-  MoveWindow (FRAME_MAC_WINDOW (f), modified_left + 6,
-	      modified_top + 42, false);
+#if TARGET_API_MAC_CARBON
+  MoveWindowStructure (FRAME_MAC_WINDOW (f), f->left_pos, f->top_pos);
+  /* If the title bar is completely outside the screen, adjust the
+     position. */
+  ConstrainWindowToScreen (FRAME_MAC_WINDOW (f), kWindowTitleBarRgn,
+			   kWindowConstrainMoveRegardlessOfFit
+			   | kWindowConstrainAllowPartial, NULL, NULL);
+  x_real_positions (f, &f->left_pos, &f->top_pos);
+#else
+  {
+    Rect inner, outer, screen_rect, dummy;
+    RgnHandle region = NewRgn ();
+    
+    mac_get_window_bounds (f, &inner, &outer);
+    f->x_pixels_diff = inner.left - outer.left;
+    f->y_pixels_diff = inner.top - outer.top;
+    MoveWindow (FRAME_MAC_WINDOW (f), f->left_pos + f->x_pixels_diff,
+		f->top_pos + f->y_pixels_diff, false);
+
+    /* If the title bar is completely outside the screen, adjust the
+       position.  The variable `outer' holds the title bar rectangle.
+       The variable `inner' holds slightly smaller one than `outer',
+       so that the calculation of overlapping may not become too
+       strict.  */
+    GetWindowRegion (FRAME_MAC_WINDOW (f), kWindowTitleBarRgn, region);
+    outer = (*region)->rgnBBox;
+    DisposeRgn (region);
+    inner = outer;
+    InsetRect (&inner, 8, 8);
+    screen_rect = qd.screenBits.bounds;
+    screen_rect.top += GetMBarHeight ();
+
+    if (!SectRect (&inner, &screen_rect, &dummy))
+      {
+	if (inner.right <= screen_rect.left)
+	  f->left_pos = screen_rect.left;
+	else if (inner.left >= screen_rect.right)
+	  f->left_pos = screen_rect.right - (outer.right - outer.left);
+
+	if (inner.bottom <= screen_rect.top)
+	  f->top_pos = screen_rect.top;
+	else if (inner.top >= screen_rect.bottom)
+	  f->top_pos = screen_rect.bottom - (outer.bottom - outer.top);
+
+	MoveWindow (FRAME_MAC_WINDOW (f), f->left_pos + f->x_pixels_diff,
+		    f->top_pos + f->y_pixels_diff, false);
+      }
+  }
+#endif
 
   UNBLOCK_INPUT;
 }
@@ -6900,6 +6955,7 @@
 /* true when cannot handle any Mac OS events */
 static int handling_window_update = 0;
 
+#if 0
 /* the flag appl_is_suspended is used both for determining the sleep
    time to be passed to WaitNextEvent and whether the cursor should be
    drawn when updating the display.  The cursor is turned off when
@@ -6909,6 +6965,7 @@
    suspended.  */
 static Boolean app_is_suspended = false;
 static long app_sleep_time = WNE_SLEEP_AT_RESUME;
+#endif
 
 #define EXTRA_STACK_ALLOC (256 * 1024)
 
@@ -7235,11 +7292,13 @@
 static void
 do_app_resume ()
 {
+  /* Window-activate events will do the job. */
+#if 0
   WindowPtr wp;
   struct frame *f;
 
-  wp = mac_front_window ();
-  if (is_emacs_window (wp))
+  wp = front_emacs_window ();
+  if (wp)
     {
       f = mac_window_to_frame (wp);
 
@@ -7252,16 +7311,19 @@
 
   app_is_suspended = false;
   app_sleep_time = WNE_SLEEP_AT_RESUME;
+#endif
 }
 
 static void
 do_app_suspend ()
 {
+  /* Window-deactivate events will do the job. */
+#if 0
   WindowPtr wp;
   struct frame *f;
 
-  wp = mac_front_window ();
-  if (is_emacs_window (wp))
+  wp = front_emacs_window ();
+  if (wp)
     {
       f = mac_window_to_frame (wp);
 
@@ -7274,6 +7336,7 @@
 
   app_is_suspended = true;
   app_sleep_time = WNE_SLEEP_AT_SUSPEND;
+#endif
 }
 
 
@@ -7282,10 +7345,10 @@
      Point mouse_pos;
      FRAME_PTR *f;
 {
-  WindowPtr wp = mac_front_window ();
+  WindowPtr wp = front_emacs_window ();
   struct x_display_info *dpyinfo;
 
-  if (is_emacs_window (wp))
+  if (wp)
     {
       *f = mac_window_to_frame (wp);
       dpyinfo = FRAME_MAC_DISPLAY_INFO (*f);
@@ -7347,7 +7410,7 @@
 
     default:
       {
-        struct frame *f = mac_window_to_frame (mac_front_window ());
+        struct frame *f = mac_window_to_frame (front_emacs_window ());
         MenuHandle menu = GetMenuHandle (menu_id);
         if (menu)
           {
@@ -7400,41 +7463,43 @@
   GrafPtr save_port;
   Rect zoom_rect, port_rect;
   Point top_left;
-  int w_title_height, columns, rows, width, height, dummy, x, y;
+  int w_title_height, columns, rows;
   struct frame *f = mac_window_to_frame (w);
 
+#if TARGET_API_MAC_CARBON
+  {
+    Point standard_size;
+
+    standard_size.h = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, DEFAULT_NUM_COLS);
+    standard_size.v = FRAME_MAC_DISPLAY_INFO (f)->height;
+
+    if (IsWindowInStandardState (w, &standard_size, &zoom_rect))
+      zoom_in_or_out = inZoomIn;
+    else
+      {
+	/* Adjust the standard size according to character boundaries.  */
+
+	columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, zoom_rect.right - zoom_rect.left);
+	rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, zoom_rect.bottom - zoom_rect.top);
+	standard_size.h = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, columns);
+	standard_size.v = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, rows);
+	GetWindowBounds (w, kWindowContentRgn, &port_rect);
+	if (IsWindowInStandardState (w, &standard_size, &zoom_rect)
+	    && port_rect.left == zoom_rect.left
+	    && port_rect.top == zoom_rect.top)
+	  zoom_in_or_out = inZoomIn;
+	else
+	  zoom_in_or_out = inZoomOut;
+      }
+
+    ZoomWindowIdeal (w, zoom_in_or_out, &standard_size);
+  }
+#else /* not TARGET_API_MAC_CARBON */
   GetPort (&save_port);
 
   SetPortWindowPort (w);
 
   /* Clear window to avoid flicker.  */
-#if TARGET_API_MAC_CARBON
-  {
-    Rect r;
-    BitMap bm;
-
-    GetWindowPortBounds (w, &r);
-    EraseRect (&r);
-
-    if (zoom_in_or_out == inZoomOut)
-      {
-        /* calculate height of window's title bar (hard card it for now).  */
-        w_title_height = 20 + GetMBarHeight ();
-
-        /* get maximum height of window into zoom_rect.bottom -
-	   zoom_rect.top */
-        GetQDGlobalsScreenBits (&bm);
-        zoom_rect = bm.bounds;
-        zoom_rect.top += w_title_height;
-        InsetRect (&zoom_rect, 8, 4);  /* not too tight */
-
-        zoom_rect.right = zoom_rect.left
-	  + FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, DEFAULT_NUM_COLS);
-
-        SetWindowStandardState (w, &zoom_rect);
-      }
-  }
-#else /* not TARGET_API_MAC_CARBON */
   EraseRect (&(w->portRect));
   if (zoom_in_or_out == inZoomOut)
     {
@@ -7453,13 +7518,20 @@
       zoom_rect.right = zoom_rect.left
 	+ FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, DEFAULT_NUM_COLS);
 
+      /* Adjust the standard size according to character boundaries.  */
+      rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, zoom_rect.bottom - zoom_rect.top);
+      zoom_rect.bottom =
+	zoom_rect.top + FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, rows);
+
       (**((WStateDataHandle) ((WindowPeek) w)->dataHandle)).stdState
 	= zoom_rect;
     }
+
+  ZoomWindow (w, zoom_in_or_out, w == front_emacs_window ());
+
+  SetPort (save_port);
 #endif /* not TARGET_API_MAC_CARBON */
 
-  ZoomWindow (w, zoom_in_or_out, w == mac_front_window ());
-
   /* retrieve window size and update application values */
 #if TARGET_API_MAC_CARBON
   GetWindowPortBounds (w, &port_rect);
@@ -7469,8 +7541,7 @@
   rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, port_rect.bottom - port_rect.top);
   columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, port_rect.right - port_rect.left);
   x_set_window_size (f, 0, columns, rows);
-
-  SetPort (save_port);
+  x_real_positions (f, &f->left_pos, &f->top_pos);
 }
 
 /* Initialize Drag And Drop to allow files to be dropped onto emacs frames */
@@ -8020,19 +8091,15 @@
   if (NILP (Fboundp (Qmac_ready_for_drag_n_drop)))
     event_mask -= highLevelEventMask;
 
-  while (WaitNextEvent (event_mask, &er,
-			(expected ? app_sleep_time : 0L), NULL))
-#else
-  while (!ReceiveNextEvent (0, NULL,
-			    (expected ? TicksToEventTime (app_sleep_time) : 0),
+  while (WaitNextEvent (event_mask, &er, 0L, NULL))
+#else /* USE_CARBON_EVENTS */
+  while (!ReceiveNextEvent (0, NULL, kEventDurationNoWait,
 			    kEventRemoveFromQueue, &eventRef))
-#endif /* !USE_CARBON_EVENTS */
+#endif /* USE_CARBON_EVENTS */
     {
       int do_help = 0;
       struct frame *f;
 
-      expected = 0;
-
       /* It is necessary to set this (additional) argument slot of an
 	 event to nil because keyboard.c protects incompletely
 	 processed event from being garbage collected by placing them
@@ -8055,13 +8122,7 @@
 				  NULL, &window_ptr);
 		f = mac_window_to_frame (window_ptr);
 		if (f && !f->async_iconified)
-		  {
-		    int x, y;
-		    
-		    x_real_positions (f, &x, &y);
-		    f->left_pos = x;
-		    f->top_pos = y;
-		  }
+		  x_real_positions (f, &f->left_pos, &f->top_pos);
 		SendEventToEventTarget (eventRef, toolbox_dispatcher);
 	      }
 	    break;
@@ -8070,7 +8131,7 @@
 	      {
 		SInt32 delta;
 		Point point;
-		WindowPtr window_ptr = mac_front_window ();
+		WindowPtr window_ptr = front_emacs_window ();
 
 		if (!IsValidWindowPtr (window_ptr))
 		  {
@@ -8132,33 +8193,28 @@
 	      }
 	    else
 	      {
-		window_ptr = FrontWindow ();
+		part_code = FindWindow (er.where, &window_ptr);
 		if (tip_window && window_ptr == tip_window)
 		  {
 		    HideWindow (tip_window);
-		    window_ptr = FrontWindow ();
+		    part_code = FindWindow (er.where, &window_ptr);
 		  }
-
-		if (!is_emacs_window (window_ptr))
-		  break;
-
-		part_code = FindWindow (er.where, &window_ptr);
 	      }
 
+	    if (er.what != mouseDown && part_code != inContent)
+	      break;
+
 	    switch (part_code)
 	      {
 	      case inMenuBar:
-		if (er.what == mouseDown)
-		  {
-		    f = mac_window_to_frame (mac_front_window ());
-		    saved_menu_event_location = er.where;
-		    inev.kind = MENU_BAR_ACTIVATE_EVENT;
-		    XSETFRAME (inev.frame_or_window, f);
-		  }
+		f = mac_window_to_frame (front_emacs_window ());
+		saved_menu_event_location = er.where;
+		inev.kind = MENU_BAR_ACTIVATE_EVENT;
+		XSETFRAME (inev.frame_or_window, f);
 		break;
 
 	      case inContent:
-		if (window_ptr != mac_front_window ())
+		if (window_ptr != front_emacs_window ())
 		  SelectWindow (window_ptr);
 		else
 		  {
@@ -8255,7 +8311,7 @@
 		      }
 		    else
 		      {
-			if (dpyinfo->grabbed & (1 << inev.code) == 0)
+			if ((dpyinfo->grabbed & (1 << inev.code)) == 0)
 			  /* If a button is released though it was not
 			     previously pressed, that would be because
 			     of multi-button emulation.  */
@@ -8278,27 +8334,16 @@
 
 	      case inDrag:
 #if TARGET_API_MAC_CARBON
-		if (er.what == mouseDown)
-		  {
-		    BitMap bm;
-
-		    GetQDGlobalsScreenBits (&bm);
-		    DragWindow (window_ptr, er.where, &bm.bounds);
-		  }
+		DragWindow (window_ptr, er.where, NULL);
 #else /* not TARGET_API_MAC_CARBON */
 		DragWindow (window_ptr, er.where, &qd.screenBits.bounds);
 #endif /* not TARGET_API_MAC_CARBON */
 		/* Update the frame parameters.  */
 		{
 		  struct frame *f = mac_window_to_frame (window_ptr);
+
 		  if (f && !f->async_iconified)
-		    {
-		      int x, y;
-		      
-		      x_real_positions (f, &x, &y);
-		      f->left_pos = x;
-		      f->top_pos = y;
-		    }
+		    x_real_positions (f, &f->left_pos, &f->top_pos);
 		}
 		break;
 
@@ -8313,11 +8358,8 @@
 
 		/* window resize handling added --ben */
 	      case inGrow:
-		if (er.what == mouseDown)
-		  {
-		    do_grow_window(window_ptr, &er);
-		    break;
-		  }
+		do_grow_window (window_ptr, &er);
+		break;
 
 		/* window zoom handling added --ben */
 	      case inZoomIn:
@@ -8460,7 +8502,7 @@
 #endif
 
 #if TARGET_API_MAC_CARBON
-	    if (!IsValidWindowPtr (mac_front_window ()))
+	    if (!IsValidWindowPtr (front_emacs_window ()))
 	      {
 		SysBeep (1);
 		break;
@@ -8564,7 +8606,7 @@
 	  inev.modifiers = mac_to_emacs_modifiers (er.modifiers);
 #endif
 	  XSETFRAME (inev.frame_or_window,
-		     mac_window_to_frame (mac_front_window ()));
+		     mac_window_to_frame (front_emacs_window ()));
 	  inev.timestamp = er.when * (1000 / 60);  /* ticks to milliseconds */
 	  break;
 
@@ -8581,16 +8623,16 @@
 	      WindowPtr wp;
 	      Lisp_Object frame;
 
-	      wp = mac_front_window ();
+	      wp = front_emacs_window ();
 
 	      if (!wp)
 		{
 		  struct frame *f = XFRAME (XCAR (Vframe_list));
 		  CollapseWindow (FRAME_MAC_WINDOW (f), false);
-		  wp = mac_front_window ();
+		  wp = front_emacs_window ();
 		}
 
-	      if (wp && is_emacs_window (wp))
+	      if (wp)
 		f = mac_window_to_frame (wp);
 
 	      inev.kind = DRAG_N_DROP_EVENT;
@@ -9047,7 +9089,7 @@
       e.arg = Qnil;
       e.modifiers = NULL;
       e.timestamp = EventTimeToTicks (GetEventTime (event)) * (1000/60);
-      XSETFRAME (e.frame_or_window, mac_window_to_frame (mac_front_window ()));
+      XSETFRAME (e.frame_or_window, mac_window_to_frame (front_emacs_window ()));
       /* Remove event from queue to prevent looping. */
       RemoveEventFromQueue (GetMainEventQueue (), event);
       ReleaseEvent (event);
--- a/src/window.c	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/window.c	Thu Oct 07 16:52:19 2004 +0000
@@ -609,9 +609,6 @@
   int grabbable_width = ux;
   int lmargin_width, rmargin_width, text_left, text_right;
 
-  if (*x < x0 || *x >= x1)
-    return ON_NOTHING;
-
   /* In what's below, we subtract 1 when computing right_x because we
      want the rightmost pixel, which is given by left_pixel+width-1.  */
   if (w->pseudo_window_p)
@@ -661,6 +658,9 @@
 	    return ON_VERTICAL_BORDER;
 	}
 
+      if (*x < x0 || *x >= x1)
+	return ON_NOTHING;
+
       /* Convert X and Y to window relative coordinates.
 	 Mode line starts at left edge of window.  */
       *x -= x0;
@@ -675,6 +675,9 @@
       goto header_vertical_border_check;
     }
 
+  if (*x < x0 || *x >= x1)
+    return ON_NOTHING;
+
   /* Outside any interesting column?  */
   if (*x < left_x || *x > right_x)
     return ON_SCROLL_BAR;
@@ -6036,9 +6039,9 @@
   struct window *w = decode_window (window);
 
   if (!NILP (left))
-    CHECK_NUMBER (left);
+    CHECK_NATNUM (left);
   if (!NILP (right))
-    CHECK_NUMBER (right);
+    CHECK_NATNUM (right);
 
   if (!EQ (w->left_fringe_width, left)
       || !EQ (w->right_fringe_width, right)
@@ -6098,7 +6101,7 @@
   struct window *w = decode_window (window);
 
   if (!NILP (width))
-    CHECK_NUMBER (width);
+    CHECK_NATNUM (width);
 
   if (XINT (width) == 0)
     vertical_type = Qnil;
--- a/src/xdisp.c	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/xdisp.c	Thu Oct 07 16:52:19 2004 +0000
@@ -215,6 +215,8 @@
 extern int interrupt_input;
 extern int command_loop_level;
 
+extern Lisp_Object do_mouse_tracking;
+
 extern int minibuffer_auto_raise;
 extern Lisp_Object Vminibuffer_list;
 
@@ -20762,6 +20764,10 @@
      Cursor cursor;
      Lisp_Object pointer;
 {
+  /* Do not change cursor shape while dragging mouse.  */
+  if (!NILP (do_mouse_tracking))
+    return;
+
   if (!NILP (pointer))
     {
       if (EQ (pointer, Qarrow))
@@ -21625,6 +21631,9 @@
      do it for frames with vertical scroll bars because either the
      right scroll bar of a window, or the left scroll bar of its
      neighbor will suffice as a border.  */
+  if (FRAME_HAS_VERTICAL_SCROLL_BARS (XFRAME (w->frame)))
+    return;
+
   if (!WINDOW_RIGHTMOST_P (w)
       && !WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))
     {
--- a/src/xterm.c	Sun Oct 03 13:08:55 2004 +0000
+++ b/src/xterm.c	Thu Oct 07 16:52:19 2004 +0000
@@ -3380,12 +3380,14 @@
      Alt keysyms are on.  */
   {
     int row, col;	/* The row and column in the modifier table.  */
+    int found_alt_or_meta;
 
     for (row = 3; row < 8; row++)
+    {
+      found_alt_or_meta = 0;
       for (col = 0; col < mods->max_keypermod; col++)
 	{
-	  KeyCode code
-	    = mods->modifiermap[(row * mods->max_keypermod) + col];
+	  KeyCode code = mods->modifiermap[(row * mods->max_keypermod) + col];
 
 	  /* Zeroes are used for filler.  Skip them.  */
 	  if (code == 0)
@@ -3403,33 +3405,44 @@
 		  {
 		  case XK_Meta_L:
 		  case XK_Meta_R:
+		    found_alt_or_meta = 1;
 		    dpyinfo->meta_mod_mask |= (1 << row);
 		    break;
 
 		  case XK_Alt_L:
 		  case XK_Alt_R:
+		    found_alt_or_meta = 1;
 		    dpyinfo->alt_mod_mask |= (1 << row);
 		    break;
 
 		  case XK_Hyper_L:
 		  case XK_Hyper_R:
-		    dpyinfo->hyper_mod_mask |= (1 << row);
+		    if (!found_alt_or_meta)
+		      dpyinfo->hyper_mod_mask |= (1 << row);
+		    code_col = syms_per_code;
+		    col = mods->max_keypermod;
 		    break;
 
 		  case XK_Super_L:
 		  case XK_Super_R:
-		    dpyinfo->super_mod_mask |= (1 << row);
+		    if (!found_alt_or_meta)
+		      dpyinfo->super_mod_mask |= (1 << row);
+		    code_col = syms_per_code;
+		    col = mods->max_keypermod;
 		    break;
 
 		  case XK_Shift_Lock:
 		    /* Ignore this if it's not on the lock modifier.  */
-		    if ((1 << row) == LockMask)
+		    if (!found_alt_or_meta && ((1 << row) == LockMask))
 		      dpyinfo->shift_lock_mask = LockMask;
+		    code_col = syms_per_code;
+		    col = mods->max_keypermod;
 		    break;
 		  }
 	      }
 	  }
 	}
+    }
   }
 
   /* If we couldn't find any meta keys, accept any alt keys as meta keys.  */
@@ -5050,9 +5063,15 @@
   /* Compute the left edge of the scroll bar.  */
 #ifdef USE_TOOLKIT_SCROLL_BARS
   if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))
-    sb_left = left + width - sb_width - (width - sb_width) / 2;
+    sb_left = (left +
+	       (WINDOW_RIGHTMOST_P (w)
+		? width - sb_width - (width - sb_width) / 2
+		: 0));
   else
-    sb_left = left + (width - sb_width) / 2;
+    sb_left = (left +
+	       (WINDOW_LEFTMOST_P (w)
+		? (width - sb_width) / 2
+		: width - sb_width));
 #else
   if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))
     sb_left = left + width - sb_width;
@@ -5105,19 +5124,20 @@
                                  width);
 #else /* not USE_GTK */
 
-      /* Since toolkit scroll bars are smaller than the space reserved
-         for them on the frame, we have to clear "under" them.  */
-      if (width > 0 && height > 0)
-        x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
-                          left, top, width, height, False);
       /* Move/size the scroll bar widget.  */
       if (mask)
+	{
+	  /* Since toolkit scroll bars are smaller than the space reserved
+	     for them on the frame, we have to clear "under" them.  */
+	  if (width > 0 && height > 0)
+	    x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+                          left, top, width, height, False);
           XtConfigureWidget (SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar),
                              sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
                              top,
                              sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
                              max (height, 1), 0);
-
+	}
 #endif /* not USE_GTK */
 #else /* not USE_TOOLKIT_SCROLL_BARS */