changeset 142:1856695b1fa9 r20-2b5

Import from CVS: tag r20-2b5
author cvs
date Mon, 13 Aug 2007 09:33:18 +0200
parents ea67ad3963dc
children 50e7fedfe353
files CHANGES-beta ChangeLog etc/sgml/README.cdtd etc/sgml/cdtd/html lib-src/etags.c lisp/ChangeLog lisp/bytecomp/byte-optimize.el lisp/efs/dired.el lisp/egg/egg.el lisp/games/NeXTify.el lisp/gnus/ChangeLog lisp/gnus/gnus-art.el lisp/gnus/gnus-int.el lisp/gnus/gnus-msg.el lisp/gnus/gnus-picon.el lisp/gnus/gnus-start.el lisp/gnus/gnus-sum.el lisp/gnus/gnus.el lisp/gnus/message.el lisp/gnus/nnfolder.el lisp/gnus/nnmh.el lisp/hm--html-menus/hm--html-keys.el lisp/hm--html-menus/hm--html-menu.el lisp/hm--html-menus/hm--html.el lisp/modes/icon.el lisp/modes/verilog-mode.el lisp/modes/vrml-mode.el lisp/mule/mule-files.el lisp/packages/crypt.el lisp/packages/etags.el lisp/packages/filladapt.el lisp/packages/igrep.el lisp/packages/jka-compr.el lisp/pcl-cvs/ChangeLog lisp/pcl-cvs/pcl-cvs.el lisp/prim/about.el lisp/prim/auto-autoloads.el lisp/prim/cus-start.el lisp/prim/custom-load.el lisp/prim/featurep.el lisp/prim/files-nomule.el lisp/prim/fill.el lisp/prim/isearch-mode.el lisp/prim/obsolete.el lisp/prim/simple.el lisp/tm/tm-vm.el lisp/version.el man/ChangeLog man/gnus.texi man/lispref/annotations.texi man/lispref/files.texi man/message.texi src/ChangeLog src/buffer.c src/cmds.c src/event-stream.c src/frame.c src/lread.c src/redisplay.c
diffstat 59 files changed, 1273 insertions(+), 851 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES-beta	Mon Aug 13 09:32:45 2007 +0200
+++ b/CHANGES-beta	Mon Aug 13 09:33:18 2007 +0200
@@ -1,5 +1,17 @@
 							-*- indented-text -*-
+to 20.2 beta5
+-- Interface Changes:
+   `allow-deletion-of-last-visible-frame' becomes a boolean
+   `delete-auto-save-files' becomes a boolean
+-- Miscellaneous Customization cleanup from Hrvoje Niksic
+-- Miscellaneous Egg fixes from Jareth Hein
+-- Gnus-5.4.51
+-- etags.c-11.86
+-- Byte compiler optimization backed out for release
+-- Miscellaneous bug fixes
+
 to 20.2 beta4
+-- 1+ Byte compiler optimization courtesy of Jamie Zawinski
 -- Miscellaneous Mule/ Egg/Quail patches courtesy of Jareth Hein
 -- featurep reader macro code introduced and enabled for this beta only.
 -- Do not default with-xim to Motif if Motif libraries are availble
--- a/ChangeLog	Mon Aug 13 09:32:45 2007 +0200
+++ b/ChangeLog	Mon Aug 13 09:33:18 2007 +0200
@@ -1,3 +1,7 @@
+Thu May  8 20:22:34 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* XEmacs 20.2-b5 is released.
+
 Fri May  2 16:50:02 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* XEmacs 20.2-b4 is released.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/sgml/README.cdtd	Mon Aug 13 09:33:18 2007 +0200
@@ -0,0 +1,6 @@
+The compiled dtd's are currently built by hand.  Currently, something like
+the following will work:
+
+../../src/xemacs -batch -q -l psgml-parse.elc -l psgml-dtd.elc -eval "(progn (sgml-set-global) (setq sgml-no-elements 0) (sgml-compile-dtd \"$(pwd)/html.dtd\" \"$(pwd)/cdtd/html\" []))"
+
+Note that the parameters are taken roughly from the ECAT file.
Binary file etc/sgml/cdtd/html has changed
--- a/lib-src/etags.c	Mon Aug 13 09:32:45 2007 +0200
+++ b/lib-src/etags.c	Mon Aug 13 09:33:18 2007 +0200
@@ -31,7 +31,7 @@
  *	Francesco Potorti` (F.Potorti@cnuce.cnr.it) is the current maintainer.
  */
 
-char pot_etags_version[] = "@(#) pot revision number is 11.83";
+char pot_etags_version[] = "@(#) pot revision number is 11.86";
 
 #define	TRUE	1
 #define	FALSE	0
@@ -40,6 +40,10 @@
 # define DEBUG FALSE
 #endif
 
+#ifndef TeX_named_tokens
+# define TeX_named_tokens FALSE
+#endif
+
 #ifdef MSDOS
 # include <string.h>
 # include <fcntl.h>
@@ -54,11 +58,6 @@
 # define MAXPATHLEN _MAX_PATH
 #endif
 
-#if !defined (MSDOS) && !defined (WINDOWSNT) && defined (STDC_HEADERS)
-#include <stdlib.h>
-#include <string.h>
-#endif
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
   /* On some systems, Emacs defines static as nothing for the sake
@@ -66,6 +65,11 @@
 # undef static
 #endif
 
+#if !defined (MSDOS) && !defined (WINDOWSNT) && defined (STDC_HEADERS)
+#include <stdlib.h>
+#include <string.h>
+#endif
+
 #include <stdio.h>
 #include <ctype.h>
 #include <errno.h>
@@ -134,7 +138,13 @@
  *
  * SYNOPSIS:	Type *xnew (int n, Type);
  */
-#define xnew(n,Type)	((Type *) xmalloc ((n) * sizeof (Type)))
+#ifdef chkmalloc
+# include "chkmalloc.h"
+# define xnew(n,Type)	((Type *) trace_xmalloc (__FILE__, __LINE__, \
+						 (n) * sizeof (Type)))
+#else
+# define xnew(n,Type)	((Type *) xmalloc ((n) * sizeof (Type)))
+#endif
 
 typedef int logical;
 
@@ -239,10 +249,13 @@
  * A `struct linebuffer' is a structure which holds a line of text.
  * `readline' reads a line from a stream into a linebuffer and works
  * regardless of the length of the line.
+ * SIZE is the size of BUFFER, LEN is the length of the string in
+ * BUFFER after readline reads it.
  */
 struct linebuffer
 {
   long size;
+  int len;
   char *buffer;
 };
 
@@ -680,7 +693,7 @@
 system (cmd)
      char *cmd;
 {
-  fprintf (stderr, "system() function not implemented under VMS\n");
+  error ("%s", "system() function not implemented under VMS");
 }
 #endif
 
@@ -709,11 +722,11 @@
      char *argv[];
 {
   int i;
-  unsigned int nincluded_files = 0;
-  char **included_files = xnew (argc, char *);
+  unsigned int nincluded_files;
+  char **included_files;
   char *this_file;
   argument *argbuffer;
-  int current_arg = 0, file_count = 0;
+  int current_arg, file_count;
   struct linebuffer filename_lb;
 #ifdef VMS
   logical got_err;
@@ -724,6 +737,10 @@
 #endif /* DOS_NT */
 
   progname = argv[0];
+  nincluded_files = 0;
+  included_files = xnew (argc, char *);
+  current_arg = 0;
+  file_count = 0;
 
   /* Allocate enough no matter what happens.  Overkill, but each one
      is small. */
@@ -781,8 +798,7 @@
 	case 'o':
 	  if (tagfile)
 	    {
-	      fprintf (stderr, "%s: -%c option may only be given once.\n",
-		       progname, opt);
+	      error ("-%c option may only be given once.", opt);
 	      suggest_asking_for_help ();
 	    }
 	  tagfile = optarg;
@@ -859,7 +875,7 @@
 
   if (nincluded_files == 0 && file_count == 0)
     {
-      fprintf (stderr, "%s: No input files specified.\n", progname);
+      error ("%s", "No input files specified.");
       suggest_asking_for_help ();
     }
 
@@ -1009,8 +1025,7 @@
 	  return lang->function;
       }
 
-  fprintf (stderr, "%s: language \"%s\" not recognized.\n",
-	   progname, optarg);
+  error ("language \"%s\" not recognized.", optarg);
   suggest_asking_for_help ();
 
   /* This point should never be reached.  The function should either
@@ -1085,12 +1100,12 @@
 
   if (stat (file, &stat_buf) == 0 && !S_ISREG (stat_buf.st_mode))
     {
-      fprintf (stderr, "Skipping %s: it is not a regular file.\n", file);
+      error ("Skipping %s: it is not a regular file.", file);
       return;
     }
   if (streq (file, tagfile) && !streq (tagfile, "-"))
     {
-      fprintf (stderr, "Skipping inclusion of %s in self.\n", file);
+      error ("Skipping inclusion of %s in self.", file);
       return;
     }
   inf = fopen (file, "r");
@@ -1198,7 +1213,8 @@
     }
 
   /* Look for sharp-bang as the first two characters. */
-  if (readline_internal (&lb, inf) > 2
+  if (readline_internal (&lb, inf)
+      && lb.len >= 2
       && lb.buffer[0] == '#'
       && lb.buffer[1] == '!')
     {
@@ -3106,7 +3122,7 @@
 	    continue;
 
 	  /* save all values for later tagging */
-	  grow_linebuffer (&tline, strlen (lb.buffer) + 1);
+	  grow_linebuffer (&tline, lb.len + 1);
 	  strcpy (tline.buffer, lb.buffer);
 	  save_lineno = lineno;
 	  save_lcno = linecharno;
@@ -3333,9 +3349,7 @@
 void TEX_mode ();
 struct TEX_tabent *TEX_decode_env ();
 int TEX_Token ();
-#if TeX_named_tokens
-void TEX_getit ();
-#endif
+static void TEX_getit ();
 
 char TEX_esc = '\\';
 char TEX_opgrp = '{';
@@ -3379,10 +3393,9 @@
 	  if (0 <= i)
 	    {
 	      pfnote ((char *)NULL, TRUE,
-		      lb.buffer, strlen (lb.buffer), lineno, linecharno);
-#if TeX_named_tokens
-	      TEX_getit (lasthit, TEX_toktab[i].len);
-#endif
+		      lb.buffer, lb.len, lineno, linecharno);
+	      if (TeX_named_tokens)
+		TEX_getit (lasthit, TEX_toktab[i].len);
 	      break;		/* We only save a line once */
 	    }
 	}
@@ -3477,11 +3490,10 @@
   return tab;
 }
 
-#if TeX_named_tokens
 /* Record a tag defined by a TeX command of length LEN and starting at NAME.
    The name being defined actually starts at (NAME + LEN + 1).
    But we seem to include the TeX command in the tag name.  */
-void
+static void
 TEX_getit (name, len)
      char *name;
      int len;
@@ -3495,9 +3507,8 @@
   while (*p && *p != TEX_clgrp)
     p++;
   pfnote (savenstr (name, p-name), TRUE,
-	  lb.buffer, strlen (lb.buffer), lineno, linecharno);
+	  lb.buffer, lb.len, lineno, linecharno);
 }
-#endif
 
 /* If the text at CP matches one of the tag-defining TeX command names,
    return the pointer to the first occurrence of that command in TEX_toktab.
@@ -4007,6 +4018,7 @@
   patbuf->buffer = NULL;
   patbuf->allocated = 0;
 
+  re_syntax_options = RE_INTERVALS;
   err = re_compile_pattern (regexp_pattern, strlen (regexp_pattern), patbuf);
   if (err != NULL)
     {
@@ -4035,52 +4047,45 @@
      char *in, *out;
      struct re_registers *regs;
 {
-  char *result = NULL, *t;
-  int size = 0;
-
-  /* Pass 1: figure out how much size to allocate. */
-  for (t = out; *t; ++t)
-    {
-      if (*t == '\\')
-	{
-	  ++t;
-	  if (!*t)
-	    {
-	      fprintf (stderr, "%s: pattern substitution ends prematurely\n",
-		       progname);
-	      return NULL;
-	    }
-	  if (isdigit (*t))
-	    {
-	      int dig = *t - '0';
-	      size += regs->end[dig] - regs->start[dig];
-	    }
-	}
-    }
+  char *result, *t;
+  int size, dig, diglen;
+
+  result = NULL;
+  size = strlen (out);
+
+  /* Pass 1: figure out how much to allocate by finding all \N strings. */
+  if (out[size - 1] == '\\')
+    fatal ("pattern error in \"%s\"", out);
+  for (t = etags_strchr (out, '\\');
+       t != NULL;
+       t = etags_strchr (t + 2, '\\'))
+    if (isdigit (t[1]))
+      {
+	dig = t[1] - '0';
+	diglen = regs->end[dig] - regs->start[dig];
+	size += diglen - 2;
+      }
+    else
+      size -= 1;
 
   /* Allocate space and do the substitutions. */
   result = xnew (size + 1, char);
-  size = 0;
-  for (; *out; ++out)
-    {
-      if (*out == '\\')
-	{
-	  ++out;
-	  if (isdigit (*out))
-	    {
-	      /* Using "dig2" satisfies my debugger.  Bleah. */
-	      int dig2 = *out - '0';
-	      strncpy (result + size, in + regs->start[dig2],
-		       regs->end[dig2] - regs->start[dig2]);
-	      size += regs->end[dig2] - regs->start[dig2];
-	    }
-	  else
-	    result[size++] = *out;
-	}
-      else
-	result[size++] = *out;
-    }
-  result[size] = '\0';
+
+  for (t = result; *out != '\0'; out++)
+    if (*out == '\\' && isdigit (*++out))
+      {
+	/* Using "dig2" satisfies my debugger.  Bleah. */
+	dig = *out - '0';
+	diglen = regs->end[dig] - regs->start[dig];
+	strncpy (t, in + regs->start[dig], diglen);
+	t += diglen;
+      }
+    else
+      *t++ = *out;
+  *t = '\0';
+
+  if (DEBUG && (t > result + size || t - result != strlen (result)))
+    abort ();
 
   return result;
 }
@@ -4133,7 +4138,7 @@
 	{
 	  if (p > buffer && p[-1] == '\r')
 	    {
-	      *--p = '\0';
+	      p -= 1;
 #ifdef DOS_NT
 	     /* Assume CRLF->LF translation will be performed by Emacs
 		when loading this file, so CRs won't appear in the buffer.
@@ -4147,20 +4152,21 @@
 	    }
 	  else
 	    {
-	      *p = '\0';
 	      chars_deleted = 1;
 	    }
+	  *p = '\0';
 	  break;
 	}
       *p++ = c;
     }
-
-  return p - buffer + chars_deleted;
+  linebuffer->len = p - buffer;
+
+  return linebuffer->len + chars_deleted;
 }
 
 /*
- * Like readline_internal, above, but try to match the input
- * line against any existing regular expressions.
+ * Like readline_internal, above, but in addition try to match the
+ * input line against any existing regular expressions.
  */
 long
 readline (linebuffer, stream)
@@ -4173,46 +4179,47 @@
   int i;
 
   /* Match against all listed patterns. */
-  for (i = 0; i < num_patterns; ++i)
-    {
-      int match = re_match (patterns[i].pattern, linebuffer->buffer,
-			    (int)result, 0, &patterns[i].regs);
-      switch (match)
-	{
-	case -2:
-	  /* Some error. */
-	  if (!patterns[i].error_signaled)
-	    {
-	      error ("error while matching pattern %d", i);
-	      patterns[i].error_signaled = TRUE;
-	    }
-	  break;
-	case -1:
-	  /* No match. */
-	  break;
-	default:
-	  /* Match occurred.  Construct a tag. */
-	  if (patterns[i].name_pattern[0] != '\0')
-	    {
-	      /* Make a named tag. */
-	      char *name = substitute (linebuffer->buffer,
-				       patterns[i].name_pattern,
-				       &patterns[i].regs);
-	      if (name != NULL)
-		pfnote (name, TRUE,
+  if (linebuffer->len > 0)
+    for (i = 0; i < num_patterns; ++i)
+      {
+	int match = re_match (patterns[i].pattern, linebuffer->buffer,
+			      linebuffer->len, 0, &patterns[i].regs);
+	switch (match)
+	  {
+	  case -2:
+	    /* Some error. */
+	    if (!patterns[i].error_signaled)
+	      {
+		error ("error while matching pattern %d", i);
+		patterns[i].error_signaled = TRUE;
+	      }
+	    break;
+	  case -1:
+	    /* No match. */
+	    break;
+	  default:
+	    /* Match occurred.  Construct a tag. */
+	    if (patterns[i].name_pattern[0] != '\0')
+	      {
+		/* Make a named tag. */
+		char *name = substitute (linebuffer->buffer,
+					 patterns[i].name_pattern,
+					 &patterns[i].regs);
+		if (name != NULL)
+		  pfnote (name, TRUE,
+			  linebuffer->buffer, match, lineno, linecharno);
+	      }
+	    else
+	      {
+		/* Make an unnamed tag. */
+		pfnote ((char *)NULL, TRUE,
 			linebuffer->buffer, match, lineno, linecharno);
-	    }
-	  else
-	    {
-	      /* Make an unnamed tag. */
-	      pfnote ((char *)NULL, TRUE,
-		      linebuffer->buffer, match, lineno, linecharno);
-	    }
-	  break;
-	}
-    }
+	      }
+	    break;
+	  }
+      }
 #endif /* ETAGS_REGEXPS */
-
+  
   return result;
 }
 
@@ -4370,6 +4377,7 @@
       if (errno != ERANGE)
 	pfatal ("getcwd");
       bufsize *= 2;
+      free (path);
       path = xnew (bufsize, char);
     }
 
--- a/lisp/ChangeLog	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/ChangeLog	Mon Aug 13 09:33:18 2007 +0200
@@ -1,3 +1,43 @@
+Thu May  8 14:35:34 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* hm--html-menus/hm--html.el: Define obsolete aliases for the
+	previous function spellings.
+0
+	* hm--html-menus/hm--html-keys.el: Define obsolete aliases for the 
+	previous variable spellings.
+
+	* prim/obsolete.el (define-obsolete-variable-alias): Fix docstring 
+	spelling.
+	(define-compatible-variable-alias): Ditto.
+
+	* tm/tm-vm.el (vm-unsaved-message): Symbol doesn't exist any
+	more.
+
+Tue May  6 21:33:19 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* mule/mule-files.el (write-region): Correct docstring.
+
+	* prim/files-nomule.el (write-region): Correct docstring.
+
+Mon May  5 12:26:41 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* prim/about.el (about-xemacs-xref): Infodock Associates is now
+	Altrasoft.
+
+Sat May  3 16:32:47 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* efs/dired.el (dired-chown-program): chown program is in /bin on
+	Linux.
+
+Fri May  2 20:04:35 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* egg/egg.el: paren.el needed at bytecompile time for
+	`pos-visible-in-window-safe' defsubst.
+
+	* pcl-cvs/pcl-cvs.el (cvs-update): Inhibit dialog box usage in
+	call to cvs-do-update as this bombs when this function is invoked
+	from a menu.
+
 Wed Apr 30 18:06:35 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* prim/loadup.el: Put features.elc in the dump list.
--- a/lisp/bytecomp/byte-optimize.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/bytecomp/byte-optimize.el	Mon Aug 13 09:33:18 2007 +0200
@@ -649,10 +649,8 @@
 ;;      (byte-optimize-two-args-right form)
 ;;      form))
 
-;; jwz: (byte-optimize-approx-equal 0.0 0.0) was returning nil
-;; in xemacs 19.15 because it used < instead of <=.
 (defun byte-optimize-approx-equal (x y)
-  (<= (* (abs (- x y)) 100) (abs (+ x y))))
+  (< (* (abs (- x y)) 100) (abs (+ x y))))
 
 ;; Collect all the constants from FORM, after the STARTth arg,
 ;; and apply FUN to them to make one argument at the end.
@@ -699,22 +697,6 @@
 	 (condition-case ()
 	     (eval form)
 	   (error form)))
-
-	;; `add1' and `sub1' are a marginally fewer instructions
-	;; than `plus' and `minus', so use them when possible.
-	((and (null (nthcdr 3 form))
-	      (eq (nth 2 form) 1))
-	 (list '1+ (nth 1 form)))	; (+ x 1)  -->  (1+ x)
-	((and (null (nthcdr 3 form))
-	      (eq (nth 1 form) 1))
-	 (list '1+ (nth 2 form)))	; (+ 1 x)  -->  (1+ x)
-	((and (null (nthcdr 3 form))
-	      (eq (nth 2 form) -1))
-	 (list '1- (nth 1 form)))	; (+ x -1)  -->  (1- x)
-	((and (null (nthcdr 3 form))
-	      (eq (nth 1 form) -1))
-	 (list '1- (nth 2 form)))	; (+ -1 x)  -->  (1- x)
-
 ;;; It is not safe to delete the function entirely
 ;;; (actually, it would be safe if we know the sole arg
 ;;; is not a marker).
@@ -735,7 +717,6 @@
 		(numberp last))
 	   (setq form (nconc (list '- (- (nth 1 form) last) (nth 2 form))
 			     (delq last (copy-sequence (nthcdr 3 form))))))))
-  (setq form
 ;;; It is not safe to delete the function entirely
 ;;; (actually, it would be safe if we know the sole arg
 ;;; is not a marker).
@@ -747,18 +728,6 @@
 	 (cons (car form) (cdr (cdr form)))
        form))
 ;;;    )
-    )
-
-  ;; `add1' and `sub1' are a marginally fewer instructions than `plus'
-  ;; and `minus', so use them when possible.
-  (cond ((and (null (nthcdr 3 form))
-	      (eq (nth 2 form) 1))
-	 (list '1- (nth 1 form)))	; (- x 1)  -->  (1- x)
-	((and (null (nthcdr 3 form))
-	      (eq (nth 2 form) -1))
-	 (list '1+ (nth 1 form)))	; (- x -1)  -->  (1+ x)
-	(t
-	 form))
   )
 
 (defun byte-optimize-multiply (form)
--- a/lisp/efs/dired.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/efs/dired.el	Mon Aug 13 09:33:18 2007 +0200
@@ -221,7 +221,7 @@
 
 ;;;###autoload
 (defvar dired-chown-program
-  (if (memq system-type '(hpux dgux usg-unix-v)) "chown" "/etc/chown")
+  (if (memq system-type '(hpux dgux usg-unix-v linux)) "chown" "/etc/chown")
   "*Name of chown command (usually `chown' or `/etc/chown').")
 
 ;;;###autoload
--- a/lisp/egg/egg.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/egg/egg.el	Mon Aug 13 09:33:18 2007 +0200
@@ -405,12 +405,13 @@
   (let ((event (make-event))
 	(ch nil))
     (next-command-event event)
-    (if (and (key-press-event-p event)
-	     (eq 0 (event-modifier-bits event)))
-	(setq ch (event-key event))
-      (if (eq 1 (event-modifier-bits event))
-	  (setq ch (int-to-char (- (char-to-int (event-key event)) 96)))
-	(setq unread-command-events (list event))))
+    (if (key-press-event-p event)
+	(if (eq 0 (event-modifier-bits event))
+	    (setq ch (event-key event))
+	  (if (eq 1 (event-modifier-bits event))
+	      (setq ch (int-to-char (- (char-to-int (event-key event)) 96)))
+	    (setq unread-command-events (list event))))
+      (setq unread-command-events (list event)))
     ch))
 
 (eval-when-compile (require 'egg-jsymbol))
@@ -599,9 +600,6 @@
 	(minibuffer (window-buffer (minibuffer-window)))
 	value)
     (save-window-excursion
-      (if (fboundp 'redirect-frame-focus)
-	  (redirect-frame-focus (selected-frame)
-				(window-frame (minibuffer-window))))
       (set-window-buffer (minibuffer-window) menubuffer)
       (select-window (minibuffer-window))
       (set-buffer menubuffer)
@@ -1628,15 +1626,19 @@
   (and (characterp ch) (<= ch 127)
        (eq (lookup-key fence-mode-map (char-to-string ch)) 'fence-backward-delete-char)))
     
+(defvar egg:fence-buffer nil "Buffer fence is active in")
+
 (defun fence-self-insert-command ()
   (interactive)
-  (let ((ch (event-to-character last-command-event)))
-    (cond((or (not egg:*input-mode*)
-	      (null (get-next-map its:*current-map* ch)))
-	  (insert ch))
-	 (t
-	  (insert ch)
-	  (its:translate-region (1- (point)) (point) t)))))
+  (if (not (eq (current-buffer) egg:fence-buffer))
+      nil	;; #### This is to bandaid a deep event-handling bug
+    (let ((ch (event-to-character last-command-event)))
+      (cond((or (not egg:*input-mode*)
+		(null (get-next-map its:*current-map* ch)))
+	    (insert ch))
+	   (t
+	    (insert ch)
+	    (its:translate-region (1- (point)) (point) t))))))
 
 ;;;
 ;;; its: completing-read system
@@ -2082,8 +2084,6 @@
 (make-variable-buffer-local 'egg:*in-fence-mode*)
 (set-default 'egg:*in-fence-mode* nil)
 
-(defvar egg:fence-buffer nil "Buffer fence is active in")
-
 ;;(load-library "its-dump/roma-kana")         ;;;(define-its-mode "roma-kana"        " a$B$"(B")
 ;;(load-library "its-dump/roma-kata")         ;;;(define-its-mode "roma-kata"        " a$B%"(B")
 ;;(load-library "its-dump/downcase")          ;;;(define-its-mode "downcase"         " a a")
@@ -2583,7 +2583,7 @@
   (set-marker egg:*region-end* egg:*region-start*)
   (egg:fence-face-on)
   (goto-char egg:*region-start*)
-  (add-hook 'pre-command-hook 'fence-pre-command-hook)
+  (add-hook 'post-command-hook 'fence-post-command-hook)
   )
 
 (defun henkan-fence-region-or-single-space ()
@@ -2645,7 +2645,7 @@
 
 (defun egg:exit-if-empty-region ()
   (if (= egg:*region-start* egg:*region-end*)
-      (fence-exit-mode)))
+      (fence-exit-internal)))
 
 (defun fence-delete-char ()
   (interactive)
@@ -2670,6 +2670,9 @@
 
 (defun fence-exit-mode ()
   (interactive)
+  (fence-exit-internal))
+
+(defun fence-exit-internal ()
   (delete-region (- egg:*region-start* (length egg:*fence-open*)) egg:*region-start*)
   (delete-region egg:*region-end* (+ egg:*region-end* (length egg:*fence-close*)))
   (egg:fence-face-off)
@@ -2692,7 +2695,7 @@
 (defun egg:quit-egg-mode ()
   ;;;(use-global-map egg:*global-map-backup*)
   (use-local-map egg:*local-map-backup*)
-  (remove-hook 'pre-command-hook 'fence-pre-command-hook)
+  (remove-hook 'post-command-hook 'fence-post-command-hook)
   (setq egg:*in-fence-mode* nil)
   (egg:mode-line-display)
   (if overwrite-mode
@@ -2715,25 +2718,18 @@
   )
 
 (defun fence-cancel-input ()
+  "Cancel all fence operations in the current buffer"
   (interactive)
+  (fence-kill-operation))
+
+(defun fence-kill-operation ()
+  "Internal method to remove fences"
   (delete-region egg:*region-start* egg:*region-end*)
-  (fence-exit-mode))
-
-(defun fence-mouse-protect ()
-  "Cancel entry in progress if mouse events occur."
-  (if egg:*in-fence-mode*
-      (save-excursion
-	(its:reset-input)
-	(fence-cancel-input))))
-
-(if (boundp 'mouse-track-cleanup-hook)
-    (add-hook 'mouse-track-cleanup-hook 'fence-mouse-protect))
-
-(defun fence-pre-command-hook ()
-  ;; cribbed off of isearch-mode
-  ;;
-  ;; For use as the value of `pre-command-hook' when fence is active.
-  ;; If the command about to be executed is not ours,
+  (fence-exit-internal))
+
+(defun fence-post-command-hook ()
+  ;; For use as the value of `post-command-hook' when fence is active.
+  ;; If we got out of the region specified by the fence,
   ;; kill the fence before that command is executed.
   ;;
   (cond ((not (eq (current-buffer) egg:fence-buffer))
@@ -2745,26 +2741,19 @@
 	 (save-excursion
 	   (set-buffer egg:fence-buffer)
 	   (its:reset-input)
-	   (fence-cancel-input)))
-	((not (and this-command
-		   (symbolp this-command)
-		   (get this-command 'egg-fence-command)))
-	 (its:reset-input)
-	 (fence-cancel-input))
-	(t
-	 (if (or (not (pos-visible-in-window-safe
-		       (marker-position egg:*region-start*)))
-		 (not (pos-visible-in-window-safe
-		       (marker-position egg:*region-end*))))
-	     (recenter))))
-  )
+	   (fence-kill-operation)))
+	((or (< (point) egg:*region-start*)
+	     (> (point) egg:*region-end*))
+	 (save-excursion
+	   (its:reset-input)
+	   (fence-kill-operation)))))
 
 (defun egg-lang-switch-callback ()
   "Do whatever processing is necessary when the language-environment changes."
   (if egg:*in-fence-mode*
       (progn
 	(its:reset-input)
-	(fence-cancel-input)))
+	(fence-kill-operation)))
   (let ((func (get current-language-environment 'set-egg-environ)))
     (if (not (null func))
       (funcall func)))
@@ -2823,119 +2812,6 @@
 (define-key fence-mode-map [right] 'fence-forward-char)
 (define-key fence-mode-map [left] 'fence-backward-char)
 
-(put 'fence-self-insert-command 'egg-fence-command t)
-(put 'fence-hiragana 'egg-fence-command t)
-(put 'fence-katakana 'egg-fence-command t)
-(put 'fence-hankaku 'egg-fence-command t)
-(put 'fence-zenkaku 'egg-fence-command t)
-(put 'its:select-hiragana 'egg-fence-command t)
-(put 'its:select-katakana 'egg-fence-command t)
-(put 'its:select-downcase 'egg-fence-command t)
-(put 'its:select-upcase 'egg-fence-command t)
-(put 'its:select-zenkaku-downcase 'egg-fence-command t)
-(put 'its:select-zenkaku-upcase 'egg-fence-command t)
-(put 'its:minibuffer-completion-help 'egg-fence-command t)
-(put 'henkan-fence-region-or-single-space 'egg-fence-command t)
-(put 'henkan-fence-region 'egg-fence-command t)
-(put 'fence-beginning-of-line 'egg-fence-command t)
-(put 'fence-backward-char 'egg-fence-command t)
-(put 'fence-cancel-input 'egg-fence-command t)
-(put 'fence-delete-char 'egg-fence-command t)
-(put 'fence-end-of-line 'egg-fence-command t)
-(put 'fence-forward-char 'egg-fence-command t)
-(put 'fence-cancel-input 'egg-fence-command t)
-(put 'fence-mode-help-command 'egg-fence-command t)
-(put 'fence-kill-line 'egg-fence-command t)
-(put 'fence-exit-mode 'egg-fence-command t)
-(put 'fence-exit-mode 'egg-fence-command t)
-(put 'fence-exit-mode 'egg-fence-command t)
-(put 'its:select-previous-mode 'egg-fence-command t)
-(put 'fence-transpose-chars 'egg-fence-command t)
-(put 'eval-expression 'egg-fence-command t)
-(put 'fence-toggle-egg-mode 'egg-fence-command t)
-(put 'jis-code-input 'egg-fence-command t)
-(put 'fence-backward-delete-char 'egg-fence-command t)
-(put 'fence-backward-delete-char 'egg-fence-command t)
-(put 'fence-backward-delete-char 'egg-fence-command t)
-(put 'fence-forward-char 'egg-fence-command t)
-(put 'fence-backward-char 'egg-fence-command t)
-(put 'hiragana-region 'egg-fence-command t)
-(put 'hiragana-paragraph 'egg-fence-command t)
-(put 'hiragana-sentance 'egg-fence-command t)
-(put 'katakana-region 'egg-fence-command t)
-(put 'katakana-paragraph 'egg-fence-command t)
-(put 'katakana-sentance 'egg-fence-command t)
-(put 'hankaku-region 'egg-fence-command t)
-(put 'hankaku-paragraph 'egg-fence-command t)
-(put 'hankaku-sentance 'egg-fence-command t)
-(put 'hankaku-word 'egg-fence-command t)
-(put 'zenkaku-region 'egg-fence-command t)
-(put 'zenkaku-paragraph 'egg-fence-command t)
-(put 'zenkaku-sentance 'egg-fence-command t)
-(put 'zenkaku-word 'egg-fence-command t)
-(put 'roma-kana-region 'egg-fence-command t)
-(put 'roma-kana-paragraph 'egg-fence-command t)
-(put 'roma-kana-sentance 'egg-fence-command t)
-(put 'roma-kana-word 'egg-fence-command t)
-(put 'roma-kanji-region 'egg-fence-command t)
-(put 'roma-kanji-paragraph 'egg-fence-command t)
-(put 'roma-kanji-sentance 'egg-fence-command t)
-(put 'roma-kanji-word 'egg-fence-command t)
-(put 'its:select-mode 'egg-fence-command t)
-(put 'its:select-mode-from-menu 'egg-fence-command t)
-(put 'its:next-mode 'egg-fence-command t)
-(put 'its:previous-mode 'egg-fence-command t)
-(put 'its:select-hiragana 'egg-fence-command t)
-(put 'its:select-katakana 'egg-fence-command t)
-(put 'its:select-downcase 'egg-fence-command t)
-(put 'its:select-upcase   'egg-fence-command t)
-(put 'its:select-zenkaku-downcase 'egg-fence-command t)
-(put 'its:select-zenkaku-upcase   'egg-fence-command t)
-(put 'its:select-mode-temporally 'egg-fence-command t)
-(put 'its:select-previous-mode 'egg-fence-command t)
-(put 'fence-toggle-egg-mode 'egg-fence-command t)
-(put 'fence-transpose-chars 'egg-fence-command t)
-(put 'henkan-region 'egg-fence-command t)
-(put 'henkan-paragraph 'egg-fence-command t)
-(put 'henkan-sentance 'egg-fence-command t)
-(put 'henkan-word 'egg-fence-command t)
-(put 'henkan-kakutei 'egg-fence-command t)
-(put 'gyaku-henkan-region 'egg-fence-command t)
-(put 'gyaku-henkan-sentance 'egg-fence-command t)
-(put 'gyaku-henkan-word 'egg-fence-command t)
-(put 'gyaku-henkan-kakutei 'egg-fence-command t)
-(put 'henkan-kakutei-first-char 'egg-fence-command t)
-(put 'henkan-kakutei-before-point 'egg-fence-command t)
-(put 'sai-henkan 'egg-fence-command t)
-(put 'henkan-forward-bunsetu 'egg-fence-command t)
-(put 'henkan-backward-bunsetu 'egg-fence-command t)
-(put 'henkan-first-bunsetu 'egg-fence-command t)
-(put 'henkan-last-bunsetu 'egg-fence-command t)
-(put 'henkan-hiragana 'egg-fence-command t)
-(put 'henkan-katakana 'egg-fence-command t)
-(put 'henkan-next-kouho 'egg-fence-command t)
-(put 'henkan-next-kouho-dai 'egg-fence-command t)
-(put 'henkan-next-kouho-sho 'egg-fence-command t)
-(put 'henkan-previous-kouho 'egg-fence-command t)
-(put 'henkan-previous-kouho-dai 'egg-fence-command t)
-(put 'henkan-previous-kouho-sho 'egg-fence-command t)
-(put 'henkan-bunsetu-chijime-dai 'egg-fence-command t)
-(put 'henkan-bunsetu-chijime-sho 'egg-fence-command t)
-(put 'henkan-bunsetu-nobasi-dai 'egg-fence-command t)
-(put 'henkan-bunsetu-nobasi-sho 'egg-fence-command t)
-(put 'henkan-saishou-bunsetu 'egg-fence-command t)
-(put 'henkan-saichou-bunsetu 'egg-fence-command t)
-(put 'henkan-quit 'egg-fence-command t)
-(put 'henkan-select-kouho-dai 'egg-fence-command t)
-(put 'henkan-select-kouho-sho 'egg-fence-command t)
-(put 'henkan-word-off 'egg-fence-command t)
-(put 'henkan-kakutei-and-self-insert 'egg-fence-command t)
-(put 'henkan-help-command 'egg-fence-command t)
-(put 'toroku-region 'egg-fence-command t)
-(put 'toroku-henkan-mode 'egg-fence-command t)
-(put 'recenter 'egg-fence-command t)
-
-
 ;;;----------------------------------------------------------------------
 ;;;
 ;;; Read hiragana from minibuffer
@@ -2995,6 +2871,37 @@
 (autoload 'busyu-input "egg-busyu" nil t)
 (autoload 'kakusuu-input "egg-busyu" nil t)
 
+;; put us into all existing buffer's modelines
+(if (not (featurep 'egg))
+    (mapc-internal
+     (lambda (buf) 
+       (save-excursion
+	 (set-buffer buf)
+	 (setq modeline-format (cons (list 'display-minibuffer-mode-in-minibuffer
+		 ;;; minibuffer mode in minibuffer
+					   (list 
+					    (list 'its:*previous-map* "<" "[")
+					    'mode-line-egg-mode
+					    (list 'its:*previous-map* ">" "]")
+					    )
+		       ;;;; minibuffer mode in mode line
+					   (list 
+					    (list 'minibuffer-window-selected
+						  (list 'display-minibuffer-mode
+							"m"
+							" ")
+						  " ")
+					    (list 'its:*previous-map* "<" "[")
+					    (list 'minibuffer-window-selected
+						  (list 'display-minibuffer-mode
+							'mode-line-egg-mode-in-minibuffer
+							'mode-line-egg-mode)
+						  'mode-line-egg-mode)
+					    (list 'its:*previous-map* ">" "]")
+					    ))
+				     modeline-format))))
+     (buffer-list)))
+
 (provide 'egg)
 
 ;; if set-lang-environment has already been called, call egg-lang-switch-callback
--- a/lisp/games/NeXTify.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/games/NeXTify.el	Mon Aug 13 09:33:18 2007 +0200
@@ -2,7 +2,7 @@
 
 ;; Copyright status unknown
 
-;; Author: Unknown
+;; Author: Jamie Zawinski <jwz@netscape.com>
 ;; Keywords: games
 
 ;; This file is part of XEmacs.
@@ -27,6 +27,7 @@
 ;;; Commentary:
 
 ;;; Code:
+
 (defun SeLF-insert-command (arg)
   "Insert the character you TyPE.
 Whichever character you TyPE to run ThIS command is inserted."
--- a/lisp/gnus/ChangeLog	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/gnus/ChangeLog	Mon Aug 13 09:33:18 2007 +0200
@@ -1,3 +1,98 @@
+Thu May  8 10:53:12 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* gnus-msg.el (gnus-summary-mail-crosspost-complaint):
+	`deactivate-mark' doesn't exist in XEmacs.
+
+Thu May  8 17:37:38 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+	* gnus.el: Gnus v5.4.51 is released.
+
+Thu May  8 15:58:43 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-sum.el (gnus-execute-command): Place point at start of
+	prompt. 
+
+	* gnus-int.el (gnus-request-replace-article): Don't bug out on
+	unknown groups.
+
+	* gnus-sum.el (gnus-summary-update-info): Force undo boundary here.
+	(gnus-update-read-articles): ... and not here.
+
+	* gnus-art.el (article-display-x-face): Would only show one X-Face.
+
+Wed May  7 05:23:20 1997  Kim-Minh Kaplan  <kimminh.kaplan@utopia.eunet.fr>
+
+	* gnus-picon.el: (gnus-picons-url-alist): new variable.
+	(gnus-picons-jobs-alist): new variable.
+	(gnus-picons-remove): clean this new variable. FIXME: race
+	condition.
+	(gnus-picons-job-already-running): new variable.
+	(gnus-article-display-picons): use the job queue if using the
+	network.
+	(gnus-group-display-picons): ditto.
+	(gnus-picons-make-path): function deleted.
+	(gnus-picons-lookup-internal): modified accordingly.
+	(gnus-picons-lookup-user-internal): take the LETs out of the
+	loops.
+	(gnus-picons-lookup-pairs): take constant calculation outside of
+	loop.
+	(gnus-picons-display-picon-or-name): use COND instead of nested IFs
+	(gnus-picons-display-pairs): take the LET outside of loop.
+	(gnus-picons-try-face): ditto.
+	(gnus-picons-users-image-alist): variable deleted.
+	(gnus-picons-clear-cache): don't clear it.
+	(gnus-picons-retrieve-limit): variable deleted.
+	(gnus-picons-url-retrieve): clear url-request-method
+	(gnus-picons-retrieve-user-callback): function deleted.
+	(gnus-picons-retrieve-user): function deleted.
+	(gnus-picons-retrieve-domain-callback): function deleted
+	(gnus-picons-retrieve-domain-internal): function deleted.
+	(gnus-picons-parse-value): new function.
+	(gnus-picons-parse-filenames): new function.
+	(gnus-picons-network-display-internal): new function.
+	(gnus-picons-network-display-callback): new function.
+	(gnus-picons-network-display): new function.
+	(gnus-picons-network-search-internal): new function.
+	(gnus-picons-network-search-callback): new function.
+	(gnus-picons-network-search): new function.
+	(gnus-picons-next-job-internal): new function.
+	(gnus-picons-next-job): new function.
+
+Wed May  7 22:14:32 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-start.el (gnus-setup-news): Don't fold case.
+
+Sat May  3 16:55:25 1997  Kim-Minh Kaplan  <kimminh.kaplan@utopia.eunet.fr>
+
+	* gnus-picon.el: * gnus-picons-clear-cache-on-shutdown: new variable.
+	* gnus-picons-piconsearch-cache-user: variable deleted.
+	* gnus-picons-clear-cache: new function.
+	* gnus-picons-close: only clear cache if
+ 	gnus-picons-clear-cache-on-shutdown.
+	* gnus-picons-url-retrieve: set url-package-name and
+ 	url-package-version.
+	* gnus-picons-users-image-alist: new variable.
+	* gnus-picons-retrieve-user-callback: use it.
+	* Added support for network retrieval of picons.
+	* gnus-picons-map: removed.
+	* gnus-picons-remove: removed case to handle processes.
+	* gnus-picons-processes-alist: new variable
+	* gnus-picons-x-face-sentinel: simplified.  Use processes alist.
+	* gnus-picons-display-x-face: explicitly request an xface image.
+	Always call gnus-picons-prepare-for-annotations.  Use processes
+	alist.
+	* gnus-picons-lookup-internal: new function.
+	* gnus-picons-lookup: use it.
+	* gnus-picons-lookup-user-internal: ditto.
+	* gnus-picons-display-picon-or-name: no more xface-p argument.
+	* gnus-picons-try-suffixes: removed.
+	* gnus-picons-try-face: new function.  Does the caching in
+	gnus-picons-glyph-alist.
+	* gnus-picons-try-to-find-face: take a glyph argument instead of a
+	path.  No more xface-p argument.  Only use one annotation even if
+	gnus-picons-display-as-address.
+	* gnus-picons-toggle-extent: changed into an annotation action.
+
 Sat May  3 00:59:39 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 	* gnus.el: Gnus v5.4.50 is released.
--- a/lisp/gnus/gnus-art.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/gnus/gnus-art.el	Mon Aug 13 09:33:18 2007 +0200
@@ -844,9 +844,9 @@
 		    ;; Has to be present.
 		    (re-search-forward "^X-Face: " nil t))
 	  ;; We now have the area of the buffer where the X-Face is stored.
-	  (let ((beg (point))
-		(end (1- (re-search-forward "^\\($\\|[^ \t]\\)" nil t))))
-	    (save-excursion
+	  (save-excursion
+	    (let ((beg (point))
+		  (end (1- (re-search-forward "^\\($\\|[^ \t]\\)" nil t))))
 	      ;; We display the face.
 	      (if (symbolp gnus-article-x-face-command)
 		  ;; The command is a lisp function, so we call it.
--- a/lisp/gnus/gnus-int.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/gnus/gnus-int.el	Mon Aug 13 09:33:18 2007 +0200
@@ -375,7 +375,7 @@
 	     last)))
 
 (defun gnus-request-replace-article (article group buffer)
-  (let ((func (car (gnus-find-method-for-group group))))
+  (let ((func (car (gnus-group-name-to-method group))))
     (funcall (intern (format "%s-request-replace-article" func))
 	     article (gnus-group-real-name group) buffer)))
 
--- a/lisp/gnus/gnus-msg.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/gnus/gnus-msg.el	Mon Aug 13 09:33:18 2007 +0200
@@ -691,7 +691,8 @@
 	  (message-goto-subject)
 	  (re-search-forward " *$")
 	  (replace-match " (crosspost notification)" t t)
-	  (deactivate-mark)
+	  (when (fboundp 'deactivate-mark)
+	    (deactivate-mark))
 	  (when (gnus-y-or-n-p "Send this complaint? ")
 	    (message-send-and-exit)))))))
 
--- a/lisp/gnus/gnus-picon.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/gnus/gnus-picon.el	Mon Aug 13 09:33:18 2007 +0200
@@ -23,6 +23,9 @@
 
 ;;; Commentary:
 
+;;; TODO:
+;; See the comment in gnus-picons-remove
+
 ;;; Code:
 
 (require 'gnus)
@@ -32,6 +35,8 @@
 (require 'gnus-art)
 (require 'gnus-win)
 
+;;; User variables:
+
 (defgroup picons nil
   "Show pictures of people, domains, and newsgroups (XEmacs).
 For this to work, you must add gnus-group-display-picons to the
@@ -113,34 +118,83 @@
   :type 'boolean
   :group 'picons)
 
-(defvar gnus-picons-map (make-sparse-keymap "gnus-picons-keys")
- "keymap to hide/show picon glyphs")
+(defcustom gnus-picons-clear-cache-on-shutdown t
+  "*Whether to clear the picons cache when exiting gnus.
+Gnus caches every picons it finds while it is running.  This saves
+some time in the search process but eats some memory.  If this
+variable is set to nil, Gnus will never clear the cache itself; you
+will have to manually call `gnus-picons-clear-cache' to clear it.
+Otherwise the cache will be cleared every time you exit Gnus."
+  :type 'boolean
+  :group 'picons)
 
-(define-key gnus-picons-map [(button2)] 'gnus-picons-toggle-extent)
+(defcustom gnus-picons-piconsearch-url nil
+  "*The url to query for picons.  Setting this to nil will disable it.
+The only plublicly available address currently known is
+http://www.cs.indiana.edu:800/piconsearch.  If you know of any other,
+please tell me so that we can list it."
+  :type '(choice (const :tag "Disable" :value nil)
+		 (const :tag "www.cs.indiana.edu"
+			:value "http://www.cs.indiana.edu:800/piconsearch")
+		 (string))
+  :group 'picons)
 
-;;; Internal variables.
+;;; Internal variables:
+
+(defvar gnus-picons-processes-alist nil
+  "Picons processes currently running and their environment.")
+(defvar gnus-picons-glyph-alist nil
+  "Picons glyphs cache.
+List of pairs (KEY . GLYPH) where KEY is either a filename or an URL.")
+(defvar gnus-picons-url-alist nil
+  "Picons file names cache.
+List of pairs (KEY . NAME) where KEY is (USER HOST DBS) and NAME is an URL.")
 
 (defvar gnus-group-annotations nil
   "List of annotations added/removed when selecting/exiting a group")
+(defvar gnus-group-annotations-lock nil)
 (defvar gnus-article-annotations nil
   "List of annotations added/removed when selecting an article")
+(defvar gnus-article-annotations-lock nil)
 (defvar gnus-x-face-annotations nil
-  "List of annotations added/removed when selecting an article with an X-Face.")
+  "List of annotations added/removed when selecting an article with an
+X-Face.")
+(defvar gnus-x-face-annotations-lock nil)
+
+(defvar gnus-picons-jobs-alist nil
+  "List of jobs that still need be done.
+This is a list of (SYM-ANN TAG ARGS...) where SYM-ANN three annotations list,
+TAG is one of `picon' or `search' indicating that the job should query a
+picon or do a search for picons file names, and ARGS is some additionnal
+arguments necessary for the job.")
+
+(defvar gnus-picons-job-already-running nil
+  "Lock to ensure only one stream of http requests is running.")
+
+;;; Functions:
+
+(defsubst gnus-picons-lock (symbol)
+  (intern (concat (symbol-name symbol) "-lock")))
 
 (defun gnus-picons-remove (symbol)
-  "Remove all annotations/processes in variable named SYMBOL.
+  "Remove all annotations in variable named SYMBOL.
 This function is careful to set it to nil before removing anything so that
 asynchronous process don't get crazy."
-  (let ((listitems (symbol-value symbol)))
-    (set symbol nil)
-    (while listitems
-      (let ((item (pop listitems)))
-	(cond ((annotationp item)
-	       (delete-annotation item))
-	      ((processp item)
-	       ;; kill the process, ignore any output.
-	       (set-process-sentinel item (function (lambda (p e))))
-	       (delete-process item)))))))
+  ;; clear the lock
+  (set (gnus-picons-lock symbol) nil)
+  ;; clear all annotations
+  (mapc (function (lambda (item)
+		    (if (annotationp item)
+			(delete-annotation item))))
+	(prog1 (symbol-value symbol)
+	  (set symbol nil)))
+  ;; FIXME: there's a race condition here.  If a job is already
+  ;; running, it has already removed itself from this queue...  But
+  ;; will still display its picon.
+  ;; TODO: push a request to clear an annotation.  Then
+  ;; gnus-picons-next-job will be able to clean up when it gets the
+  ;; hand
+  (setq gnus-picons-jobs-alist (remassq symbol gnus-picons-jobs-alist)))
 
 (defun gnus-picons-remove-all ()
   "Removes all picons from the Gnus display(s)."
@@ -153,13 +207,12 @@
 
 (defun gnus-get-buffer-name (variable)
   "Returns the buffer name associated with the contents of a variable."
-  (cond ((symbolp variable)
-         (let ((newvar (cdr (assq variable gnus-window-to-buffer))))
-           (cond ((symbolp newvar)
-                  (symbol-value newvar))
-                 ((stringp newvar) newvar))))
-        ((stringp variable)
-         variable)))
+  (cond ((symbolp variable) (let ((newvar (cdr (assq variable
+						     gnus-window-to-buffer))))
+			      (cond ((symbolp newvar)
+				     (symbol-value newvar))
+				    ((stringp newvar) newvar))))
+        ((stringp variable) variable)))
 
 (defun gnus-picons-prepare-for-annotations (annotations)
   "Prepare picons buffer for puting annotations memorized in ANNOTATIONS.
@@ -175,7 +228,10 @@
   (if (and (eq gnus-picons-display-where 'article)
 	   gnus-picons-display-article-move-p)
       (when (search-forward "\n\n" nil t)
-	(forward-line -1)))
+	(forward-line -1))
+    (make-local-variable 'inhibit-read-only)
+    (setq buffer-read-only t
+	  inhibit-read-only nil))
   (gnus-picons-remove annotations))
 
 (defun gnus-picons-article-display-x-face ()
@@ -189,22 +245,15 @@
     (gnus-article-display-x-face)))
 
 (defun gnus-picons-x-face-sentinel (process event)
-  ;; don't call gnus-picons-prepare-for-annotations, it would reset
-  ;; gnus-x-face-annotations.
-  (set-buffer (get-buffer-create
-	       (gnus-get-buffer-name gnus-picons-display-where)))
-  (gnus-add-current-to-buffer-list)
-  (goto-char (point-min))
-  (if (and (eq gnus-picons-display-where 'article)
-	   gnus-picons-display-article-move-p)
-      (when (search-forward "\n\n" nil t)
-	(forward-line -1)))
-  ;; If the process is still in the list, insert this icon
-  (let ((myself (member process gnus-x-face-annotations)))
-    (when myself
-      (setcar myself
-	      (make-annotation gnus-picons-x-face-file-name nil 'text))
-      (delete-file gnus-picons-x-face-file-name))))
+  (let* ((env (assq process gnus-picons-processes-alist))
+	 (annot (cdr env)))
+    (setq gnus-picons-processes-alist (remassq process
+					       gnus-picons-processes-alist))
+    (when annot
+      (set-annotation-glyph annot
+			    (make-glyph gnus-picons-x-face-file-name))
+      (if (memq annot gnus-x-face-annotations)
+	  (delete-file gnus-picons-x-face-file-name)))))
 
 (defun gnus-picons-display-x-face (beg end)
   "Function to display the x-face header in the picons window.
@@ -216,17 +265,23 @@
 	(save-excursion
 	  (gnus-picons-prepare-for-annotations 'gnus-x-face-annotations)
 	  (setq gnus-x-face-annotations
-		(cons (make-annotation (concat "X-Face: "
-					       (buffer-substring beg end buf))
+		(cons (make-annotation
+		       (vector 'xface
+			       :data (concat "X-Face: "
+					     (buffer-substring beg end buf)))
 				       nil 'text)
 		      gnus-x-face-annotations))))
     ;; convert the x-face header to a .xbm file
     (let* ((process-connection-type nil)
-	   (process (start-process "gnus-x-face" nil
-				   shell-file-name shell-command-switch
-				   gnus-picons-convert-x-face)))
+	   (annot (save-excursion
+		    (gnus-picons-prepare-for-annotations
+		     'gnus-x-face-annotations)
+		    (make-annotation nil nil 'text)))
+	   (process (start-process-shell-command "gnus-x-face" nil 
+						 gnus-picons-convert-x-face)))
+      (push annot gnus-x-face-annotations)
+      (push (cons process annot) gnus-picons-processes-alist)
       (process-kill-without-query process)
-      (setq gnus-x-face-annotations (list process))
       (set-process-sentinel process 'gnus-picons-x-face-sentinel)
       (process-send-region process beg end)
       (process-send-eof process))))
@@ -238,36 +293,38 @@
     (when (and (featurep 'xpm)
 	       (or (not (fboundp 'device-type)) (equal (device-type) 'x))
 	       (setq from (mail-fetch-field "from"))
-	       (setq from (downcase
-			   (or (cadr (mail-extract-address-components from))
-			       "")))
+	       (setq from (downcase (or (cadr (mail-extract-address-components
+					       from))
+					"")))
 	       (or (setq at-idx (string-match "@" from))
 		   (setq at-idx (length from))))
       (save-excursion
-	(let ((username (substring from 0 at-idx))
+	(let ((username (downcase (substring from 0 at-idx)))
 	      (addrs (if (eq at-idx (length from))
 			 (if gnus-local-domain
-			     (message-tokenize-header gnus-local-domain ".")
-			   nil)
+			     (message-tokenize-header gnus-local-domain "."))
 		       (message-tokenize-header (substring from (1+ at-idx))
 						"."))))
 	  (gnus-picons-prepare-for-annotations 'gnus-article-annotations)
-	  (setq gnus-article-annotations
-		(nconc gnus-article-annotations
-		       ;; look for domain paths.
-		       (gnus-picons-display-pairs
-			(gnus-picons-lookup-pairs addrs
-					       gnus-picons-domain-directories)
-			(not (or gnus-picons-display-as-address
-				 gnus-article-annotations))
-			nil "." t)
-		       ;; add an '@' if displaying as address
-		       (if  (and gnus-picons-display-as-address addrs)
-			 (list (make-annotation "@" nil 'text nil nil nil t)))
-		       ;; then do user directories,
-		       (gnus-picons-display-picon-or-name
-			(gnus-picons-lookup-user (downcase username) addrs)
-			username nil t)))
+	  (if (null gnus-picons-piconsearch-url)
+	      (setq gnus-article-annotations
+		    (nconc gnus-article-annotations
+			   (gnus-picons-display-pairs
+			    (gnus-picons-lookup-pairs
+			     addrs gnus-picons-domain-directories)
+			    (not (or gnus-picons-display-as-address
+				     gnus-article-annotations))
+			    "." t)
+			   (if (and gnus-picons-display-as-address addrs)
+			       (list (make-annotation [string :data "@"] nil
+						      'text nil nil nil t)))
+			   (gnus-picons-display-picon-or-name
+			    (gnus-picons-lookup-user username addrs)
+			    username t)))
+	    (push (list 'gnus-article-annotations 'search username addrs
+			gnus-picons-domain-directories t)
+		  gnus-picons-jobs-alist)
+	    (gnus-picons-next-job))
 
 	  (add-hook 'gnus-summary-exit-hook 'gnus-picons-remove-all))))))
 
@@ -278,59 +335,50 @@
 	     (or (not (fboundp 'device-type)) (equal (device-type) 'x)))
     (save-excursion
       (gnus-picons-prepare-for-annotations 'gnus-group-annotations)
-      (setq gnus-group-annotations
-	    (gnus-picons-display-pairs
-	     (gnus-picons-lookup-pairs (reverse (message-tokenize-header
-					      gnus-newsgroup-name "."))
-				    gnus-picons-news-directory)
-	     t nil "."))
+      (if (null gnus-picons-piconsearch-url)
+	  (setq gnus-group-annotations
+		(gnus-picons-display-pairs
+		 (gnus-picons-lookup-pairs (reverse (message-tokenize-header
+						     gnus-newsgroup-name "."))
+					   gnus-picons-news-directory)
+		 t "."))
+	(push (list 'gnus-group-annotations 'search nil
+		    (message-tokenize-header gnus-newsgroup-name ".")
+		    (if (listp gnus-picons-news-directory)
+			gnus-picons-news-directory
+		      (list gnus-picons-news-directory))
+		    nil)
+	      gnus-picons-jobs-alist)
+	(gnus-picons-next-job))
+
       (add-hook 'gnus-summary-exit-hook 'gnus-picons-remove-all))))
 
-(defun gnus-picons-make-path (dir subdirs)
-  "Make a directory name from a base DIR and a list of SUBDIRS.
-Returns a directory name build by concatenating DIR and all elements of
-SUBDIRS with \"/\" between elements."
-  (while subdirs
-    (setq dir (file-name-as-directory (concat dir (pop subdirs)))))
-  dir)
-
-(defsubst gnus-picons-try-suffixes (file)
-  (let ((suffixes gnus-picons-file-suffixes)
-	f)
-    (while (and suffixes
-		(not (file-exists-p (setq f (concat file (pop suffixes))))))
-      (setq f nil))
-    f))
+(defsubst gnus-picons-lookup-internal (addrs dir)
+  (setq dir (expand-file-name dir gnus-picons-database))
+  (gnus-picons-try-face (dolist (part (reverse addrs) dir)
+			  (setq dir (expand-file-name part dir)))))
 
 (defun gnus-picons-lookup (addrs dirs)
   "Lookup the picon for ADDRS in databases DIRS.
 Returns the picon filename or NIL if none found."
   (let (result)
     (while (and dirs (null result))
-      (setq result
-	    (gnus-picons-try-suffixes
-	     (expand-file-name "face."
-			       (gnus-picons-make-path
-				(file-name-as-directory
-				 (concat
-				  (file-name-as-directory gnus-picons-database)
-				  (pop dirs)))
-				(reverse addrs))))))
+      (setq result (gnus-picons-lookup-internal addrs (pop dirs))))
     result))
 
 (defun gnus-picons-lookup-user-internal (user domains)
   (let ((dirs gnus-picons-user-directories)
-	picon)
+	domains-tmp dir picon)
     (while (and dirs (null picon))
-      (let ((dir (list (pop dirs)))
-	    (domains domains))
-	(while (and domains (null picon))
-	  (setq picon (gnus-picons-lookup (cons user domains) dir))
-	  (pop domains))
-	;; Also make a try MISC subdir
-	(unless picon
-	  (setq picon (gnus-picons-lookup (list user "MISC") dir)))))
-
+      (setq domains-tmp domains
+	    dir (pop dirs))
+      (while (and domains-tmp
+		  (null (setq picon (gnus-picons-lookup-internal
+				     (cons user domains-tmp) dir))))
+	(pop domains-tmp))
+      ;; Also make a try in MISC subdir
+      (unless picon
+	(setq picon (gnus-picons-lookup-internal (list user "MISC") dir))))
     picon))
 
 (defun gnus-picons-lookup-user (user domains)
@@ -345,92 +393,335 @@
 Returns a list of PAIRS whose CAR is the picon filename or NIL if
 none, and whose CDR is the corresponding element of DOMAINS."
   (let (picons)
+    (setq directories (if (listp directories)
+			  directories
+			(list directories)))
     (while domains
-      (push (list (gnus-picons-lookup (cons "unknown" domains)
-				      (if (listp directories)
-					  directories
-					(list directories)))
+      (push (list (gnus-picons-lookup (cons "unknown" domains) directories)
 		  (pop domains))
 	    picons))
     picons))
 
-(defun gnus-picons-display-picon-or-name (picon name &optional xface-p right-p)
-  (if picon
-      (gnus-picons-try-to-find-face picon xface-p name right-p)
-    (list (make-annotation name nil 'text nil nil nil right-p))))
+(defun gnus-picons-display-picon-or-name (picon name &optional right-p)
+  (cond (picon (gnus-picons-display-glyph picon name right-p))
+	(gnus-picons-display-as-address (list (make-annotation
+					       (vector 'string :data name)
+					       nil 'text
+					       nil nil nil right-p)))))
 
-(defun gnus-picons-display-pairs (pairs &optional bar-p xface-p dot-p right-p)
+(defun gnus-picons-display-pairs (pairs &optional bar-p dot-p right-p)
   "Display picons in list PAIRS."
   (let ((bar (and bar-p (or gnus-picons-display-as-address
-			  (annotations-in-region (point)
-						 (min (point-max) (1+ (point)))
-						 (current-buffer)))))
+			    (annotations-in-region (point)
+						   (min (point-max)
+							(1+ (point)))
+						   (current-buffer)))))
 	(domain-p (and gnus-picons-display-as-address dot-p))
-	picons)
+	pair picons)
     (while pairs
-      (let ((pair (pop pairs)))
-	(setq picons (nconc (if (and domain-p picons (not right-p))
-				(list (make-annotation
-				       dot-p nil 'text nil nil nil right-p)))
-			    (gnus-picons-display-picon-or-name (car pair)
-							       (cadr pair)
-							       xface-p
-							       right-p)
-			    (if (and domain-p pairs right-p)
-				(list (make-annotation
-				       dot-p nil 'text nil nil nil right-p)))
-			    (when (and bar domain-p)
-			      (setq bar nil)
-			      (gnus-picons-try-to-find-face
-			       (expand-file-name "bar.xbm"
-						 gnus-xmas-glyph-directory)
-			       nil nil t))
-			    picons))))
+      (setq pair (pop pairs)
+	    picons (nconc (if (and domain-p picons (not right-p))
+			      (list (make-annotation
+				     (vector 'string :data dot-p)
+				     nil 'text nil nil nil right-p)))
+			  (gnus-picons-display-picon-or-name (car pair)
+							     (cadr pair)
+							     right-p)
+			  (if (and domain-p pairs right-p)
+			      (list (make-annotation
+				     (vector 'string :data dot-p)
+				     nil 'text nil nil nil right-p)))
+			  (when (and bar domain-p)
+			    (setq bar nil)
+			    (gnus-picons-display-glyph
+			     (gnus-picons-try-face gnus-xmas-glyph-directory
+						   "bar.")
+			     nil t))
+			  picons)))
     picons))
 
-(defvar gnus-picons-glyph-alist nil)
+(defun gnus-picons-try-face (dir &optional filebase)
+  (let* ((dir (file-name-as-directory dir))
+	 (filebase (or filebase "face."))
+	 (key (concat dir filebase))
+	 (glyph (cdr (assoc key gnus-picons-glyph-alist)))
+	 (suffixes gnus-picons-file-suffixes)
+	 f)
+    (while (and suffixes (null glyph))
+      (when (file-exists-p (setq f (expand-file-name (concat filebase
+								 (pop suffixes))
+							 dir)))
+	(setq glyph (make-glyph f))
+	(push (cons key glyph) gnus-picons-glyph-alist)))
+    glyph))
 
-(defun gnus-picons-try-to-find-face (path &optional xface-p part rightp)
-  "If PATH exists, display it as a bitmap.  Returns t if succeeded."
-  (let ((glyph (and (not xface-p)
-		    (cdr (assoc path gnus-picons-glyph-alist)))))
-    (when (or glyph (file-exists-p path))
-      (unless glyph
-	(setq glyph (make-glyph path))
-	(unless xface-p
-	  (push (cons path glyph) gnus-picons-glyph-alist))
-	(set-glyph-face glyph 'default))
-      (let ((new (make-annotation glyph (point) 'text nil nil nil rightp)))
-	(nconc
-	 (list new)
-	 (when (and (eq major-mode 'gnus-article-mode)
-		    (not gnus-picons-display-as-address)
-		    (not part))
-	   (list (make-annotation " " (point) 'text nil nil nil rightp)))
-	 (when (and part gnus-picons-display-as-address)
-	   (let ((txt (make-annotation part (point) 'text nil nil nil rightp)))
-	     (hide-annotation txt)
-	     (set-extent-property txt 'its-partner new)
-	     (set-extent-property txt 'keymap gnus-picons-map)
-	     (set-extent-property txt 'mouse-face gnus-article-mouse-face)
-	     (set-extent-property new 'its-partner txt)
-	     (set-extent-property new 'keymap gnus-picons-map)
-	     (list txt))))))))
+(defun gnus-picons-display-glyph (glyph &optional part rightp)
+  (let ((new (make-annotation glyph (point) 'text nil nil nil rightp)))
+    (when (and part gnus-picons-display-as-address)
+      (set-annotation-data new (cons new
+				     (make-glyph (vector 'string :data part))))
+      (set-annotation-action new 'gnus-picons-action-toggle))
+    (nconc
+     (list new)
+     (if (and (eq major-mode 'gnus-article-mode)
+	      (not gnus-picons-display-as-address)
+	      (not part))
+	 (list (make-annotation [string :data " "]
+				(point) 'text nil nil nil rightp))))))
 
-(defun gnus-picons-toggle-extent (event)
-  "Toggle picon glyph at given point"
+(defun gnus-picons-action-toggle (data)
+  "Toggle annotation"
   (interactive "e")
-  (let* ((ant1 (event-glyph-extent event))
-	 (ant2 (extent-property ant1 'its-partner)))
-    (when (and (annotationp ant1) (annotationp ant2))
-      (reveal-annotation ant2)
-      (hide-annotation ant1))))
+  (let* ((annot (car data))
+	 (glyph (annotation-glyph annot)))
+    (set-annotation-glyph annot (cdr data))
+    (set-annotation-data annot (cons annot glyph))))
+
+(defun gnus-picons-clear-cache ()
+  "Clear the picons cache"
+  (interactive)
+  (setq gnus-picons-glyph-alist nil))
 
 (gnus-add-shutdown 'gnus-picons-close 'gnus)
 
 (defun gnus-picons-close ()
   "Shut down the picons."
-  (setq gnus-picons-glyph-alist nil))
+  (if gnus-picons-clear-cache-on-shutdown
+      (gnus-picons-clear-cache)))
+
+;;; Query a remote DB.  This requires some stuff from w3 !
+
+(require 'url)
+(require 'w3-forms)
+
+(defun gnus-picons-url-retrieve (url fn arg)
+  (let ((old-asynch (default-value 'url-be-asynchronous))
+	(url-working-buffer (generate-new-buffer " *picons*"))
+	(url-request-method nil)
+	(url-package-name "Gnus")
+	(url-package-version gnus-version-number))
+    (setq-default url-be-asynchronous t)
+    (save-excursion
+      (set-buffer url-working-buffer)
+      (setq url-be-asynchronous t
+	    url-show-status nil
+	    url-current-callback-data arg
+	    url-current-callback-func fn)
+      (url-retrieve url t))
+    (setq-default url-be-asynchronous old-asynch)))
+
+(defun gnus-picons-make-glyph (type)
+  "Make a TYPE glyph using current buffer as data.  Handles xbm nicely."
+  (cond ((null type) nil)
+	((eq type 'xbm) (let ((fname (make-temp-name "/tmp/picon")))
+			  (write-region (point-min) (point-max) fname
+					nil 'quiet)
+			  (prog1 (make-glyph (vector 'xbm :file fname))
+			    (delete-file fname))))
+	(t (make-glyph (vector type :data (buffer-string))))))
+
+;;; Parsing of piconsearch result page.
+
+;; Assumes:
+;; 1 - each value field has the form: "<strong>key</strong> = <kbd>value</kbd>"
+;; 2 - a "<p>" separates the keywords from the results
+;; 3 - every results begins by the path within the database at the beginning
+;;     of the line in raw text.
+;; 3b - and the href following it is the preferred image type.
+
+;; if 1 or 2 is not met, it will probably cause an error.  The other
+;; will go undetected
+
+(defun gnus-picons-parse-value (name)
+  (goto-char (point-min))
+  (re-search-forward (concat "<strong>"
+			     (regexp-quote name)
+			     "</strong> *= *<kbd> *\\([^ <][^<]*\\) *</kbd>"))
+  (buffer-substring (match-beginning 1) (match-end 1)))
+
+(defun gnus-picons-parse-filenames ()
+  ;; returns an alist of ((USER ADDRS DB) . URL)
+  (let* ((case-fold-search t)
+	 (user (gnus-picons-parse-value "user"))
+	 (host (gnus-picons-parse-value "host"))
+	 (dbs (message-tokenize-header (gnus-picons-parse-value "db") " "))
+	 (start-re
+	  (concat
+	   ;; dbs
+	   "^\\(" (mapconcat 'identity dbs "\\|") "\\)/"
+	   ;; host
+	   "\\(\\(" (replace-in-string host "\\." "/\\|" t) "/\\|MISC/\\)*\\)"
+	   ;; user
+	   "\\(" (regexp-quote user) "\\|unknown\\)/"
+	   "face\\."))
+	 cur-db cur-host cur-user types res)
+    ;; now point will be somewhere in the header.  Find beginning of
+    ;; entries
+    (re-search-forward "<p>[ \t\n]*")
+    (while (re-search-forward start-re nil t)
+      (setq cur-db (buffer-substring (match-beginning 1) (match-end 1))
+	    cur-host (buffer-substring (match-beginning 2) (match-end 2))
+	    cur-user (buffer-substring (match-beginning 4) (match-end 4))
+	    cur-host (nreverse (message-tokenize-header cur-host "/")))
+      ;; XXX - KLUDGE: there is a blank picon in news/MISC/unknown
+      (unless (and (string-equal cur-db "news")
+		   (string-equal cur-user "unknown")
+		   (equal cur-host '("MISC")))
+	;; ok now we have found an entry (USER HOST DB), find the
+	;; corresponding picon URL
+	(save-restriction
+	  ;; restrict region to this entry
+	  (narrow-to-region (point) (search-forward "<br>"))
+	  (goto-char (point-min))
+	  (setq types gnus-picons-file-suffixes)
+	  (while (and types
+		      (not (re-search-forward
+			    (concat "<a[ \t\n]+href=\"\\([^\"]*\\."
+				    (regexp-quote (car types)) "\\)\"")
+			    nil t)))
+	    (pop types))
+	  (push (cons (list cur-user cur-host cur-db)
+		      (buffer-substring (match-beginning 1) (match-end 1)))
+		res))))
+    (nreverse res)))
+
+;;; picon network display functions :
+
+(defun gnus-picons-network-display-internal (sym-ann glyph part right-p)
+  (set-buffer
+   (get-buffer-create (gnus-get-buffer-name gnus-picons-display-where)))
+  (set sym-ann (nconc (symbol-value sym-ann)
+		      (gnus-picons-display-picon-or-name glyph part right-p)))
+  (gnus-picons-next-job-internal))
+
+(defun gnus-picons-network-display-callback (url part sym-ann right-p)
+  (let ((glyph (gnus-picons-make-glyph (cdr (assoc url-current-mime-type
+						   w3-image-mappings)))))
+    (kill-buffer (current-buffer))
+    (push (cons url glyph) gnus-picons-glyph-alist)
+    (gnus-picons-network-display-internal sym-ann glyph part right-p)))
+
+(defun gnus-picons-network-display (url part sym-ann right-p)
+  (let ((cache (assoc url gnus-picons-glyph-alist)))
+    (if (or cache (null url))
+	(gnus-picons-network-display-internal sym-ann (cdr cache) part right-p)
+      (gnus-picons-url-retrieve url 'gnus-picons-network-display-callback
+				(list url part sym-ann right-p)))))
+
+;;; search job functions
+
+(defun gnus-picons-network-search-internal (user addrs dbs sym-ann right-p
+						 &optional fnames)
+  (let (curkey dom pfx url dbs-tmp cache new-jobs)
+    ;; First do the domain search
+    (dolist (part (if right-p
+		      (reverse addrs)
+		    addrs))
+      (setq pfx (nconc (list part) pfx)
+	    dom (cond ((and dom right-p) (concat part "." dom))
+		      (dom (concat dom "." part))
+		      (t part))
+	    curkey (list "unknown" dom dbs))
+      (when (null (setq cache (assoc curkey gnus-picons-url-alist)))
+	;; This one is not yet in the cache, create a new entry
+	;; Search for an entry
+	(setq dbs-tmp dbs
+	      url nil)
+	(while (and dbs-tmp (null url))
+	  (setq url (or (cdr (assoc (list "unknown" pfx (car dbs-tmp)) fnames))
+			(and (eq dom part)
+			     ;; This is the first component.  Try the
+			     ;; catch-all MISC component
+			     (cdr (assoc (list "unknown"
+					       '("MISC")
+					       (car dbs-tmp))
+					 fnames)))))
+	  (pop dbs-tmp))
+	(push (setq cache (cons curkey url)) gnus-picons-url-alist))
+      ;; Put this glyph in the job list
+      (if (and (not (eq dom part)) gnus-picons-display-as-address)
+	  (push (list sym-ann "." right-p) new-jobs))
+      (push (list sym-ann 'picon (cdr cache) part right-p) new-jobs))
+    ;; next, the user search
+    (when user
+      (setq curkey (list user dom gnus-picons-user-directories))
+      (if (null (setq cache (assoc curkey gnus-picons-url-alist)))
+	  (let ((users (list user "unknown"))
+		dirs usr domains-tmp dir picon)
+	    (while (and users (null picon))
+	      (setq dirs gnus-picons-user-directories
+		    usr (pop users))
+	      (while (and dirs (null picon))
+		(setq domains-tmp addrs
+		      dir (pop dirs))
+		(while (and domains-tmp
+			    (null (setq picon (assoc (list usr domains-tmp dir)
+						     fnames))))
+		  (pop domains-tmp))
+		(unless picon
+		  (setq picon (assoc (list usr '("MISC") dir) fnames)))))
+	    (push (setq cache (cons curkey (cdr picon)))
+		  gnus-picons-url-alist)))
+      (if (and gnus-picons-display-as-address new-jobs)
+	  (push (list sym-ann "@" right-p) new-jobs))
+      (push (list sym-ann 'picon (cdr cache) user right-p) new-jobs))
+    (setq gnus-picons-jobs-alist (nconc (nreverse new-jobs)
+					gnus-picons-jobs-alist))
+    (gnus-picons-next-job-internal)))
+
+(defun gnus-picons-network-search-callback (user addrs dbs sym-ann right-p)
+  (gnus-picons-network-search-internal user addrs dbs sym-ann right-p
+				       (prog1 (gnus-picons-parse-filenames)
+					 (kill-buffer (current-buffer)))))
+
+(defun gnus-picons-network-search (user addrs dbs sym-ann right-p)
+  (let* ((host (mapconcat 'identity addrs "."))
+	 (key (list (or user "unknown") host (if user
+						  gnus-picons-user-directories
+						dbs)))
+	 (cache (assoc key gnus-picons-url-alist)))
+    (if (null cache)
+	(gnus-picons-url-retrieve
+	 (concat gnus-picons-piconsearch-url
+		 "?user=" (w3-form-encode-xwfu (or user "unknown"))
+		 "&host=" (w3-form-encode-xwfu host)
+		 "&db=" (mapconcat 'w3-form-encode-xwfu
+				   (if user
+				       (append dbs
+					       gnus-picons-user-directories)
+				     dbs)
+				   "+"))
+	 'gnus-picons-network-search-callback
+	 (list user addrs dbs sym-ann right-p))
+      (gnus-picons-network-search-internal user addrs dbs sym-ann right-p))))
+
+;;; Main jobs dispatcher function
+;; Given that XEmacs is not really multi threaded, this locking should
+;; be sufficient
+
+(defun gnus-picons-next-job-internal ()
+  (if gnus-picons-jobs-alist
+      (let* ((job (pop gnus-picons-jobs-alist))
+	     (sym-ann (pop job))
+	     (tag (pop job)))
+	(if tag
+	    (cond ((stringp tag);; (SYM-ANN "..." RIGHT-P)
+		   (gnus-picons-network-display-internal sym-ann nil tag
+							 (pop job)))
+		  ((eq 'search tag);; (SYM-ANN 'search USER ADDRS DBS RIGHT-P)
+		   (gnus-picons-network-search
+		    (pop job) (pop job) (pop job) sym-ann (pop job)))
+		  ((eq 'picon tag);; (SYM-ANN 'picon URL PART RIGHT-P)
+		   (gnus-picons-network-display
+		    (pop job) (pop job) sym-ann (pop job)))
+		  (t (error "Unknown picon job tag %s" tag)))))
+    (setq gnus-picons-job-already-running nil)))
+
+(defun gnus-picons-next-job ()
+  "Start processing the job queue."
+  (unless gnus-picons-job-already-running
+    (setq gnus-picons-job-already-running t)
+    (gnus-picons-next-job-internal)))
 
 (provide 'gnus-picon)
 
--- a/lisp/gnus/gnus-start.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/gnus/gnus-start.el	Mon Aug 13 09:33:18 2007 +0200
@@ -861,7 +861,8 @@
 
     ;; See whether we need to read the description file.
     (when (and (boundp 'gnus-group-line-format)
-	       (string-match "%[-,0-9]*D" gnus-group-line-format)
+	       (let ((case-fold-search nil))
+		 (string-match "%[-,0-9]*D" gnus-group-line-format))
 	       (not gnus-description-hashtb)
 	       (not dont-connect)
 	       gnus-read-active-file)
--- a/lisp/gnus/gnus-sum.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/gnus/gnus-sum.el	Mon Aug 13 09:33:18 2007 +0200
@@ -4815,6 +4815,9 @@
 		   (not non-destructive))
 	  (setq gnus-newsgroup-scored nil))
 	;; Set the new ranges of read articles.
+	(save-excursion
+	  (set-buffer gnus-group-buffer)
+	  (gnus-undo-force-boundary))
 	(gnus-update-read-articles
 	 group (append gnus-newsgroup-unreads gnus-newsgroup-unselected))
 	;; Set the current article marks.
@@ -8448,7 +8451,8 @@
     (gnus-article-setup-buffer)
     (set-buffer gnus-article-buffer)
     (setq buffer-read-only nil)
-    (let ((command (if automatic command (read-string "Command: " command))))
+    (let ((command (if automatic command
+		     (read-string "Command: " (cons command 0)))))
       (erase-buffer)
       (insert "$ " command "\n\n")
       (if gnus-view-pseudo-asynchronously
@@ -8641,7 +8645,6 @@
 	(push (cons prev (cdr active)) read))
       (save-excursion
 	(set-buffer gnus-group-buffer)
-	(gnus-undo-force-boundary)
 	(gnus-undo-register
 	  `(progn
 	     (gnus-info-set-marks ',info ',(gnus-info-marks info) t)
--- a/lisp/gnus/gnus.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/gnus/gnus.el	Mon Aug 13 09:33:18 2007 +0200
@@ -226,7 +226,7 @@
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "5.4.50"
+(defconst gnus-version-number "5.4.51"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Gnus v%s" gnus-version-number)
--- a/lisp/gnus/message.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/gnus/message.el	Mon Aug 13 09:33:18 2007 +0200
@@ -3594,14 +3594,15 @@
       (insert string)
       (if (not comp)
 	  (message "No matching groups")
-	(pop-to-buffer "*Completions*")
-	(buffer-disable-undo (current-buffer))
-	(let ((buffer-read-only nil))
-	  (erase-buffer)
-	  (let ((standard-output (current-buffer)))
-	    (display-completion-list (sort completions 'string<)))
-	  (goto-char (point-min))
-	  (pop-to-buffer cur)))))))
+	(save-selected-window
+	  (pop-to-buffer "*Completions*")
+	  (buffer-disable-undo (current-buffer))
+	  (let ((buffer-read-only nil))
+	    (erase-buffer)
+	    (let ((standard-output (current-buffer)))
+	      (display-completion-list (sort completions 'string<)))
+	    (goto-char (point-min))
+	    (delete-region (point) (progn (forward-line 3) (point))))))))))
 
 ;;; Help stuff.
 
--- a/lisp/gnus/nnfolder.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/gnus/nnfolder.el	Mon Aug 13 09:33:18 2007 +0200
@@ -508,7 +508,8 @@
       (nnmail-save-active nnfolder-group-alist nnfolder-active-file))
 
     (if dont-check
-	(setq nnfolder-current-group group)
+	(setq nnfolder-current-group group
+	      nnfolder-current-folder nil)
       (let (inf file)
 	;; If we have to change groups, see if we don't already have the
 	;; folder in memory.  If we do, verify the modtime and destroy
--- a/lisp/gnus/nnmh.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/gnus/nnmh.el	Mon Aug 13 09:33:18 2007 +0200
@@ -182,7 +182,7 @@
 (deffoo nnmh-request-list (&optional server dir)
   (nnheader-insert "")
   (let ((nnmh-toplev
-	 (or dir (file-truename (file-name-as-directory nnmh-directory)))))
+	 (file-truename (or dir (file-name-as-directory nnmh-directory)))))
     (nnmh-request-list-1 nnmh-toplev))
   (setq nnmh-group-alist (nnmail-get-active))
   t)
--- a/lisp/hm--html-menus/hm--html-keys.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/hm--html-menus/hm--html-keys.el	Mon Aug 13 09:33:18 2007 +0200
@@ -1,4 +1,4 @@
-;;; $Id: hm--html-keys.el,v 1.5 1997/03/28 02:28:41 steve Exp $
+;;; $Id: hm--html-keys.el,v 1.6 1997/05/09 03:28:00 steve Exp $
 ;;; 
 ;;; Copyright (C) 1995, 1996, 1997 Heiko Muenkel
 ;;; email: muenkel@tnt.uni-hannover.de
@@ -216,115 +216,127 @@
     [(meta d)] 'hm--html-add-document-division-to-region)
   )
 
-(defvar hm--html-noregion-formating-paragraph-map nil
-  "Noregion sub keymap for inserting paragraph formating elements.")
+(defvar hm--html-noregion-formatting-paragraph-map nil
+  "Noregion sub keymap for inserting paragraph formatting elements.")
+(define-obsolete-variable-alias
+  'hm--html-noregion-formating-paragraph-map
+  'hm--html-noregion-formatting-paragraph-map)
 
-(if hm--html-noregion-formating-paragraph-map
+(if hm--html-noregion-formatting-paragraph-map
     ()
-  (setq hm--html-noregion-formating-paragraph-map (make-sparse-keymap))
-;  (define-key hm--html-noregion-formating-paragraph-map
+  (setq hm--html-noregion-formatting-paragraph-map (make-sparse-keymap))
+;  (define-key hm--html-noregion-formatting-paragraph-map
 ;    "o" 'hm--html-add-plaintext)
-  (define-key hm--html-noregion-formating-paragraph-map
-    "p" 'hm--html-add-preformated)
-  (define-key hm--html-noregion-formating-paragraph-map
+  (define-key hm--html-noregion-formatting-paragraph-map
+    "p" 'hm--html-add-preformatted)
+  (define-key hm--html-noregion-formatting-paragraph-map
     "b" 'hm--html-add-blockquote)
-  (define-key hm--html-noregion-formating-paragraph-map
+  (define-key hm--html-noregion-formatting-paragraph-map
     "\C-b" 'hm--html-add-basefont)
-  (define-key hm--html-noregion-formating-paragraph-map
+  (define-key hm--html-noregion-formatting-paragraph-map
     "f" 'hm--html-add-font)
-  (define-key hm--html-noregion-formating-paragraph-map
+  (define-key hm--html-noregion-formatting-paragraph-map
     "c" 'hm--html-add-center)
-  (define-key hm--html-noregion-formating-paragraph-map
+  (define-key hm--html-noregion-formatting-paragraph-map
     "\C-c" 'hm--html-add-comment)
-;  (define-key hm--html-noregion-formating-paragraph-map
+;  (define-key hm--html-noregion-formatting-paragraph-map
 ;    "l" 'hm--html-add-listing)
-;  (define-key hm--html-noregion-formating-paragraph-map
+;  (define-key hm--html-noregion-formatting-paragraph-map
 ;    "a" 'hm--html-add-abstract)
   )
 
-(defvar hm--html-region-formating-paragraph-map nil
-  "Region sub keymap for inserting paragraph formating elements.")
+(defvar hm--html-region-formatting-paragraph-map nil
+  "Region sub keymap for inserting paragraph formatting elements.")
+(define-obsolete-variable-alias
+  'hm--html-region-formating-paragraph-map
+  'hm--html-region-formatting-paragraph-map)
 
-(if hm--html-region-formating-paragraph-map
+(if hm--html-region-formatting-paragraph-map
     ()
-  (setq hm--html-region-formating-paragraph-map (make-sparse-keymap))
-;  (define-key hm--html-region-formating-paragraph-map
+  (setq hm--html-region-formatting-paragraph-map (make-sparse-keymap))
+;  (define-key hm--html-region-formatting-paragraph-map
 ;    "o" 'hm--html-add-plaintext-to-region)
-  (define-key hm--html-region-formating-paragraph-map
-    "p" 'hm--html-add-preformated-to-region)
-  (define-key hm--html-region-formating-paragraph-map
+  (define-key hm--html-region-formatting-paragraph-map
+    "p" 'hm--html-add-preformatted-to-region)
+  (define-key hm--html-region-formatting-paragraph-map
     "b" 'hm--html-add-blockquote-to-region)
-  (define-key hm--html-region-formating-paragraph-map
+  (define-key hm--html-region-formatting-paragraph-map
     "\C-b" 'hm--html-add-basefont-to-region)
-  (define-key hm--html-region-formating-paragraph-map
+  (define-key hm--html-region-formatting-paragraph-map
     "f" 'hm--html-add-font-to-region)
-  (define-key hm--html-region-formating-paragraph-map
+  (define-key hm--html-region-formatting-paragraph-map
     "c" 'hm--html-add-center-to-region)
-  (define-key hm--html-region-formating-paragraph-map
+  (define-key hm--html-region-formatting-paragraph-map
     "\C-c" 'hm--html-add-comment-to-region)
-;  (define-key hm--html-region-formating-paragraph-map
+;  (define-key hm--html-region-formatting-paragraph-map
 ;    "l" 'hm--html-add-listing-to-region)
-;  (define-key hm--html-region-formating-paragraph-map
+;  (define-key hm--html-region-formatting-paragraph-map
 ;    "a" 'hm--html-add-abstract-to-region)
   )
 
-(defvar hm--html-noregion-formating-word-map nil
-  "Norgion sub keymap for inserting physical text formating elements.")
+(defvar hm--html-noregion-formatting-word-map nil
+  "Norgion sub keymap for inserting physical text formatting elements.")
+(define-obsolete-variable-alias
+  'hm--html-noregion-formating-word-map
+  'hm--html-noregion-formatting-word-map)
 
-(if hm--html-noregion-formating-word-map
+(if hm--html-noregion-formatting-word-map
     ()
-  (setq hm--html-noregion-formating-word-map (make-sparse-keymap))
-  (define-key hm--html-noregion-formating-word-map
+  (setq hm--html-noregion-formatting-word-map (make-sparse-keymap))
+  (define-key hm--html-noregion-formatting-word-map
     "b" 'hm--html-add-bold)
-  (define-key hm--html-noregion-formating-word-map
+  (define-key hm--html-noregion-formatting-word-map
     "i" 'hm--html-add-italic)
-  (define-key hm--html-noregion-formating-word-map
+  (define-key hm--html-noregion-formatting-word-map
     "u" 'hm--html-add-underline)
-  (define-key hm--html-noregion-formating-word-map
+  (define-key hm--html-noregion-formatting-word-map
     "t" 'hm--html-add-fixed)
-  (define-key hm--html-noregion-formating-word-map
+  (define-key hm--html-noregion-formatting-word-map
     "s" 'hm--html-add-strikethru)
-  (define-key hm--html-noregion-formating-word-map
+  (define-key hm--html-noregion-formatting-word-map
     "\C-p" 'hm--html-add-superscript)
-  (define-key hm--html-noregion-formating-word-map
+  (define-key hm--html-noregion-formatting-word-map
     "\C-b" 'hm--html-add-subscript)
-  (define-key hm--html-noregion-formating-word-map
+  (define-key hm--html-noregion-formatting-word-map
     "e" 'hm--html-add-emphasized)
-  (define-key hm--html-noregion-formating-word-map
+  (define-key hm--html-noregion-formatting-word-map
     "\C-s" 'hm--html-add-strong)
-  (define-key hm--html-noregion-formating-word-map
+  (define-key hm--html-noregion-formatting-word-map
     "\M-s" 'hm--html-add-small)
-  (define-key hm--html-noregion-formating-word-map
+  (define-key hm--html-noregion-formatting-word-map
     "\M-b" 'hm--html-add-big)
   )
 
-(defvar hm--html-region-formating-word-map nil
-  "Region sub keymap for inserting word text formating elements.")
+(defvar hm--html-region-formatting-word-map nil
+  "Region sub keymap for inserting word text formatting elements.")
+(define-obsolete-variable-alias
+  'hm--html-region-formating-word-map
+  'hm--html-region-formatting-word-map)
 
-(if hm--html-region-formating-word-map
+(if hm--html-region-formatting-word-map
     ()
-  (setq hm--html-region-formating-word-map (make-sparse-keymap))
-  (define-key hm--html-region-formating-word-map
+  (setq hm--html-region-formatting-word-map (make-sparse-keymap))
+  (define-key hm--html-region-formatting-word-map
     "b" 'hm--html-add-bold-to-region)
-  (define-key hm--html-region-formating-word-map
+  (define-key hm--html-region-formatting-word-map
     "i" 'hm--html-add-italic-to-region)
-  (define-key hm--html-region-formating-word-map
+  (define-key hm--html-region-formatting-word-map
     "u" 'hm--html-add-underline-to-region)
-  (define-key hm--html-region-formating-word-map
+  (define-key hm--html-region-formatting-word-map
     "t" 'hm--html-add-fixed-to-region)
-  (define-key hm--html-region-formating-word-map
+  (define-key hm--html-region-formatting-word-map
     "s" 'hm--html-add-strikethru-to-region)
-  (define-key hm--html-region-formating-word-map
+  (define-key hm--html-region-formatting-word-map
     "\C-p" 'hm--html-add-superscript-to-region)
-  (define-key hm--html-region-formating-word-map
+  (define-key hm--html-region-formatting-word-map
     "\C-b" 'hm--html-add-subscript-to-region)
-  (define-key hm--html-region-formating-word-map
+  (define-key hm--html-region-formatting-word-map
     "e" 'hm--html-add-emphasized-to-region)
-  (define-key hm--html-region-formating-word-map
+  (define-key hm--html-region-formatting-word-map
     "\C-s" 'hm--html-add-strong-to-region)
-  (define-key hm--html-region-formating-word-map
+  (define-key hm--html-region-formatting-word-map
     "\M-s" 'hm--html-add-small-to-region)
-  (define-key hm--html-region-formating-word-map
+  (define-key hm--html-region-formatting-word-map
     "\M-b" 'hm--html-add-big-to-region)
   )
 
@@ -436,9 +448,9 @@
   (define-key hm--html-region-sub-map-1 "\C-f" hm--html-region-frame-map)
   (define-key hm--html-region-sub-map-1 "\C-s" hm--html-region-structure-map)
   (define-key hm--html-region-sub-map-1 
-    "\C-p" hm--html-region-formating-paragraph-map)
+    "\C-p" hm--html-region-formatting-paragraph-map)
   (define-key hm--html-region-sub-map-1
-    "\C-w" hm--html-region-formating-word-map)
+    "\C-w" hm--html-region-formatting-word-map)
   )
 
 (defvar hm--html-noregion-sub-map-1 nil
@@ -458,9 +470,9 @@
   (define-key hm--html-noregion-sub-map-1 
     "\C-s" hm--html-noregion-structure-map)
   (define-key hm--html-noregion-sub-map-1
-    "\C-p" hm--html-noregion-formating-paragraph-map)
+    "\C-p" hm--html-noregion-formatting-paragraph-map)
   (define-key hm--html-noregion-sub-map-1
-    "\C-w" hm--html-noregion-formating-word-map)
+    "\C-w" hm--html-noregion-formatting-word-map)
   )
 
 (defvar hm--html-region-sub-map nil
--- a/lisp/hm--html-menus/hm--html-menu.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/hm--html-menus/hm--html-menu.el	Mon Aug 13 09:33:18 2007 +0200
@@ -1,6 +1,6 @@
 ;;;  hm--html-menu ---  A menu for the hm--html-mode.
 ;;;  
-;;;  $Id: hm--html-menu.el,v 1.5 1997/03/28 02:28:41 steve Exp $
+;;;  $Id: hm--html-menu.el,v 1.6 1997/05/09 03:28:00 steve Exp $
 ;;;
 ;;;  Copyright (C) 1993 - 1997  Heiko Muenkel
 ;;;  email: muenkel@tnt.uni-hannover.de
@@ -132,9 +132,9 @@
 	  ["New line" hm--html-add-line-break t]
 	  ["Horizontal rule" hm--html-add-horizontal-rule t]
 	  )
-	 ("Formating Paragraphs"
+	 ("Formatting Paragraphs"
 ;	  ["Without links" hm--html-add-plaintext t]
-	  ["Preformated" hm--html-add-preformated t]
+	  ["Preformatted" hm--html-add-preformatted t]
           ["Blockquote" hm--html-add-blockquote t]
 	  "----"
 	  ["Basefont..." hm--html-add-basefont t]
@@ -284,9 +284,9 @@
 	  "----"
 	  ["Paragraph Container" hm--html-add-paragraph t]
 	  )
-	 ("Formating Paragraphs"
+	 ("Formatting Paragraphs"
 ;	  ["Without links" hm--html-add-plaintext t]
-	  ["Preformated" hm--html-add-preformated t]
+	  ["Preformatted" hm--html-add-preformatted t]
 	  )
 	 ("Formatting Words"
 	  ["Bold" hm--html-add-bold t]
@@ -357,7 +357,7 @@
 	  )
 	 ("Formatting Paragraphs"
 ;	  ["Without links" hm--html-add-plaintext-to-region t]
-	  ["Preformated" hm--html-add-preformated-to-region t]
+	  ["Preformatted" hm--html-add-preformatted-to-region t]
           ["Blockquote" hm--html-add-blockquote-to-region t]
 	  "----"
 	  ["Font..." hm--html-add-font-to-region t]
@@ -464,7 +464,7 @@
 	  )
 	 ("Formatting Paragraphs"
 ;	  ["Without links" hm--html-add-plaintext-to-region t]
-	  ["Preformated" hm--html-add-preformated-to-region t]
+	  ["Preformatted" hm--html-add-preformatted-to-region t]
 	  )
 	 ("Formatting Words"
 	  ["Bold" hm--html-add-bold-to-region t]
--- a/lisp/hm--html-menus/hm--html.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/hm--html-menus/hm--html.el	Mon Aug 13 09:33:18 2007 +0200
@@ -1,4 +1,4 @@
-;;; $Id: hm--html.el,v 1.5 1997/03/28 02:28:42 steve Exp $
+;;; $Id: hm--html.el,v 1.6 1997/05/09 03:28:00 steve Exp $
 ;;;
 ;;; Copyright (C) 1993 - 1997  Heiko Muenkel
 ;;; email: muenkel@tnt.uni-hannover.de
@@ -844,23 +844,27 @@
 			       "</DIV>"))
 
 
-(defun hm--html-add-preformated ()
-  "Adds the HTML tags for preformated text at the point in the current buffer."
+(defun hm--html-add-preformatted ()
+  "Adds the HTML tags for preformatted text at the point in the current buffer."
   (interactive)
   (hm--html-add-tags 'hm--html-insert-start-tag-with-newline
 		     "<PRE>"
 		     'hm--html-insert-end-tag-with-newline
 		     "</PRE>"))
-
-
-(defun hm--html-add-preformated-to-region ()
-  "Adds the HTML tags for preformated text to the region."
+(define-obsolete-function-alias
+  'hm--html-add-preformated
+  'hm--html-add-preformatted)
+
+(defun hm--html-add-preformatted-to-region ()
+  "Adds the HTML tags for preformatted text to the region."
   (interactive)
   (hm--html-add-tags-to-region 'hm--html-insert-start-tag-with-newline
 			       "<PRE>"
 			       'hm--html-insert-end-tag-with-newline
 			       "</PRE>"))
-
+(define-obsolete-function-alias
+  'hm--html-add-preformated-to-region
+  'hm--html-add-preformatted-to-region)
 
 (defun hm--html-add-blockquote ()
   "Adds the HTML tags for blockquote."
--- a/lisp/modes/icon.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/modes/icon.el	Mon Aug 13 09:33:18 2007 +0200
@@ -71,25 +71,44 @@
   (modify-syntax-entry ?| "." icon-mode-syntax-table)
   (modify-syntax-entry ?\' "\"" icon-mode-syntax-table))
 
-(defvar icon-indent-level 4
-  "*Indentation of Icon statements with respect to containing block.")
-(defvar icon-brace-imaginary-offset 0
-  "*Imagined indentation of a Icon open brace that actually follows a statement.")
-(defvar icon-brace-offset 0
-  "*Extra indentation for braces, compared with other text in same context.")
-(defvar icon-continued-statement-offset 4
-  "*Extra indent for lines not starting new statements.")
-(defvar icon-continued-brace-offset 0
+(defgroup icon nil
+  "Mode for editing icon code."
+  :group 'languages)
+
+
+(defcustom icon-indent-level 4
+  "*Indentation of Icon statements with respect to containing block."
+  :type 'integer
+  :group 'icon)
+(defcustom icon-brace-imaginary-offset 0
+  "*Imagined indentation of a Icon open brace that actually follows a statement."
+  :type 'integer
+  :group 'icon)
+(defcustom icon-brace-offset 0
+  "*Extra indentation for braces, compared with other text in same context."
+  :type 'integer
+  :group 'icon)
+(defcustom icon-continued-statement-offset 4
+  "*Extra indent for lines not starting new statements."
+  :type 'integer
+  :group 'icon)
+(defcustom icon-continued-brace-offset 0
   "*Extra indent for substatements that start with open-braces.
-This is in addition to icon-continued-statement-offset.")
+This is in addition to icon-continued-statement-offset."
+  :type 'integer
+  :group 'icon)
 
-(defvar icon-auto-newline nil
+(defcustom icon-auto-newline nil
   "*Non-nil means automatically newline before and after braces
-inserted in Icon code.")
+inserted in Icon code."
+  :type 'boolean
+  :group 'icon)
 
-(defvar icon-tab-always-indent t
+(defcustom icon-tab-always-indent t
   "*Non-nil means TAB in Icon mode should always reindent the current line,
-regardless of where in the line point is when the TAB command is used.")
+regardless of where in the line point is when the TAB command is used."
+  :type 'integer
+  :group 'icon)
 
 ;;;###autoload
 (defun icon-mode ()
--- a/lisp/modes/verilog-mode.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/modes/verilog-mode.el	Mon Aug 13 09:33:18 2007 +0200
@@ -1,6 +1,6 @@
 ;;; verilog-mode.el --- major mode for editing verilog source in Emacs
 ;;
-;; $Header: /afs/informatik.uni-tuebingen.de/local/web/xemacs/xemacs-cvs/XEmacs/xemacs/lisp/modes/Attic/verilog-mode.el,v 1.3 1997/04/19 23:21:05 steve Exp $
+;; $Header: /afs/informatik.uni-tuebingen.de/local/web/xemacs/xemacs-cvs/XEmacs/xemacs/lisp/modes/Attic/verilog-mode.el,v 1.4 1997/05/09 03:28:03 steve Exp $
 
 ;; Copyright (C) 1996 Free Software Foundation, Inc.
 
@@ -70,7 +70,7 @@
 (provide 'verilog-mode)
 
 ;; This variable will always hold the version number of the mode
-(defconst verilog-mode-version "$$Revision: 1.3 $$"
+(defconst verilog-mode-version "$$Revision: 1.4 $$"
   "Version of this verilog mode.")
 
 ;;
@@ -93,16 +93,16 @@
 (defun verilog-customize ()
   "Link to customize screen for Verilog"
   (interactive)
-  (customize 'verilog-mode)
+  (customize 'verilog)
   )
 
-(defgroup verilog-mode nil
+(defgroup verilog nil
   "Faciliates easy editing of Verilog source text"
   :group 'languages)
       
 (defcustom verilog-indent-level 3
   "*Indentation of Verilog statements with respect to containing block."
-  :group 'verilog-mode
+  :group 'verilog
   :type 'integer 
   )
 
@@ -110,45 +110,45 @@
   "* Indentation of Module level Verilog statements. (eg always, initial)
     Set to 0 to get initial and always statements lined up 
     on the left side of your screen."
-  :group 'verilog-mode
+  :group 'verilog
   :type 'integer 
   )
 
 (defcustom verilog-indent-level-declaration 3
   "*Indentation of declarations with respect to containing block. 
     Set to 0 to get them list right under containing block."
-  :group 'verilog-mode
+  :group 'verilog
   :type 'integer 
   )
 
 (defcustom verilog-indent-level-behavorial 3
   "*Absolute indentation of first begin in a task or function block
     Set to 0 to get such code to start at the left side of the screen."
-  :group 'verilog-mode
+  :group 'verilog
   :type 'integer 
   )
 
 (defcustom verilog-cexp-indent 1
   "*Indentation of Verilog statements split across lines."
-  :group 'verilog-mode
+  :group 'verilog
   :type 'integer 
   )
 
 (defcustom verilog-case-indent 2
   "*Indentation for case statements."
-  :group 'verilog-mode
+  :group 'verilog
   :type 'integer 
   )
 
 (defcustom verilog-auto-newline t
   "*Non-nil means automatically newline after semicolons"
-  :group 'verilog-mode
+  :group 'verilog
   :type 'integer 
   )
 
 (defcustom verilog-auto-indent-on-newline t
   "*Non-nil means automatically indent line after newline"
-  :group 'verilog-mode
+  :group 'verilog
   :type 'integer 
   )
 
@@ -156,21 +156,21 @@
   "*Non-nil means TAB in Verilog mode should always reindent the
   current line, regardless of where in the line point is when the TAB
   command is used."
-  :group 'verilog-mode
+  :group 'verilog
   :type 'integer 
   )
 
 (defcustom verilog-indent-begin-after-if t
   "*If true, indent begin statements following if, else, while, for
   and repeat.  otherwise, line them up."
-  :group 'verilog-mode
+  :group 'verilog
   :type 'boolean )
 
 (defcustom verilog-auto-endcomments t
   "*Non-nil means a comment /* ... */ is set after the ends which ends
   cases and functions. The name of the function or case will be set
   between the braces."
-  :group 'verilog-mode
+  :group 'verilog
   :type 'boolean )
 
 (defcustom verilog-minimum-comment-distance 40
@@ -178,7 +178,7 @@
   will be inserted.  Setting this variable to zero results in every
   end aquiring a comment; the default avoids too many redundanet
   comments in tight quarters"
-  :group 'verilog-mode
+  :group 'verilog
   :type 'integer 
   )
 
--- a/lisp/modes/vrml-mode.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/modes/vrml-mode.el	Mon Aug 13 09:33:18 2007 +0200
@@ -45,25 +45,20 @@
 ;;
 
 (defgroup vrml nil
-  "VRML Language"
+  "VRML Language."
   :group 'languages)
 
-(defgroup vrml-mode nil
-  "VRML mode customization"
-  :group 'vrml
-  :prefix "vrml-")
-
 
 (defcustom vrml-indent-level 3
   "*Indentation of VRML statements with respect to containing block."
   :type 'integer
-  :group 'vrml-mode)
+  :group 'vrml)
 
 (defcustom vrml-auto-newline nil
   "*Non-nil means automatically newline before and after braces
 inserted in VRML code."
   :type 'boolean
-  :group 'vrml-mode)
+  :group 'vrml)
 
 (defcustom vrml-tab-always-indent t
   "*Control effect of TAB key.
@@ -82,13 +77,13 @@
   :type '(choice (const :tag "on" t)
 		 (const :tag "off" nil)
 		 (const :tag "The Works" other))
-  :group 'vrml-mode)
+  :group 'vrml)
 
 (defcustom vrml-use-hairy-comment-detector t
   "*If not `nil', then the more complicated, but slower, comment
 detecting function is used."
   :type 'boolean
-  :group 'vrml-mode)
+  :group 'vrml)
 
 (defvar vrml-mode-abbrev-table nil
   "Abbrev table used while in VRML mode.")
@@ -138,7 +133,7 @@
 (defcustom vrml-mode-hook nil
   "Hook run on entry to VRML mode."
   :type 'hook
-  :group 'vrml-mode)
+  :group 'vrml)
 
 (defvar vrml-keyword-list
   '(
--- a/lisp/mule/mule-files.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/mule/mule-files.el	Mon Aug 13 09:33:18 2007 +0200
@@ -441,6 +441,7 @@
 
 (defun write-region (start end filename &optional append visit lockname coding-system)
   "Write current region into specified file.
+By default the file's existing contents are replaced by the specified region.
 When called from a program, takes three arguments:
 START, END and FILENAME.  START and END are buffer positions.
 Optional fourth argument APPEND if non-nil means
--- a/lisp/packages/crypt.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/packages/crypt.el	Mon Aug 13 09:33:18 2007 +0200
@@ -700,9 +700,11 @@
 
 ;;;; User definable variables.
 
-(defgroup crypt nil
-  "Handling compressed and encrypted files."
-  :group 'data)
+(progn
+  (defgroup crypt nil
+    "Handling compressed and encrypted files."
+    :group 'compression)
+  )
 
 (defcustom crypt-encryption-type 'crypt
   "*Method of encryption.  Must be an element of `crypt-encryption-alist.'
--- a/lisp/packages/etags.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/packages/etags.el	Mon Aug 13 09:33:18 2007 +0200
@@ -218,26 +218,38 @@
 
 ;; Tag tables for a buffer
 
+(defgroup etags nil
+  "Etags facility for Emacs"
+  :prefix "tags-"
+  :group 'tools)
+
+
 ;;;###autoload
-(defvar tags-build-completion-table 'ask
+(defcustom tags-build-completion-table 'ask
   "*If this variable is nil, then tags completion is disabled.
 If this variable is t, then things which prompt for tags will do so with 
  completion across all known tags.
 If this variable is the symbol `ask', then you will be asked whether each
  tags table should be added to the completion list as it is read in.
  (With the exception that for very small tags tables, you will not be asked,
- since they can be parsed quickly.)")
+ since they can be parsed quickly.)"
+  :type '(radio (const :tag "Disabled" nil)
+		(const :tag "Complete All" t)
+		(const :tag "Ask" ask))
+  :group 'etags)
 
 ;;;###autoload
-(defvar tags-always-exact nil		; #### - this will eventually be the
+(defcustom tags-always-exact nil	; #### - this will eventually be the
 					; default, but it's a bit too
 					; annoying right now because there's
 					; no fallback to an inexact search
 					; when there is no exact match --Stig
-  "*If this variable is non-nil, then tags always looks for exact matches.")
+  "*If this variable is non-nil, then tags always looks for exact matches."
+  :type 'boolean
+  :group 'etags)
 
 ;;;###autoload
-(defvar tag-table-alist nil
+(defcustom tag-table-alist nil
   "*A list which determines which tags files should be active for a 
 given buffer.  This is not really an association list, in that all 
 elements are checked.  The CAR of each element of this list is a 
@@ -284,27 +296,35 @@
 
 If the variable tags-file-name is set, then the tags file it names will apply
 to all buffers (for backwards compatibility.)  It is searched first.
-")
+"
+  :type '(repeat (cons regexp sexp))
+  :group 'etags)
 
-(defvar buffer-tag-table nil
+(defcustom buffer-tag-table nil
   "*The name of one TAGS table to be used for this buffer in addition to the
 TAGS tables that the variable `tag-table-alist' specifies.  You can set this
 with meta-x set-buffer-tag-table.  See the documentation for the variable
-`tag-table-alist' for more information.")
+`tag-table-alist' for more information."
+  :type '(repeat (cons regexp sexp))
+  :group 'etags)
 (make-variable-buffer-local 'buffer-tag-table)
 
-(defvar tags-file-name nil
+(defcustom tags-file-name nil
   "*The name of the tags-table used by all buffers.  This is for backwards
-compatibility, and is largely supplanted by the variable tag-table-alist.")
+compatibility, and is largely supplanted by the variable tag-table-alist."
+  :type '(choice (const nil) string)
+  :group 'etags)
 ;; (setq tags-file-name nil)  ; nuke previous value.  Is this cool?
 
 ;; This will be used if it's loaded; don't force it on those who don't want it.
 ;;(autoload 'symlink-expand-file-name "symlink-fix")
 
 ;; XEmacs change: added tags-auto-read-changed-tag-files
-(defvar tags-auto-read-changed-tag-files nil
+(defcustom tags-auto-read-changed-tag-files nil
   "*If t then always re-read changed TAGS file without prompting, if nil
-then prompt if changed TAGS file should be re-read.")
+then prompt if changed TAGS file should be re-read."
+  :type 'boolean
+  :group 'etags)
 
 (defun buffer-tag-table-list ()
   "Returns a list (ordered) of the tags tables which should be used for 
@@ -1126,9 +1146,11 @@
 	   (goto-char (point-min))))
     (and new file)))
 
-(defvar tags-search-nuke-uninteresting-buffers t
+(defcustom tags-search-nuke-uninteresting-buffers t
   "*If t (the default), tags-search and tags-query-replace will only
-keep newly-visited buffers if they contain the search target.")
+keep newly-visited buffers if they contain the search target."
+  :type 'boolean
+  :group 'etags)
 
 ;;;###autoload
 (defun tags-loop-continue (&optional first-time)
@@ -1406,10 +1428,12 @@
 
 (defvar tag-mark-stack1 nil)
 (defvar tag-mark-stack2 nil)
-(defvar tag-mark-stack-max 16
+(defcustom tag-mark-stack-max 16
   "*The maximum number of elements kept on the mark-stack used
 by tags-search.  See also the commands push-tag-mark (\\[push-tag-mark])
-and pop-tag-mark. (\\[pop-tag-mark]).")
+and pop-tag-mark. (\\[pop-tag-mark])."
+  :type 'integer
+  :group 'etags)
 
 (defun push-mark-on-stack (stack-symbol &optional max-size)
   (let ((stack (symbol-value stack-symbol)))
--- a/lisp/packages/filladapt.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/packages/filladapt.el	Mon Aug 13 09:33:18 2007 +0200
@@ -87,7 +87,7 @@
 
 (defgroup filladapt nil
   "Enhanced filling"
-  :group 'editing)
+  :group 'fill)
 
 (defvar filladapt-version "2.10"
   "Version string for filladapt.")
--- a/lisp/packages/igrep.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/packages/igrep.el	Mon Aug 13 09:33:18 2007 +0200
@@ -166,10 +166,11 @@
 
 ;;; User options:
 
-(defgroup igrep nil
-  "An improved interface to `grep'."
-  :group 'processes)
-
+(progn
+  (defgroup igrep nil
+    "An improved interface to `grep'."
+    :group 'processes)
+  )
 
 (defcustom igrep-options nil
   "*The options passed by \\[igrep] to `igrep-program', or nil.
--- a/lisp/packages/jka-compr.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/packages/jka-compr.el	Mon Aug 13 09:33:18 2007 +0200
@@ -105,9 +105,11 @@
   "Data compression utilities"
   :group 'data)
 
-(defgroup jka-compr nil
-  "jka-compr customization"
-  :group 'compression)
+(progn
+  (defgroup jka-compr nil
+    "jka-compr customization"
+    :group 'compression)
+  )
 
 
 (defcustom jka-compr-shell "sh"
--- a/lisp/pcl-cvs/ChangeLog	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/pcl-cvs/ChangeLog	Mon Aug 13 09:33:18 2007 +0200
@@ -1,3 +1,9 @@
+Fri May  2 20:04:35 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* pcl-cvs.el (cvs-update): Inhibit dialog box usage in call to
+	cvs-do-update as this bombs when this function is invoked from a
+	menu.
+
 Wed Mar 19 23:25:26 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* pcl-cvs.el (cvs-changelog-ours-p): Use function.
--- a/lisp/pcl-cvs/pcl-cvs.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/pcl-cvs/pcl-cvs.el	Mon Aug 13 09:33:18 2007 +0200
@@ -1,10 +1,10 @@
 ;;;
 ;;;#ident "@(#)OrigId: pcl-cvs.el,v 1.93 1993/05/31 22:44:00 ceder Exp "
 ;;;
-;;;#ident "@(#)cvs/contrib/pcl-cvs:$Name: r20-1b9 $:$Id: pcl-cvs.el,v 1.3 1997/03/22 06:02:36 steve Exp $"
+;;;#ident "@(#)cvs/contrib/pcl-cvs:$Name: r20-2b5 $:$Id: pcl-cvs.el,v 1.4 1997/05/09 03:28:08 steve Exp $"
 ;;;
 ;;; pcl-cvs.el -- A Front-end to CVS 1.3 or later.
-;;; Release 1.05-CVS-$Name: r20-1b9 $.
+;;; Release 1.05-CVS-$Name: r20-2b5 $.
 ;;; Copyright (C) 1991, 1992, 1993  Per Cederqvist
 
 ;;; This program is free software; you can redistribute it and/or modify
@@ -126,7 +126,7 @@
 ;;;	     END OF THINGS TO CHECK WHEN INSTALLING
 ;;; --------------------------------------------------------
 
-(defconst pcl-cvs-version "1.05-CVS-$Name: r20-1b9 $"
+(defconst pcl-cvs-version "1.05-CVS-$Name: r20-2b5 $"
   "A string denoting the current release version of pcl-cvs.")
 
 ;; You are NOT allowed to disable this message by default.  However, you
@@ -139,8 +139,8 @@
 
 (defconst cvs-startup-message
   (if cvs-inhibit-copyright-message
-      "PCL-CVS release 1.05-CVS-$Name: r20-1b9 $"
-    "PCL-CVS release 1.05 from CVS release $Name: r20-1b9 $.
+      "PCL-CVS release 1.05-CVS-$Name: r20-2b5 $"
+    "PCL-CVS release 1.05 from CVS release $Name: r20-2b5 $.
 Copyright (C) 1992, 1993 Per Cederqvist
 Pcl-cvs comes with absolutely no warranty; for details consult the manual.
 This is free software, and you are welcome to redistribute it under certain
@@ -507,7 +507,10 @@
   (interactive (list (read-file-name "CVS Update (directory): "
 				     nil default-directory nil)
 		     current-prefix-arg))
-  (cvs-do-update directory local nil)
+  ;; If the previous prompt was in a dialog box, the save-some-buffers
+  ;; call in cvs-do-update will lose.
+  (let ((use-dialog-box nil))
+    (cvs-do-update directory local nil))
   (switch-to-buffer cvs-buffer-name))
 
 ;;----------
@@ -724,7 +727,7 @@
 \\[cvs-mode-undo-local-changes]   Revert the last checked in version - discard your changes to the file.
 
 Entry to this mode runs cvs-mode-hook.
-This description is updated for release 1.05-CVS-$Name: r20-1b9 $ of pcl-cvs.
+This description is updated for release 1.05-CVS-$Name: r20-2b5 $ of pcl-cvs.
 
 All bindings:
 \\{cvs-mode-map}"
@@ -1013,7 +1016,7 @@
     (insert "Pcl-cvs Version: "
 	    "@(#)OrigId: pcl-cvs.el,v 1.93 1993/05/31 22:44:00 ceder Exp\n")
     (insert "CVS Version: "
-	    "@(#)lisp/pcl-cvs:$Name: r20-1b9 $:$Id: pcl-cvs.el,v 1.3 1997/03/22 06:02:36 steve Exp $\n\n")
+	    "@(#)lisp/pcl-cvs:$Name: r20-2b5 $:$Id: pcl-cvs.el,v 1.4 1997/05/09 03:28:08 steve Exp $\n\n")
     (insert (format "--- Contents of stdout buffer (%d chars) ---\n"
 		    (length stdout)))
     (insert stdout)
--- a/lisp/prim/about.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/prim/about.el	Mon Aug 13 09:33:18 2007 +0200
@@ -691,15 +691,15 @@
 
 	 ((eq xref 'bw)
 	  (about-face "Bob Weiner" 'bold)
-	  (insert " <weiner@infodock.com>
+	  (insert " <weiner@altrasoft.com>
 
 	Author of the Hyperbole everyday information management
 	hypertext system and the OO-Browser multi-language code
-	browser.  He also designed the InfoDock integrated tool
+	browser.  He also designed the Altrasoft integrated tool
 	framework for software engineers.  It runs atop XEmacs and is
-	available from his firm, InfoDock Associates, which offers custom
+	available from his firm, Altrasoft, which offers custom
 	development and support packages for corporate users of XEmacs,
-	GNU Emacs and InfoDock.  See \"http://www.infodock.com\".
+	GNU Emacs and InfoDock.  See \"http://www.altrasoft.com\".
 	His interests include user interfaces, information management,
 	CASE tools, communications and enterprise integration.")
 
@@ -950,14 +950,14 @@
 	Created the prototype for the toolbars.  Has been the first to make
 	use of many of the new XEmacs graphics features.
 
-	") (about-xref "Bob Weiner" 'bw "Find out more about Bob Weiner") (insert " <weiner@infodock.com>
+	") (about-xref "Bob Weiner" 'bw "Find out more about Bob Weiner") (insert " <weiner@altrasoft.com>
 	Author of the Hyperbole everyday information management
 	hypertext system and the OO-Browser multi-language code
-	browser.  He also designed the InfoDock integrated tool
+	browser.  He also designed the Altrasoft integrated tool
 	framework for software engineers.  It runs atop XEmacs and is
-	available from his firm, InfoDock Associates, which offers custom
+	available from his firm, Altrasoft, which offers custom
 	development and support packages for corporate users of XEmacs,
-	GNU Emacs and InfoDock.  See \"http://www.infodock.com\".
+	GNU Emacs and InfoDock.  See \"http://www.altrasoft.com\".
 	His interests include user interfaces, information management,
 	CASE tools, communications and enterprise integration.
 
--- a/lisp/prim/auto-autoloads.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/prim/auto-autoloads.el	Mon Aug 13 09:33:18 2007 +0200
@@ -1059,7 +1059,7 @@
 *Switches passed to ls for dired. MUST contain the `l' option.
 Can contain even `F', `b', `i' and `s'.")
 
-(defvar dired-chown-program (if (memq system-type '(hpux dgux usg-unix-v)) "chown" "/etc/chown") "\
+(defvar dired-chown-program (if (memq system-type '(hpux dgux usg-unix-v linux)) "chown" "/etc/chown") "\
 *Name of chown command (usually `chown' or `/etc/chown').")
 
 (defvar dired-gnutar-program nil "\
@@ -3631,7 +3631,7 @@
 ;;;### (autoloads (ksh-mode) "ksh-mode" "modes/ksh-mode.el")
 
 (autoload 'ksh-mode "ksh-mode" "\
-ksh-mode $Revision: 1.24 $ - Major mode for editing (Bourne, Korn or Bourne again)
+ksh-mode $Revision: 1.25 $ - Major mode for editing (Bourne, Korn or Bourne again)
 shell scripts.
 Special key bindings and commands:
 \\{ksh-mode-map}
@@ -4991,7 +4991,7 @@
 
 (autoload 'vhdl-mode "vhdl-mode" "\
 Major mode for editing VHDL code.
-vhdl-mode $Revision: 1.24 $
+vhdl-mode $Revision: 1.25 $
 To submit a problem report, enter `\\[vhdl-submit-bug-report]' from a
 vhdl-mode buffer.  This automatically sets up a mail buffer with version
 information already added.  You just need to add a description of the
@@ -5893,66 +5893,11 @@
 
 ;;;### (autoloads (tags-apropos list-tags tags-query-replace tags-search tags-loop-continue next-file find-tag-other-window find-tag visit-tags-table) "etags" "packages/etags.el")
 
-(defvar tags-build-completion-table 'ask "\
-*If this variable is nil, then tags completion is disabled.
-If this variable is t, then things which prompt for tags will do so with 
- completion across all known tags.
-If this variable is the symbol `ask', then you will be asked whether each
- tags table should be added to the completion list as it is read in.
- (With the exception that for very small tags tables, you will not be asked,
- since they can be parsed quickly.)")
-
-(defvar tags-always-exact nil "\
-*If this variable is non-nil, then tags always looks for exact matches.")
-
-(defvar tag-table-alist nil "\
-*A list which determines which tags files should be active for a 
-given buffer.  This is not really an association list, in that all 
-elements are checked.  The CAR of each element of this list is a 
-pattern against which the buffer's file name is compared; if it 
-matches, then the CDR of the list should be the name of the tags
-table to use.  If more than one element of this list matches the
-buffer's file name, then all of the associated tags tables will be
-used.  Earlier ones will be searched first.
-
-If the CAR of elements of this list are strings, then they are treated
-as regular-expressions against which the file is compared (like the
-auto-mode-alist).  If they are not strings, then they are evaluated.
-If they evaluate to non-nil, then the current buffer is considered to
-match.
-
-If the CDR of the elements of this list are strings, then they are
-assumed to name a TAGS file.  If they name a directory, then the string
-\"TAGS\" is appended to them to get the file name.  If they are not 
-strings, then they are evaluated, and must return an appropriate string.
-
-For example:
-  (setq tag-table-alist
-	'((\"/usr/src/public/perl/\" . \"/usr/src/public/perl/perl-3.0/\")
-	 (\"\\\\.el$\" . \"/usr/local/emacs/src/\")
-	 (\"/jbw/gnu/\" . \"/usr15/degree/stud/jbw/gnu/\")
-	 (\"\" . \"/usr/local/emacs/src/\")
-	 ))
-
-This means that anything in the /usr/src/public/perl/ directory should use
-the TAGS file /usr/src/public/perl/perl-3.0/TAGS; and file ending in .el should
-use the TAGS file /usr/local/emacs/src/TAGS; and anything in or below the
-directory /jbw/gnu/ should use the TAGS file /usr15/degree/stud/jbw/gnu/TAGS.
-A file called something like \"/usr/jbw/foo.el\" would use both the TAGS files
-/usr/local/emacs/src/TAGS and /usr15/degree/stud/jbw/gnu/TAGS (in that order)
-because it matches both patterns.
-
-If the buffer-local variable `buffer-tag-table' is set, then it names a tags
-table that is searched before all others when find-tag is executed from this
-buffer.
-
-If there is a file called \"TAGS\" in the same directory as the file in 
-question, then that tags file will always be used as well (after the
-`buffer-tag-table' but before the tables specified by this list.)
-
-If the variable tags-file-name is set, then the tags file it names will apply
-to all buffers (for backwards compatibility.)  It is searched first.
-")
+(defcustom tags-build-completion-table 'ask "*If this variable is nil, then tags completion is disabled.\nIf this variable is t, then things which prompt for tags will do so with \n completion across all known tags.\nIf this variable is the symbol `ask', then you will be asked whether each\n tags table should be added to the completion list as it is read in.\n (With the exception that for very small tags tables, you will not be asked,\n since they can be parsed quickly.)" :type '(radio (const :tag "Disabled" nil) (const :tag "Complete All" t) (const :tag "Ask" ask)) :group 'etags)
+
+(defcustom tags-always-exact nil "*If this variable is non-nil, then tags always looks for exact matches." :type 'boolean :group 'etags)
+
+(defcustom tag-table-alist nil "*A list which determines which tags files should be active for a \ngiven buffer.  This is not really an association list, in that all \nelements are checked.  The CAR of each element of this list is a \npattern against which the buffer's file name is compared; if it \nmatches, then the CDR of the list should be the name of the tags\ntable to use.  If more than one element of this list matches the\nbuffer's file name, then all of the associated tags tables will be\nused.  Earlier ones will be searched first.\n\nIf the CAR of elements of this list are strings, then they are treated\nas regular-expressions against which the file is compared (like the\nauto-mode-alist).  If they are not strings, then they are evaluated.\nIf they evaluate to non-nil, then the current buffer is considered to\nmatch.\n\nIf the CDR of the elements of this list are strings, then they are\nassumed to name a TAGS file.  If they name a directory, then the string\n\"TAGS\" is appended to them to get the file name.  If they are not \nstrings, then they are evaluated, and must return an appropriate string.\n\nFor example:\n  (setq tag-table-alist\n	'((\"/usr/src/public/perl/\" . \"/usr/src/public/perl/perl-3.0/\")\n	 (\"\\\\.el$\" . \"/usr/local/emacs/src/\")\n	 (\"/jbw/gnu/\" . \"/usr15/degree/stud/jbw/gnu/\")\n	 (\"\" . \"/usr/local/emacs/src/\")\n	 ))\n\nThis means that anything in the /usr/src/public/perl/ directory should use\nthe TAGS file /usr/src/public/perl/perl-3.0/TAGS; and file ending in .el should\nuse the TAGS file /usr/local/emacs/src/TAGS; and anything in or below the\ndirectory /jbw/gnu/ should use the TAGS file /usr15/degree/stud/jbw/gnu/TAGS.\nA file called something like \"/usr/jbw/foo.el\" would use both the TAGS files\n/usr/local/emacs/src/TAGS and /usr15/degree/stud/jbw/gnu/TAGS (in that order)\nbecause it matches both patterns.\n\nIf the buffer-local variable `buffer-tag-table' is set, then it names a tags\ntable that is searched before all others when find-tag is executed from this\nbuffer.\n\nIf there is a file called \"TAGS\" in the same directory as the file in \nquestion, then that tags file will always be used as well (after the\n`buffer-tag-table' but before the tables specified by this list.)\n\nIf the variable tags-file-name is set, then the tags file it names will apply\nto all buffers (for backwards compatibility.)  It is searched first.\n" :type '(repeat (cons regexp sexp)) :group 'etags)
 
 (autoload 'visit-tags-table "etags" "\
 Tell tags commands to use tags table file FILE first.
--- a/lisp/prim/cus-start.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/prim/cus-start.el	Mon Aug 13 09:33:18 2007 +0200
@@ -29,20 +29,92 @@
     (list 'quote sexp)))
 
 ;; The file names below are unreliable, as they are from Emacs 19.34.
-(let ((all '(;; abbrev.c 
-	     (abbrev-all-caps abbrev-mode boolean)
-	     (pre-abbrev-expand-hook abbrev-mode hook)
-	     ;; alloc.c
+(let ((all '(;; boolean
+	     (abbrev-all-caps abbrev boolean)
+	     (allow-deletion-of-last-visible-frame frames boolean)
+	     (debug-on-quit debug boolean)
+	     (delete-auto-save-files auto-save boolean)
+	     (delete-exited-processes processes-basics boolean)
+	     (indent-tabs-mode editing-basics boolean)
+	     (load-ignore-elc-files maint boolean)
+	     (load-warn-when-source-newer maint boolean)
+	     (load-warn-when-source-only maint boolean)
+	     (modifier-keys-are-sticky keyboard boolean)
+	     (no-redraw-on-reenter display boolean)
+	     (scroll-on-clipped-lines display boolean)
+	     (truncate-partial-width-windows display boolean)
+	     (visible-bell sound boolean)
+	     (x-allow-sendevents x boolean)
+	     (zmacs-regions editing-basics boolean)
+	     ;; integer
+	     (auto-save-interval auto-save integer)
+	     (bell-volume sound integer)
+	     (echo-keystrokes keyboard integer)
 	     (gc-cons-threshold alloc integer)
-	     ;; buffer.c
-	     (modeline-format modeline sexp) ;Hard to do right.
-	     (default-major-mode internal function)
+	     (next-screen-context-lines display integer)
+	     (scroll-step windows integer)
+	     (window-min-height windows integer)
+	     (window-min-width windows integer)
+	     ;; object
+	     (auto-save-file-format auto-save
+				    (choice (const :tag "Normal" t)
+					    (repeat (symbol :tag "Format"))))
+	     (completion-ignored-extensions minibuffer
+					    (repeat
+					     (string :format "%v")))
+	     (debug-on-error debug  (choice (const :tag "off" nil)
+					    (const :tag "Always" t)
+					    (repeat :menu-tag "When"
+						    :value (nil)
+						    (symbol
+						     :tag "Condition"))))
+	     (debug-on-signal debug (choice (const :tag "off" nil)
+					    (const :tag "Always" t)
+					    (repeat :menu-tag "When"
+						    :value (nil)
+						    (symbol
+						     :tag "Condition"))))
+	     (exec-path processes-basics (repeat
+					  (choice :tag "Directory"
+						  (const :tag "Default" nil)
+						  (directory :format "%v"))))
+	     (file-name-handler-alist data (repeat
+					    (cons regexp
+						  (function :tag "Handler"))))
+	     (shell-file-name execute file)
+	     (stack-trace-on-error debug (choice (const :tag "off" nil)
+					    (const :tag "Always" t)
+					    (repeat :menu-tag "When"
+						    :value (nil)
+						    (symbol
+						     :tag "Condition"))))
+	     (stack-trace-on-signal debug (choice (const :tag "off" nil)
+					    (const :tag "Always" t)
+					    (repeat :menu-tag "When"
+						    :value (nil)
+						    (symbol
+						     :tag "Condition"))))
+	     ;; buffer-local
 	     (case-fold-search matching boolean)
+	     (ctl-arrow display (choice (integer 160)
+					(sexp :tag "160 (default)"
+					      :format "%t\n")))
 	     (fill-column fill integer)
 	     (left-margin fill integer)
 	     (tab-width editing-basics integer)
-	     (ctl-arrow display boolean)
 	     (truncate-lines display boolean)
+	     ;; not documented as user-options, but should still be
+	     ;; customizable:
+	     (default-frame-plist frames (repeat
+					  (list :inline t
+						:format "%v"
+						(symbol :tag "Parameter")
+						(sexp :tag "Value"))))
+	     (help-char keyboard character)
+	     (max-lisp-eval-depth limits integer)
+	     (max-specpdl-size limits integer)
+	     (meta-prefix-char keyboard character)
+	     (parse-sexp-ignore-comments editing-basics boolean)
 	     (selective-display display 
 				(choice (const :tag "off" nil)
 					(integer :tag "space"
@@ -50,66 +122,14 @@
 						 1)
 					(const :tag "on" t)))
 	     (selective-display-ellipses display boolean)
-	     ;; callproc.c
-	     (shell-file-name execute file)
-	     (exec-path execute
-			(repeat (choice (const :tag "default" nil)
-					(file :format "%v"))))
-	     ;; dired.c
-	     (completion-ignored-extensions dired 
-					    (repeat (string :format "%v")))
-	     ;; dispnew.el
-	     (visible-bell display boolean)
-	     (no-redraw-on-reenter display boolean)
-	     ;; eval.c
-	     (max-specpdl-size limits integer)
-	     (max-lisp-eval-depth limits integer)
-	     (stack-trace-on-error debug
-				   (choice (const :tag "off")
-					   (repeat :menu-tag "When"
-						   :value (nil)
-						   (symbol :format "%v"))
-					   (const :tag "always" t)))
-	     (debug-on-error debug 
-			     (choice (const :tag "off")
-				     (repeat :menu-tag "When"
-					     :value (nil)
-					     (symbol :format "%v"))
-				     (const :tag "always" t)))
-	     (debug-on-quit debug choice)
-	     ;; frame.c
-	     (default-frame-plist frames
-	       (repeat (cons :format "%v"
-			     (symbol :tag "Parameter")
-			     (sexp :tag "Value"))))
-	     ;; indent.c
-	     (indent-tabs-mode fill boolean)
-	     ;; keyboard.c
-	     (meta-prefix-char keyboard character)
-	     (auto-save-interval auto-save integer)
-	     (echo-keystrokes minibuffer boolean)
-	     (help-char keyboard character)
-	     ;; lread.c
-	     (load-path environment 
-			(repeat (choice :tag "Directory"
-					(const :tag "default" nil)
-					(directory :format "%v"))))
-	     ;; process.c
-	     (delete-exited-processes proces-basics boolean)
-	     ;; syntax.c
-	     (parse-sexp-ignore-comments editing-basics boolean)
+	     (signal-error-on-buffer-boundary internal boolean)
 	     (words-include-escapes editing-basics boolean)
-	     ;; window.c
-	     (temp-buffer-show-function windows function)
-	     (next-screen-context-lines windows boolean)
-	     (window-min-height windows integer)
-	     (window-min-width windows integer)
-	     ;; xdisp.c
-	     (scroll-step windows integer)
-	     (truncate-partial-width-windows display boolean)
-	     ;; xfns.c
-	     (x-bitmap-file-path installation
-				 (repeat (directory :format "%v")))))
+	     (temp-buffer-show-function
+	      windows (radio (function-item :tag "Temp Buffers Always in Same Frame"
+					    :format "%t\n"
+					    show-temp-buffer-in-current-frame)
+			     (const :tag "Temp Buffers Like Other Buffers" nil)
+			     (function :tag "Other")))))
       this symbol group type)
   (while all 
     (setq this (car all)
--- a/lisp/prim/custom-load.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/prim/custom-load.el	Mon Aug 13 09:33:18 2007 +0200
@@ -13,7 +13,6 @@
 (put 'recent-files-menu 'custom-loads '("recent-files"))
 (put 'url 'custom-loads '("url-gw" "url-irc" "url-vars" "url"))
 (put 'custom-faces 'custom-loads '("cus-edit"))
-(put 'abbrev-mode 'custom-loads '())
 (put 'execute 'custom-loads '())
 (put 'gnus-message 'custom-loads '("message"))
 (put 'mouse 'custom-loads '("mouse" "outl-mouse" "avoid"))
@@ -24,6 +23,7 @@
 (put 'tex 'custom-loads '("texnfo-tex"))
 (put 'ssl 'custom-loads '("ssl"))
 (put 'tcl 'custom-loads '("tcl"))
+(put 'etags 'custom-loads '("etags"))
 (put 'limits 'custom-loads '())
 (put 'igrep 'custom-loads '("igrep"))
 (put 'telnet 'custom-loads '("telnet"))
@@ -36,6 +36,7 @@
 (put 'gnus-extract-archive 'custom-loads '("gnus-uu"))
 (put 'html 'custom-loads '("psgml-html"))
 (put 'cc-style 'custom-loads '("cc-mode"))
+(put 'icon 'custom-loads '("icon"))
 (put 'gnus-article-headers 'custom-loads '("gnus-art" "gnus-sum"))
 (put 'holidays 'custom-loads '("calendar"))
 (put 'texinfo 'custom-loads '("texinfo" "texnfo-tex"))
@@ -70,7 +71,7 @@
 (put 'docs 'custom-loads '("texinfo" "hyper-apropos" "makeinfo"))
 (put 'lisp-indent 'custom-loads '("cl-indent"))
 (put 'completion 'custom-loads '("completion"))
-(put 'tools 'custom-loads '("ediff" "make-mode" "add-log" "diff" "func-menu" "generic-sc" "rcompile"))
+(put 'tools 'custom-loads '("ediff" "make-mode" "add-log" "diff" "etags" "func-menu" "generic-sc" "rcompile"))
 (put 'cc-comment 'custom-loads '("cc-mode"))
 (put 'url-cookie 'custom-loads '("url-cookie" "url-vars"))
 (put 'uniquify 'custom-loads '("uniquify"))
@@ -89,7 +90,6 @@
 (put 'lisp 'custom-loads '("edebug" "cl-indent" "elp"))
 (put 'jka-compr 'custom-loads '("jka-compr"))
 (put 'rlogin 'custom-loads '("rlogin"))
-(put 'proces-basics 'custom-loads '())
 (put 'diff 'custom-loads '("diff"))
 (put 'shell-faces 'custom-loads '("shell"))
 (put 'sh-script 'custom-loads '("sh-script"))
@@ -106,7 +106,7 @@
 (put 'ediff-diff 'custom-loads '("ediff-diff"))
 (put 'applications 'custom-loads '("cus-edit" "uniquify"))
 (put 'outlines 'custom-loads '("outl-mouse" "whitespace-mode"))
-(put 'paren-matching 'custom-loads '("simple" "paren"))
+(put 'paren-matching 'custom-loads '("paren"))
 (put 'time-stamp 'custom-loads '("time-stamp"))
 (put 'gnus-summary-maneuvering 'custom-loads '("gnus-sum"))
 (put 'avoid 'custom-loads '("avoid"))
@@ -120,19 +120,17 @@
 (put 'keyboard 'custom-loads '())
 (put 'minubuffer 'custom-loads '("minibuf"))
 (put 'asm 'custom-loads '("asm-mode"))
-(put 'installation 'custom-loads '())
 (put 'url-gateway 'custom-loads '("url-gw"))
 (put 'gnus-article-various 'custom-loads '("gnus-art" "gnus-sum"))
 (put 'mh-hook 'custom-loads '("mh-e"))
 (put 'message-sending 'custom-loads '("message"))
 (put 'w3-files 'custom-loads '("w3-cus"))
 (put 'widget-browse 'custom-loads '("wid-browse"))
-(put 'data 'custom-loads '("auto-save" "crypt" "jka-compr" "recent-files" "saveplace" "time-stamp"))
+(put 'data 'custom-loads '("auto-save" "jka-compr" "recent-files" "saveplace" "time-stamp"))
 (put 'gnus-article 'custom-loads '("gnus-art" "gnus-cite"))
 (put 'edebug 'custom-loads '("edebug"))
 (put 'ps-print 'custom-loads '("ps-print"))
 (put 'cc-indent 'custom-loads '("cc-mode"))
-(put 'compression 'custom-loads '("jka-compr"))
 (put 'comm 'custom-loads '("ssl"))
 (put 'gnus 'custom-loads '("gnus-art" "gnus-async" "gnus-cache" "gnus-demon" "gnus-dup" "gnus-eform" "gnus-uu" "gnus-win" "gnus-xmas" "gnus" "nnmail"))
 (put 'ps-print-font 'custom-loads '("ps-print"))
@@ -149,6 +147,7 @@
 (put 'customize 'custom-loads '("wid-edit" "cus-face" "cus-edit"))
 (put 'w3-printing 'custom-loads '("w3-cus"))
 (put 'nnmail-duplicate 'custom-loads '("nnmail"))
+(put 'verilog 'custom-loads '("verilog-mode"))
 (put 'supercite-attr 'custom-loads '("supercite"))
 (put 'gnus-summary-visual 'custom-loads '("gnus-sum" "gnus"))
 (put 'w3-images 'custom-loads '("w3-cus"))
@@ -186,7 +185,6 @@
 (put 'smtpmail 'custom-loads '("smtpmail"))
 (put 'message-news 'custom-loads '("message"))
 (put 'paren-blinking 'custom-loads '("simple"))
-(put 'vrml-mode 'custom-loads '("vrml-mode"))
 (put 'vrml 'custom-loads '("vrml-mode"))
 (put 'games 'custom-loads '("xmine"))
 (put 'gnus-edit-form 'custom-loads '("gnus-eform"))
@@ -213,10 +211,10 @@
 (put 'message-various 'custom-loads '("message"))
 (put 'resize-minibuffer 'custom-loads '("rsz-minibuf"))
 (put 'gnus-group-levels 'custom-loads '("gnus-group"))
-(put 'languages 'custom-loads '("cus-edit" "asm-mode" "fortran" "pascal" "prolog" "rexx-mode" "sh-script" "tcl" "verilog-mode" "vrml-mode" "xrdb-mode" "psgml"))
+(put 'languages 'custom-loads '("cus-edit" "asm-mode" "fortran" "icon" "pascal" "prolog" "rexx-mode" "sh-script" "tcl" "verilog-mode" "vrml-mode" "xrdb-mode" "psgml"))
 (put 'gnus-summary-format 'custom-loads '("gnus-sum"))
 (put 'gnus-score-decay 'custom-loads '("gnus-score"))
-(put 'fill 'custom-loads '())
+(put 'fill 'custom-loads '("filladapt"))
 (put 'balloon-help 'custom-loads '("balloon-help"))
 (put 'gnus-extract-post 'custom-loads '("gnus-uu"))
 (put 'debug 'custom-loads '())
@@ -237,7 +235,7 @@
 (put 'enriched 'custom-loads '("enriched"))
 (put 'gnus-article-highlight 'custom-loads '("gnus-art"))
 (put 'emacs 'custom-loads '("cus-edit"))
-(put 'processes 'custom-loads '("background" "comint" "rlogin" "shell" "cus-edit" "executable" "gnuserv" "igrep" "ispell" "rcompile" "passwd"))
+(put 'processes 'custom-loads '("background" "comint" "rlogin" "shell" "cus-edit" "executable" "gnuserv" "ispell" "rcompile" "passwd"))
 (put 'news 'custom-loads '("gnus" "message" "supercite" "highlight-headers"))
 (put 'rexx 'custom-loads '("rexx-mode"))
 (put 'w3-hooks 'custom-loads '("w3-cus"))
@@ -263,12 +261,13 @@
 (put 'gnus-summary-marks 'custom-loads '("gnus-sum"))
 (put 'appt 'custom-loads '("appt"))
 (put 'picons 'custom-loads '("gnus-picon"))
+(put 'processes-basics 'custom-loads '())
 (put 'nnmail-prepare 'custom-loads '("nnmail"))
 (put 'whitespace 'custom-loads '("whitespace-mode"))
 (put 'w3-display 'custom-loads '("w3-cus"))
 (put 'w3-parsing 'custom-loads '("w3-cus"))
 (put 'message-buffers 'custom-loads '("message"))
-(put 'editing 'custom-loads '("simple" "cus-edit" "filladapt"))
+(put 'editing 'custom-loads '("simple" "cus-edit"))
 (put 'matching 'custom-loads '("simple" "isearch-mode" "whitespace-mode" "bookmark" "completion"))
 (put 'ediff 'custom-loads '("ediff-diff" "ediff-merg" "ediff-mult" "ediff-ptch" "ediff-wind" "ediff"))
 (put 'gnus-article-mime 'custom-loads '("gnus-art" "gnus-sum"))
@@ -277,6 +276,6 @@
 (put 'info 'custom-loads '("info"))
 (put 'w3-scripting 'custom-loads '("w3-script"))
 (put 'unix 'custom-loads '("rlogin" "shell" "sh-script"))
+(put 'x 'custom-loads '())
 (put 't 'custom-loads '("ps-print"))
 (put 'c 'custom-loads '("cc-mode" "cmacexp"))
-(put 'verilog-mode 'custom-loads '("verilog-mode"))
--- a/lisp/prim/featurep.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/prim/featurep.el	Mon Aug 13 09:33:18 2007 +0200
@@ -41,7 +41,8 @@
 (defun featurep (fexp)
   "Return non-nil if feature expression FEXP is true."
   (typecase fexp
-    (symbol (memq fexp features))       ;original definition
+    (symbol (and (memq fexp features)       ;original definition
+		 t))
     (number (>= (or featurep-emacs-version
                     (setq featurep-emacs-version
                       (+ emacs-major-version
--- a/lisp/prim/files-nomule.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/prim/files-nomule.el	Mon Aug 13 09:33:18 2007 +0200
@@ -48,6 +48,7 @@
 
 (defun write-region (start end filename &optional append visit lockname coding-system)
   "Write current region into specified file.
+By default, the file's existing contents are replaced by the specified region.
 When called from a program, takes three arguments:
 START, END and FILENAME.  START and END are buffer positions.
 Optional fourth argument APPEND if non-nil means
--- a/lisp/prim/fill.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/prim/fill.el	Mon Aug 13 09:33:18 2007 +0200
@@ -392,6 +392,7 @@
 	      (end-of-line)))
 	  ;; end patch
 	  (goto-char from)
+	  (skip-chars-forward " \t")
  	  (if (and nosqueeze (not (eq justify 'full)))
 	      nil
 	    (canonically-space-region (or squeeze-after (point)) (point-max))
--- a/lisp/prim/isearch-mode.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/prim/isearch-mode.el	Mon Aug 13 09:33:18 2007 +0200
@@ -99,9 +99,9 @@
 
 
 (defun isearch-char-to-string (c)
-  (if (integerp c)
-      (make-string 1 c)
-    (make-string 1 (event-to-character c nil nil t))))
+  (if (eventp c) 
+      (make-string 1 (event-to-character c nil nil t))
+    (make-string 1 c)))
 
 ;(defun isearch-text-char-description (c)
 ;  (isearch-char-to-string c))
--- a/lisp/prim/obsolete.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/prim/obsolete.el	Mon Aug 13 09:33:18 2007 +0200
@@ -46,14 +46,14 @@
   (make-compatible oldfun newfun))
 
 (defsubst define-obsolete-variable-alias (oldvar newvar)
-  "Define OLDVAR as an obsolete alias for varction NEWVAR.
+  "Define OLDVAR as an obsolete alias for variable NEWVAR.
 This makes referencing or setting OLDVAR equivalent to referencing or
 setting NEWVAR and marks OLDVAR as obsolete."
   (defvaralias oldvar newvar)
   (make-obsolete-variable oldvar newvar))
 
 (defsubst define-compatible-variable-alias (oldvar newvar)
-  "Define OLDVAR as a compatible alias for varction NEWVAR.
+  "Define OLDVAR as a compatible alias for variable NEWVAR.
 This makes referencing or setting OLDVAR equivalent to referencing or
 setting NEWVAR and marks OLDVAR as provided for compatibility only."
   (defvaralias oldvar newvar)
--- a/lisp/prim/simple.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/prim/simple.el	Mon Aug 13 09:33:18 2007 +0200
@@ -72,11 +72,6 @@
   :prefix "paren-"
   :group 'matching)
 
-(defgroup paren-blinking nil
-  "Blinking of matched parens."
-  :prefix "blink-"
-  :group 'paren-matching)
-
 
 (defun newline (&optional arg)
   "Insert a newline, and move to left margin of the new line if it's blank.
--- a/lisp/tm/tm-vm.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/tm/tm-vm.el	Mon Aug 13 09:33:18 2007 +0200
@@ -9,7 +9,7 @@
 ;;         Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
 ;; Maintainer: Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
 ;; Created: 1994/10/29
-;; Version: $Revision: 1.4 $
+;; Version: $Revision: 1.5 $
 ;; Keywords: mail, MIME, multimedia, multilingual, encoded-word
 
 ;; This file is part of tm (Tools for MIME).
@@ -103,7 +103,7 @@
 ;;; @@ System/Information variables
 
 (defconst tm-vm/RCS-ID
-  "$Id: tm-vm.el,v 1.4 1997/04/13 03:14:15 steve Exp $")
+  "$Id: tm-vm.el,v 1.5 1997/05/09 03:28:15 steve Exp $")
 (defconst tm-vm/version (get-version-string tm-vm/RCS-ID))
 
 ; Ensure vm-menu-mail-menu gets properly defined *before* tm-vm/vm-emulation-map
@@ -1169,6 +1169,8 @@
 
 ;;; @@@ multipart/digest
 
+(fset 'vm-unsaved-message 'message)
+
 (defun tm-vm/enclose-messages (mlist &optional preamble)
   "Enclose the messages in MLIST as multipart/digest.
 The resulting digest is inserted at point in the current buffer.
--- a/lisp/version.el	Mon Aug 13 09:32:45 2007 +0200
+++ b/lisp/version.el	Mon Aug 13 09:33:18 2007 +0200
@@ -25,7 +25,7 @@
 (defconst emacs-version "20.2"
   "Version numbers of this version of Emacs.")
 
-(setq emacs-version (purecopy (concat emacs-version " XEmacs Lucid (beta4)")))
+(setq emacs-version (purecopy (concat emacs-version " XEmacs Lucid (beta5)")))
 
 (defconst emacs-major-version
   (progn (or (string-match "^[0-9]+" emacs-version)
--- a/man/ChangeLog	Mon Aug 13 09:32:45 2007 +0200
+++ b/man/ChangeLog	Mon Aug 13 09:33:18 2007 +0200
@@ -1,3 +1,13 @@
+Tue May  6 21:33:06 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* lispref/files.texi (Writing to Files): Correct docstring of
+	write-region.
+
+Sun May  4 14:28:32 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* lispref/annotations.texi (Annotation Primitives):
+	`delete-annotation' does not return the deleted annotation.
+
 Wed Apr 30 18:13:16 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* lispref/lispref.texi: Correct release dates.
--- a/man/gnus.texi	Mon Aug 13 09:32:45 2007 +0200
+++ b/man/gnus.texi	Mon Aug 13 09:33:18 2007 +0200
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Gnus 5.4.50 Manual
+@settitle Gnus 5.4.51 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -287,7 +287,7 @@
 @tex
 
 @titlepage
-@title Gnus 5.4.50 Manual
+@title Gnus 5.4.51 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -323,7 +323,7 @@
 spool or your mbox file.  All at the same time, if you want to push your
 luck.
 
-This manual corresponds to Gnus 5.4.50.
+This manual corresponds to Gnus 5.4.51.
 
 @end ifinfo
 
@@ -5230,6 +5230,23 @@
 @code{Archive-name} line and use that as a suggestion for the file
 name. 
 
+Here's an example function to clean up file names somewhat.  If you have
+lots of mail groups that are called things like
+@samp{nnml:mail.whatever}, you may want to chop off the beginning of
+these group names before creating the file name to save to.  The
+following will do just that:
+
+1@lisp
+(defun my-save-name (group)
+  (when (string-match "^nnml:mail." group)
+    (substring group (match-end 0))))
+
+(setq gnus-split-methods
+      '((gnus-article-archive-name)
+        (my-save-name)))
+@end lisp
+
+
 @vindex gnus-use-long-file-name
 Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
 @code{nil}, all the preceding functions will replace all periods
--- a/man/lispref/annotations.texi	Mon Aug 13 09:32:45 2007 +0200
+++ b/man/lispref/annotations.texi	Mon Aug 13 09:33:18 2007 +0200
@@ -142,7 +142,7 @@
 
 @defun delete-annotation annotation
 This function removes @var{annotation} from its buffer.  This does not
-modify the buffer text.  The annotation deleted is returned.
+modify the buffer text.
 @end defun
 
 @defun annotationp annotation
--- a/man/lispref/files.texi	Mon Aug 13 09:32:45 2007 +0200
+++ b/man/lispref/files.texi	Mon Aug 13 09:33:18 2007 +0200
@@ -455,8 +455,8 @@
 @deffn Command append-to-file start end filename
 This function appends the contents of the region delimited by
 @var{start} and @var{end} in the current buffer to the end of file
-@var{filename}.  If that file does not exist, it is created.  This
-function returns @code{nil}.
+@var{filename}.  If that file does not exist, it is created.  If that
+file exists it is overwritten.  This function returns @code{nil}.
 
 An error is signaled if @var{filename} specifies a nonwritable file,
 or a nonexistent file in a directory where files cannot be created.
--- a/man/message.texi	Mon Aug 13 09:32:45 2007 +0200
+++ b/man/message.texi	Mon Aug 13 09:33:18 2007 +0200
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Message 5.4.50 Manual
+@settitle Message 5.4.51 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -39,7 +39,7 @@
 @tex
 
 @titlepage
-@title Message 5.4.50 Manual
+@title Message 5.4.51 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -79,7 +79,7 @@
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Message 5.4.50.  Message is distributed with
+This manual corresponds to Message 5.4.51.  Message is distributed with
 the Gnus distribution bearing the same version number as this manual
 has. 
 
--- a/src/ChangeLog	Mon Aug 13 09:32:45 2007 +0200
+++ b/src/ChangeLog	Mon Aug 13 09:33:18 2007 +0200
@@ -1,3 +1,24 @@
+Thu May  8 19:10:03 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* frame.c: Change internal type of
+	`allow-deletion-of-last-visible-frame' to boolean.
+
+	* buffer.c: Change internal type of `delete-auto-save-files' to
+	boolean.
+
+Sat May  3 15:28:56 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* redisplay.c: `column-number-start-at-one' is a user customizable
+	variable.
+
+	* event-stream.c (vars_of_event_stream): `focus-follows-mouse' is
+	a user customizable variable.
+
+	* cmds.c (vars_of_cmds): `signal-error-on-buffer-boundary' is a
+	user customizable variable.
+
+	* lread.c (parse_integer): Fix incorrect upper bounds on loop.
+
 Thu May  1 18:59:20 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* glyphs-x.c (Fmake_subwindow): Update error message.
--- a/src/buffer.c	Mon Aug 13 09:32:45 2007 +0200
+++ b/src/buffer.c	Mon Aug 13 09:33:18 2007 +0200
@@ -166,7 +166,7 @@
 Lisp_Object Vkill_buffer_query_functions;
 
 /* Non-nil means delete a buffer's auto-save file when the buffer is saved. */
-Lisp_Object Vdelete_auto_save_files;
+int Vdelete_auto_save_files;
 
 Lisp_Object Qbuffer_live_p;
 Lisp_Object Qbuffer_or_string_p;
@@ -1384,7 +1384,7 @@
 	&& b->auto_save_modified != 0
 	&& BUF_SAVE_MODIFF (b) < b->auto_save_modified)
       {
-	if (!NILP (Vdelete_auto_save_files))
+	if (Vdelete_auto_save_files != 0)
 	  {
 	    /* deleting the auto save file might kill b! */
 	    /* #### dmoore - fix this crap, we do this same gcpro and
@@ -2088,10 +2088,10 @@
 */ );
   Vkill_buffer_query_functions = Qnil;
 
-  DEFVAR_LISP ("delete-auto-save-files", &Vdelete_auto_save_files /*
+  DEFVAR_BOOL ("delete-auto-save-files", &Vdelete_auto_save_files /*
 *Non-nil means delete auto-save file when a buffer is saved or killed.
 */ );
-  Vdelete_auto_save_files = Qt;
+  Vdelete_auto_save_files = 1;
 }
 
 /* DOC is ignored because it is snagged and recorded externally 
--- a/src/cmds.c	Mon Aug 13 09:32:45 2007 +0200
+++ b/src/cmds.c	Mon Aug 13 09:33:18 2007 +0200
@@ -492,7 +492,7 @@
   Vblink_paren_function = Qnil;
 
   DEFVAR_BOOL ("signal-error-on-buffer-boundary", &signal_error_on_buffer_boundary /*
-t means beep when movement would take point past (point-min) or
+*t means beep when movement would take point past (point-min) or
 \(point-max).
 */ );
   signal_error_on_buffer_boundary = 1;
--- a/src/event-stream.c	Mon Aug 13 09:32:45 2007 +0200
+++ b/src/event-stream.c	Mon Aug 13 09:33:18 2007 +0200
@@ -4281,9 +4281,10 @@
   Vpre_idle_hook = Qnil;
 
   DEFVAR_BOOL ("focus-follows-mouse", &focus_follows_mouse /*
-Variable to control XEmacs behavior with respect to focus changing.
+*Variable to control XEmacs behavior with respect to focus changing.
 If this variable is set to t, then XEmacs will not gratuitously change
-the keyboard focus.
+the keyboard focus.  XEmacs cannot in general detect when this mode is
+use by the window manager, so it is up to the user to set it.
 */ );
   focus_follows_mouse = 0;
 
--- a/src/frame.c	Mon Aug 13 09:32:45 2007 +0200
+++ b/src/frame.c	Mon Aug 13 09:33:18 2007 +0200
@@ -53,7 +53,7 @@
 Lisp_Object Vmouse_leave_frame_hook, Qmouse_leave_frame_hook;
 Lisp_Object Vmap_frame_hook, Qmap_frame_hook;
 Lisp_Object Vunmap_frame_hook, Qunmap_frame_hook;
-Lisp_Object Vallow_deletion_of_last_visible_frame;
+int  Vallow_deletion_of_last_visible_frame;
 #if defined (HAVE_CDE) || defined (HAVE_OFFIX_DND)
 Lisp_Object Vdrag_and_drop_functions, Qdrag_and_drop_functions;
 #endif
@@ -1256,7 +1256,7 @@
      deleting all frames which were either visible or iconified and thus
      losing any way of communicating with the still running XEmacs process.
      So we put it back.  */
-  if (!force && NILP (Vallow_deletion_of_last_visible_frame) &&
+  if (!force && !Vallow_deletion_of_last_visible_frame &&
       !other_visible_frames_internal (f, called_from_delete_device))
     error ("Attempt to delete the sole visible or iconified frame");
 
@@ -3007,11 +3007,11 @@
 */ );
   Vunmap_frame_hook = Qnil;
 
-  DEFVAR_LISP ("allow-deletion-of-last-visible-frame",
+  DEFVAR_BOOL ("allow-deletion-of-last-visible-frame",
 	       &Vallow_deletion_of_last_visible_frame /*
 *Non-nil means to assume the force option to delete-frame.
 */ );
-  Vallow_deletion_of_last_visible_frame = Qnil;
+  Vallow_deletion_of_last_visible_frame = 0;
 
 #if defined (HAVE_CDE) || defined (HAVE_OFFIX_DND)
   DEFVAR_LISP ("drag-and-drop-functions", &Vdrag_and_drop_functions /*
--- a/src/lread.c	Mon Aug 13 09:32:45 2007 +0200
+++ b/src/lread.c	Mon Aug 13 09:33:18 2007 +0200
@@ -1847,7 +1847,7 @@
   if (p == lim)
     goto loser;
 
-  for (; p < lim; p++)
+  for (; (p < lim) && (*p != '\0'); p++)
     {
       int c = *p;
       unsigned EMACS_INT onum;
--- a/src/redisplay.c	Mon Aug 13 09:32:45 2007 +0200
+++ b/src/redisplay.c	Mon Aug 13 09:33:18 2007 +0200
@@ -8320,7 +8320,7 @@
   Vredisplay_end_trigger_functions = Qnil;
 
   DEFVAR_BOOL ("column-number-start-at-one", &column_number_start_at_one /*
-Non-nil means column display number starts at 1.
+*Non-nil means column display number starts at 1.
 */ );
   column_number_start_at_one = 1;
 }