*** pub/pgnus/lisp/base64.el	Wed Jan  5 17:09:35 2000
--- pgnus/lisp/base64.el	Thu Apr 20 01:31:02 2000
***************
*** 25,30 ****
--- 25,32 ----
  ;;; Boston, MA 02111-1307, USA.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
+ (eval-when-compile (require 'cl))
+ 
  ;; For non-MULE
  (if (not (fboundp 'char-int))
      (fset 'char-int 'identity))
*** pub/pgnus/lisp/fill-flowed.el	Thu Apr 20 01:31:48 2000
--- pgnus/lisp/fill-flowed.el	Thu Apr 20 01:31:03 2000
***************
*** 0 ****
--- 1,94 ----
+ ;;; fill-flowed.el --- interprete RFC2646 "flowed" text
+ ;; Copyright (C) 2000 Free Software Foundation, Inc.
+ 
+ ;; Author: Simon Josefsson <jas@pdc.kth.se>
+ ;; Keywords: mail
+ 
+ ;; This program is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 2 of the License, or
+ ;; (at your option) any later version.
+ ;;
+ ;; This program is distributed in the hope that it will be useful,
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ;; GNU General Public License for more details.
+ ;;
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with this program; if not, write to the Free Software
+ ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ 
+ ;;; Commentary:
+ 
+ ;; This implement decoding of RFC2646 formatted text, including the
+ ;; quoted-depth wins rules.
+ 
+ ;; Theory of operation: search for lines ending with SPC, save quote
+ ;; length of line, remove SPC and concatenate line with the following
+ ;; line if quote length of following line matches current line.
+ 
+ ;; When no further concatenations are possible, we've found a
+ ;; paragraph and we let `fill-region' fill the long line into several
+ ;; lines with the quote prefix as `fill-prefix'.
+ 
+ ;; Todo: encoding
+ 
+ ;; History:
+ 
+ ;; 2000-02-17  posted on ding mailing list
+ ;; 2000-02-19  use `point-at-{b,e}ol' in XEmacs
+ ;; 2000-03-11  no compile warnings for point-at-bol stuff
+ ;; 2000-03-26  commited to gnus cvs
+ 
+ ;;; Code:
+ 
+ (eval-and-compile
+   (fset 'fill-flowed-point-at-bol
+ 	(if (fboundp 'point-at-bol)
+ 	    'point-at-bol
+ 	  'line-beginning-position))
+   
+   (fset 'fill-flowed-point-at-eol
+ 	(if (fboundp 'point-at-eol)
+ 	    'point-at-eol
+ 	  'line-end-position)))
+ 
+ (defun fill-flowed (&optional buffer)
+   (save-excursion
+     (set-buffer (or (current-buffer) buffer))
+     (goto-char (point-min))
+     (while (re-search-forward " $" nil t)
+       (when (save-excursion
+ 	      (beginning-of-line)
+ 	      (looking-at "^\\(>*\\)\\( ?\\)"))
+ 	(let ((quote (match-string 1)))
+ 	  (if (string= quote "")
+ 	      (setq quote nil))
+ 	  (when (and quote (string= (match-string 2) ""))
+ 	    (save-excursion
+ 	      ;; insert SP after quote for pleasant reading of quoted lines
+ 	      (beginning-of-line)
+ 	      (when (> (skip-chars-forward ">") 0)
+ 		(insert " "))))
+ 	  (while (and (save-excursion
+ 			(backward-char 3)
+ 			(looking-at "[^-][^-] "))
+ 		      (save-excursion
+ 			(unless (eobp)
+ 			  (forward-char 1)
+ 			  (if quote
+ 			      (looking-at (format "^\\(%s\\)\\([^>]\\)" quote))
+ 			    (looking-at "^ ?")))))
+ 	    (save-excursion
+ 	      (replace-match (if (string= (match-string 2) " ")
+ 				 "" "\\2")))
+ 	    (backward-delete-char -1)
+ 	    (end-of-line))
+ 	  (let ((fill-prefix (when quote (concat quote " "))))
+ 	    (fill-region (fill-flowed-point-at-bol)
+ 			 (fill-flowed-point-at-eol)
+ 			 'left 'nosqueeze)))))))
+ 
+ (provide 'fill-flowed)
+ 
+ ;;; fill-flowed.el ends here
*** pub/pgnus/lisp/gnus-agent.el	Wed Jan  5 17:09:36 2000
--- pgnus/lisp/gnus-agent.el	Thu Apr 20 01:31:04 2000
***************
*** 611,617 ****
         new))
      (gnus-make-directory (file-name-directory file))
      (let ((coding-system-for-write gnus-agent-file-coding-system))
!       (gnus-write-active-file file orig))))
  
  (defun gnus-agent-save-groups (method)
    (gnus-agent-save-active-1 method 'gnus-groups-to-gnus-format))
--- 611,619 ----
         new))
      (gnus-make-directory (file-name-directory file))
      (let ((coding-system-for-write gnus-agent-file-coding-system))
!       ;; The hashtable contains real names of groups,  no more prefix
!       ;; removing, so set `full' to `t'.
!       (gnus-write-active-file file orig t))))
  
  (defun gnus-agent-save-groups (method)
    (gnus-agent-save-active-1 method 'gnus-groups-to-gnus-format))
***************
*** 619,625 ****
  (defun gnus-agent-save-group-info (method group active)
    (when (gnus-agent-method-p method)
      (let* ((gnus-command-method method)
! 	   (file (gnus-agent-lib-file "active")))
        (gnus-make-directory (file-name-directory file))
        (with-temp-file file
  	(when (file-exists-p file)
--- 621,628 ----
  (defun gnus-agent-save-group-info (method group active)
    (when (gnus-agent-method-p method)
      (let* ((gnus-command-method method)
! 	   (file (gnus-agent-lib-file "active"))
! 	   oactive)
        (gnus-make-directory (file-name-directory file))
        (with-temp-file file
  	(when (file-exists-p file)
***************
*** 627,635 ****
  	(goto-char (point-min))
  	(when (re-search-forward
  	       (concat "^" (regexp-quote group) " ") nil t)
  	  (gnus-delete-line))
! 	(insert (format "%S %d %d y\n" (intern group) (cdr active)
! 			(car active)))
  	(goto-char (point-max))
  	(while (search-backward "\\." nil t)
  	  (delete-char 1))))))
--- 630,646 ----
  	(goto-char (point-min))
  	(when (re-search-forward
  	       (concat "^" (regexp-quote group) " ") nil t)
+ 	  (save-excursion
+ 	    (save-restriction
+ 	      (narrow-to-region (match-beginning 0)
+ 				(progn
+ 				  (forward-line 1)
+ 				  (point)))
+ 	      (setq oactive (car (nnmail-parse-active)))))
  	  (gnus-delete-line))
! 	(insert (format "%S %d %d y\n" (intern group)
! 			(cdr active)
! 			(or (car oactive) (car active))))
  	(goto-char (point-max))
  	(while (search-backward "\\." nil t)
  	  (delete-char 1))))))
***************
*** 865,871 ****
  			     (cdr (gnus-active group)))))))
      ;; Fetch them.
      (gnus-make-directory (nnheader-translate-file-chars
! 			  (file-name-directory file)))
      (when articles
        (gnus-message 7 "Fetching headers for %s..." group)
        (save-excursion
--- 876,882 ----
  			     (cdr (gnus-active group)))))))
      ;; Fetch them.
      (gnus-make-directory (nnheader-translate-file-chars
! 			  (file-name-directory file) t))
      (when articles
        (gnus-message 7 "Fetching headers for %s..." group)
        (save-excursion
*** pub/pgnus/lisp/gnus-art.el	Wed Jan  5 17:09:36 2000
--- pgnus/lisp/gnus-art.el	Thu Apr 20 01:31:05 2000
***************
*** 1439,1444 ****
--- 1439,1446 ----
  		      (mm-read-coding-system "Charset to decode: "))
  		     (ctl
  		      (mail-content-type-get ctl 'charset))))
+       (when cte
+ 	(setq cte (mail-header-strip cte)))
        (if (and ctl (not (string-match "/" (car ctl)))) 
  	  (setq ctl nil))
        (goto-char (point-max)))
***************
*** 1478,1488 ****
        (when (or force
  		(and type (string-match "quoted-printable" (downcase type))))
  	(article-goto-body)
! 	(save-restriction
! 	  (narrow-to-region (point) (point-max))
! 	  (quoted-printable-decode-region (point-min) (point-max))
! 	  (when charset
! 	    (mm-decode-body charset)))))))
  
  (eval-when-compile
    (require 'rfc1843))
--- 1480,1486 ----
        (when (or force
  		(and type (string-match "quoted-printable" (downcase type))))
  	(article-goto-body)
! 	(quoted-printable-decode-region (point) (point-max) charset)))))
  
  (eval-when-compile
    (require 'rfc1843))
***************
*** 2474,2480 ****
    "s" gnus-article-show-summary
    "\C-c\C-m" gnus-article-mail
    "?" gnus-article-describe-briefly
!   "e" gnus-summary-article-edit
    "<" beginning-of-buffer
    ">" end-of-buffer
    "\C-c\C-i" gnus-info-find-node
--- 2472,2478 ----
    "s" gnus-article-show-summary
    "\C-c\C-m" gnus-article-mail
    "?" gnus-article-describe-briefly
!   "e" gnus-summary-edit-article
    "<" beginning-of-buffer
    ">" end-of-buffer
    "\C-c\C-i" gnus-info-find-node
*** pub/pgnus/lisp/gnus-cus.el	Wed Jan  5 17:09:37 2000
--- pgnus/lisp/gnus-cus.el	Thu Apr 20 01:31:06 2000
***************
*** 323,329 ****
  			       :tag "Parameters"
  			       :format "%t:\n%h%v"
  			       :doc "\
! These special paramerters are recognized by Gnus.
  Check the [ ] for the parameters you want to apply to this group or
  to the groups in this topic, then edit the value to suit your taste."
  			       ,@types)
--- 323,329 ----
  			       :tag "Parameters"
  			       :format "%t:\n%h%v"
  			       :doc "\
! These special parameters are recognized by Gnus.
  Check the [ ] for the parameters you want to apply to this group or
  to the groups in this topic, then edit the value to suit your taste."
  			       ,@types)
*** pub/pgnus/lisp/gnus-group.el	Wed Jan  5 17:09:38 2000
--- pgnus/lisp/gnus-group.el	Thu Apr 20 01:31:07 2000
***************
*** 1570,1576 ****
  (defun gnus-fetch-group (group)
    "Start Gnus if necessary and enter GROUP.
  Returns whether the fetching was successful or not."
!   (interactive "sGroup name: ")
    (unless (get-buffer gnus-group-buffer)
      (gnus-no-server))
    (gnus-group-read-group nil nil group))
--- 1570,1576 ----
  (defun gnus-fetch-group (group)
    "Start Gnus if necessary and enter GROUP.
  Returns whether the fetching was successful or not."
!   (interactive (list (completing-read "Group name: " gnus-active-hashtb)))
    (unless (get-buffer gnus-group-buffer)
      (gnus-no-server))
    (gnus-group-read-group nil nil group))
***************
*** 2599,2604 ****
--- 2599,2606 ----
  or nil if no action could be taken."
    (let* ((entry (gnus-gethash group gnus-newsrc-hashtb))
  	 (num (car entry)))
+     ;; Remove entries for this group.
+     (nnmail-purge-split-history (gnus-group-real-name group))
      ;; Do the updating only if the newsgroup isn't killed.
      (if (not (numberp (car entry)))
  	(gnus-message 1 "Can't catch up %s; non-active group" group)
*** pub/pgnus/lisp/gnus-srvr.el	Wed Jan  5 17:09:41 2000
--- pgnus/lisp/gnus-srvr.el	Thu Apr 20 01:31:08 2000
***************
*** 296,301 ****
--- 296,313 ----
    (push (assoc server gnus-server-alist) gnus-server-killed-servers)
    (setq gnus-server-alist (delq (car gnus-server-killed-servers)
  				gnus-server-alist))
+   (let ((groups (gnus-groups-from-server server)))
+     (when (and groups
+ 	       (gnus-yes-or-no-p
+ 		(format "Kill all %s groups from this server? "
+ 			(length groups))))
+       (dolist (group groups)
+ 	(setq gnus-newsrc-alist
+ 	      (delq (assoc group gnus-newsrc-alist)
+ 		    gnus-newsrc-alist))
+ 	(when gnus-group-change-level-function
+ 	  (funcall gnus-group-change-level-function
+ 		   group gnus-level-killed 3)))))
    (gnus-server-position-point))
  
  (defun gnus-server-yank-server ()
*** pub/pgnus/lisp/gnus-start.el	Wed Jan  5 17:09:41 2000
--- pgnus/lisp/gnus-start.el	Thu Apr 20 01:31:09 2000
***************
*** 1899,1905 ****
  		     (gnus-group-prefixed-name "" method))))
  
      ;; Let the Gnus agent save the active file.
!     (if (and gnus-agent real-active gnus-plugged (gnus-agent-method-p method))
  	(progn
  	  (gnus-agent-save-groups method)
  	  (gnus-active-to-gnus-format method hashtb nil real-active))
--- 1899,1908 ----
  		     (gnus-group-prefixed-name "" method))))
  
      ;; Let the Gnus agent save the active file.
!     (if (and gnus-agent
! 	     real-active
! 	     gnus-plugged
! 	     (gnus-agent-method-p method))
  	(progn
  	  (gnus-agent-save-groups method)
  	  (gnus-active-to-gnus-format method hashtb nil real-active))
*** pub/pgnus/lisp/gnus-sum.el	Wed Jan  5 17:09:42 2000
--- pgnus/lisp/gnus-sum.el	Thu Apr 20 01:31:10 2000
***************
*** 696,702 ****
    :type 'hook)
  
  (defcustom gnus-exit-group-hook nil
!   "*A hook called when exiting (not quitting) summary mode."
    :group 'gnus-various
    :type 'hook)
  
--- 696,703 ----
    :type 'hook)
  
  (defcustom gnus-exit-group-hook nil
!   "*A hook called when exiting summary mode.
! This hook is not called from the non-updating exit commands like `Q'."
    :group 'gnus-various
    :type 'hook)
  
***************
*** 5537,5543 ****
        (rename-buffer
         (concat (substring name 0 (match-beginning 0)) "Dead "
  	       (substring name (match-beginning 0)))
!        t))))
  
  (defun gnus-kill-or-deaden-summary (buffer)
    "Kill or deaden the summary BUFFER."
--- 5538,5545 ----
        (rename-buffer
         (concat (substring name 0 (match-beginning 0)) "Dead "
  	       (substring name (match-beginning 0)))
!        t)
!       (bury-buffer))))
  
  (defun gnus-kill-or-deaden-summary (buffer)
    "Kill or deaden the summary BUFFER."
***************
*** 5796,5832 ****
      (set-buffer gnus-summary-buffer))
    (let ((article (or article (gnus-summary-article-number)))
  	(all-headers (not (not all-headers))) ;Must be T or NIL.
! 	gnus-summary-display-article-function
! 	did)
      (and (not pseudo)
  	 (gnus-summary-article-pseudo-p article)
  	 (error "This is a pseudo-article"))
!     (prog1
! 	(save-excursion
! 	  (set-buffer gnus-summary-buffer)
! 	  (if (or (and gnus-single-article-buffer
! 		       (or (null gnus-current-article)
! 			   (null gnus-article-current)
! 			   (null (get-buffer gnus-article-buffer))
! 			   (not (eq article (cdr gnus-article-current)))
! 			   (not (equal (car gnus-article-current)
! 				       gnus-newsgroup-name))))
! 		  (and (not gnus-single-article-buffer)
! 		       (or (null gnus-current-article)
! 			   (not (eq gnus-current-article article))))
! 		  force)
! 	      ;; The requested article is different from the current article.
! 	      (prog1
! 		  (gnus-summary-display-article article all-headers)
! 		(setq did article)
! 		(when (or all-headers gnus-show-all-headers)
! 		  (gnus-article-show-all-headers)))
  	    (when (or all-headers gnus-show-all-headers)
  	      (gnus-article-show-all-headers))
! 	    'old))
!       (when did
! 	(gnus-article-set-window-start
! 	 (cdr (assq article gnus-newsgroup-bookmarks)))))))
  
  (defun gnus-summary-set-current-mark (&optional current-mark)
    "Obsolete function."
--- 5798,5831 ----
      (set-buffer gnus-summary-buffer))
    (let ((article (or article (gnus-summary-article-number)))
  	(all-headers (not (not all-headers))) ;Must be T or NIL.
! 	gnus-summary-display-article-function)
      (and (not pseudo)
  	 (gnus-summary-article-pseudo-p article)
  	 (error "This is a pseudo-article"))
!     (save-excursion
!       (set-buffer gnus-summary-buffer)
!       (if (or (and gnus-single-article-buffer
! 		   (or (null gnus-current-article)
! 		       (null gnus-article-current)
! 		       (null (get-buffer gnus-article-buffer))
! 		       (not (eq article (cdr gnus-article-current)))
! 		       (not (equal (car gnus-article-current)
! 				   gnus-newsgroup-name))))
! 	      (and (not gnus-single-article-buffer)
! 		   (or (null gnus-current-article)
! 		       (not (eq gnus-current-article article))))
! 	      force)
! 	  ;; The requested article is different from the current article.
! 	  (progn
! 	    (gnus-summary-display-article article all-headers)
  	    (when (or all-headers gnus-show-all-headers)
  	      (gnus-article-show-all-headers))
! 	    (gnus-article-set-window-start
! 	     (cdr (assq article gnus-newsgroup-bookmarks)))
! 	    article)
! 	(when (or all-headers gnus-show-all-headers)
! 	  (gnus-article-show-all-headers))
! 	'old))))
  
  (defun gnus-summary-set-current-mark (&optional current-mark)
    "Obsolete function."
***************
*** 6986,6991 ****
--- 6985,6991 ----
      (gnus-save-hidden-threads
        (gnus-summary-select-article)
        (set-buffer gnus-article-buffer)
+       (goto-char (window-point (get-buffer-window (current-buffer))))
        (when backward
  	(forward-line -1))
        (while (not found)
***************
*** 7236,7243 ****
  	  (if  hidden
  	      (let ((gnus-treat-hide-headers nil)
  		    (gnus-treat-hide-boring-headers nil))
  		(gnus-treat-article 'head))
! 	    (gnus-treat-article 'head)))))))
  
  (defun gnus-summary-show-all-headers ()
    "Make all header lines visible."
--- 7236,7246 ----
  	  (if  hidden
  	      (let ((gnus-treat-hide-headers nil)
  		    (gnus-treat-hide-boring-headers nil))
+ 		(setq gnus-article-wash-types
+ 		      (delq 'headers gnus-article-wash-types))
  		(gnus-treat-article 'head))
! 	    (gnus-treat-article 'head)))
! 	(gnus-set-mode-line 'article)))))
  
  (defun gnus-summary-show-all-headers ()
    "Make all header lines visible."
***************
*** 7304,7310 ****
  		    'request-replace-article gnus-newsgroup-name)))
  	 (error "The current group does not support article editing")))
    (let ((articles (gnus-summary-work-articles n))
! 	(prefix (gnus-group-real-prefix gnus-newsgroup-name))
  	(names '((move "Move" "Moving")
  		 (copy "Copy" "Copying")
  		 (crosspost "Crosspost" "Crossposting")))
--- 7307,7316 ----
  		    'request-replace-article gnus-newsgroup-name)))
  	 (error "The current group does not support article editing")))
    (let ((articles (gnus-summary-work-articles n))
! 	(prefix (if (gnus-check-backend-function
! 		    'request-move-article gnus-newsgroup-name)
! 		    (gnus-group-real-prefix gnus-newsgroup-name)
! 		  ""))
  	(names '((move "Move" "Moving")
  		 (copy "Copy" "Copying")
  		 (crosspost "Crosspost" "Crossposting")))
***************
*** 7393,7402 ****
  	(gnus-message 1 "Couldn't %s article %s: %s"
  		      (cadr (assq action names)) article
  		      (nnheader-get-report (car to-method))))
!        ((and (eq art-group 'junk)
! 	     (eq action 'move))
! 	(gnus-summary-mark-article article gnus-canceled-mark)
! 	(gnus-message 4 "Deleted article %s" article))
         (t
  	(let* ((pto-group (gnus-group-prefixed-name
  			   (car art-group) to-method))
--- 7399,7408 ----
  	(gnus-message 1 "Couldn't %s article %s: %s"
  		      (cadr (assq action names)) article
  		      (nnheader-get-report (car to-method))))
!        ((eq art-group 'junk)
! 	(when (eq action 'move)
! 	  (gnus-summary-mark-article article gnus-canceled-mark)
! 	  (gnus-message 4 "Deleted article %s" article)))
         (t
  	(let* ((pto-group (gnus-group-prefixed-name
  			   (car art-group) to-method))
***************
*** 9041,9052 ****
  	  (error "No such group: %s" to-newsgroup)))
      to-newsgroup))
  
! (defun gnus-summary-save-parts (type dir n reverse)
    "Save parts matching TYPE to DIR.
  If REVERSE, save parts that do not match TYPE."
    (interactive
     (list (read-string "Save parts of type: " "image/.*")
! 	 (read-file-name "Save to directory: " t nil t)
  	 current-prefix-arg))
    (gnus-summary-iterate n
      (let ((gnus-display-mime-function nil)
--- 9047,9058 ----
  	  (error "No such group: %s" to-newsgroup)))
      to-newsgroup))
  
! (defun gnus-summary-save-parts (type dir n &optional reverse)
    "Save parts matching TYPE to DIR.
  If REVERSE, save parts that do not match TYPE."
    (interactive
     (list (read-string "Save parts of type: " "image/.*")
! 	 (read-file-name "Save to directory: " nil nil t)
  	 current-prefix-arg))
    (gnus-summary-iterate n
      (let ((gnus-display-mime-function nil)
*** pub/pgnus/lisp/gnus-topic.el	Wed Jan  5 17:09:42 2000
--- pgnus/lisp/gnus-topic.el	Thu Apr 20 01:31:11 2000
***************
*** 594,600 ****
    (let* ((topic (gnus-group-topic group))
  	 (groups (cdr (assoc topic gnus-topic-alist)))
  	 (g (cdr (member group groups)))
! 	 (unfound t))
      ;; Try to jump to a visible group.
      (while (and g (not (gnus-group-goto-group (car g) t)))
        (pop g))
--- 594,601 ----
    (let* ((topic (gnus-group-topic group))
  	 (groups (cdr (assoc topic gnus-topic-alist)))
  	 (g (cdr (member group groups)))
! 	 (unfound t)
! 	 entry)
      ;; Try to jump to a visible group.
      (while (and g (not (gnus-group-goto-group (car g) t)))
        (pop g))
***************
*** 608,615 ****
        (when (and unfound
  		 topic
  		 (not (gnus-topic-goto-missing-topic topic)))
! 	(gnus-topic-insert-topic-line
! 	 topic t t (car (gnus-topic-find-topology topic)) nil 0)))))
  
  (defun gnus-topic-goto-missing-topic (topic)
    (if (gnus-topic-goto-topic topic)
--- 609,628 ----
        (when (and unfound
  		 topic
  		 (not (gnus-topic-goto-missing-topic topic)))
! 	(let* ((top (gnus-topic-find-topology topic))
! 	       (children (cddr top))
! 	       (type (cadr top))
! 	       (unread 0)
! 	       (entries (gnus-topic-find-groups
! 			 (car type) (car gnus-group-list-mode)
! 			 (cdr gnus-group-list-mode))))
! 	  (while children
! 	    (incf unread (gnus-topic-unread (caar (pop children)))))
! 	  (while (setq entry (pop entries))
! 	    (when (numberp (car entry))
! 	      (incf unread (car entry))))
! 	  (gnus-topic-insert-topic-line
! 	   topic t t (car (gnus-topic-find-topology topic)) nil unread))))))
  
  (defun gnus-topic-goto-missing-topic (topic)
    (if (gnus-topic-goto-topic topic)
*** pub/pgnus/lisp/gnus-uu.el	Wed Jan  5 17:09:43 2000
--- pgnus/lisp/gnus-uu.el	Thu Apr 20 01:31:12 2000
***************
*** 369,380 ****
    "k" gnus-summary-kill-process-mark
    "y" gnus-summary-yank-process-mark
    "w" gnus-summary-save-process-mark
!   "i" gnus-uu-invert-processable
!   "m" gnus-summary-save-parts)
  
  (gnus-define-keys (gnus-uu-extract-map "X" gnus-summary-mode-map)
    ;;"x" gnus-uu-extract-any
!   ;;"m" gnus-uu-extract-mime
    "u" gnus-uu-decode-uu
    "U" gnus-uu-decode-uu-and-save
    "s" gnus-uu-decode-unshar
--- 369,379 ----
    "k" gnus-summary-kill-process-mark
    "y" gnus-summary-yank-process-mark
    "w" gnus-summary-save-process-mark
!   "i" gnus-uu-invert-processable)
  
  (gnus-define-keys (gnus-uu-extract-map "X" gnus-summary-mode-map)
    ;;"x" gnus-uu-extract-any
!   "m" gnus-summary-save-parts
    "u" gnus-uu-decode-uu
    "U" gnus-uu-decode-uu-and-save
    "s" gnus-uu-decode-unshar
*** pub/pgnus/lisp/gnus-win.el	Wed Jan  5 17:09:43 2000
--- pgnus/lisp/gnus-win.el	Thu Apr 20 01:31:12 2000
***************
*** 446,457 ****
  		    (gnus-delete-windows-in-gnusey-frames))
  		;; Just remove some windows.
  		(gnus-remove-some-windows)
! 	      (set-buffer nntp-server-buffer))
  	    (select-frame frame)))
  
  	(let (gnus-window-frame-focus)
! 	(set-buffer nntp-server-buffer)
! 	(gnus-configure-frame split)
  	  (when gnus-window-frame-focus
  	    (select-frame (window-frame gnus-window-frame-focus))))))))
  
--- 446,457 ----
  		    (gnus-delete-windows-in-gnusey-frames))
  		;; Just remove some windows.
  		(gnus-remove-some-windows)
! 		(set-buffer nntp-server-buffer))
  	    (select-frame frame)))
  
  	(let (gnus-window-frame-focus)
! 	  (set-buffer nntp-server-buffer)
! 	  (gnus-configure-frame split)
  	  (when gnus-window-frame-focus
  	    (select-frame (window-frame gnus-window-frame-focus))))))))
  
*** pub/pgnus/lisp/gnus.el	Wed Jan  5 17:09:43 2000
--- pgnus/lisp/gnus.el	Thu Apr 20 01:31:14 2000
***************
*** 1,5 ****
  ;;; gnus.el --- a newsreader for GNU Emacs
! ;; Copyright (C) 1987-1990,1993-1999 Free Software Foundation, Inc.
  
  ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
  ;;	Lars Magne Ingebrigtsen <larsi@gnus.org>
--- 1,6 ----
  ;;; gnus.el --- a newsreader for GNU Emacs
! ;; Copyright (C) 1987, 88, 89, 90, 93, 94, 95, 96, 97, 98, 99
! ;;   Free Software Foundation, Inc.
  
  ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
  ;;	Lars Magne Ingebrigtsen <larsi@gnus.org>
***************
*** 31,40 ****
  (eval-when-compile (require 'cl))
  (require 'mm-util)
  
- (require 'custom)
- (eval-and-compile
-   (if (< emacs-major-version 20)
-       (require 'gnus-load)))
  (require 'message)
  
  (defgroup gnus nil
--- 32,37 ----
***************
*** 260,266 ****
    :link '(custom-manual "(gnus)Exiting Gnus")
    :group 'gnus)
  
! (defconst gnus-version-number "5.8.3"
    "Version number for this version of Gnus.")
  
  (defconst gnus-version (format "Gnus v%s" gnus-version-number)
--- 257,263 ----
    :link '(custom-manual "(gnus)Exiting Gnus")
    :group 'gnus)
  
! (defconst gnus-version-number "5.8.4"
    "Version number for this version of Gnus.")
  
  (defconst gnus-version (format "Gnus v%s" gnus-version-number)
***************
*** 1616,1632 ****
  	    (when (consp function)
  	      (setq keymap (car (memq 'keymap function)))
  	      (setq function (car function)))
! 	    (autoload function (car package) nil interactive keymap)))
  	(if (eq (nth 1 package) ':interactive)
! 	    (cdddr package)
  	  (cdr package)))))
!    '(("metamail" metamail-buffer)
!      ("info" Info-goto-node)
       ("pp" pp pp-to-string pp-eval-expression)
       ("qp" quoted-printable-decode-region quoted-printable-decode-string)
       ("ps-print" ps-print-preprint)
!      ("mail-extr" mail-extract-address-components)
!      ("browse-url" browse-url)
       ("message" :interactive t
        message-send-and-exit message-yank-original)
       ("babel" babel-as-string)
--- 1613,1628 ----
  	    (when (consp function)
  	      (setq keymap (car (memq 'keymap function)))
  	      (setq function (car function)))
! 	    (unless (fboundp function)
! 	      (autoload function (car package) nil interactive keymap))))
  	(if (eq (nth 1 package) ':interactive)
! 	    (nthcdr 3 package)
  	  (cdr package)))))
!    '(("info" :interactive t Info-goto-node)
       ("pp" pp pp-to-string pp-eval-expression)
       ("qp" quoted-printable-decode-region quoted-printable-decode-string)
       ("ps-print" ps-print-preprint)
!      ("browse-url" :interactive t browse-url)
       ("message" :interactive t
        message-send-and-exit message-yank-original)
       ("babel" babel-as-string)
***************
*** 2861,2870 ****
    (let ((window (get-buffer-window gnus-group-buffer)))
      (cond (window
  	   (select-frame (window-frame window)))
! 	  (t
! 	   (other-frame 1))))
    (gnus arg))
  
  ;;;###autoload
  (defun gnus (&optional arg dont-connect slave)
    "Read network news.
--- 2857,2869 ----
    (let ((window (get-buffer-window gnus-group-buffer)))
      (cond (window
  	   (select-frame (window-frame window)))
!  	  (t
!  	   (select-frame (make-frame)))))
    (gnus arg))
  
+ ;;(setq thing ?				; this is a comment
+ ;;      more 'yes)
+     
  ;;;###autoload
  (defun gnus (&optional arg dont-connect slave)
    "Read network news.
*** pub/pgnus/lisp/ietf-drums.el	Wed Jan  5 17:09:44 2000
--- pgnus/lisp/ietf-drums.el	Thu Apr 20 01:31:14 2000
***************
*** 115,121 ****
        (buffer-string))))
  
  (defun ietf-drums-remove-whitespace (string)
!   "Remove comments from STRING."
    (with-temp-buffer
      (ietf-drums-init string)
      (let (c)
--- 115,121 ----
        (buffer-string))))
  
  (defun ietf-drums-remove-whitespace (string)
!   "Remove whitespace from STRING."
    (with-temp-buffer
      (ietf-drums-init string)
      (let (c)
***************
*** 150,155 ****
--- 150,159 ----
  	 (t
  	  (forward-char 1))))
        result)))
+ 
+ (defun ietf-drums-strip (string)
+   "Remove comments and whitespace from STRING."
+   (ietf-drums-remove-whitespace (ietf-drums-remove-comments string)))
  
  (defun ietf-drums-parse-address (string)
    "Parse STRING and return a MAILBOX / DISPLAY-NAME pair."
*** pub/pgnus/lisp/imap.el	Wed Jan  5 17:09:44 2000
--- pgnus/lisp/imap.el	Thu Apr 20 01:31:15 2000
***************
*** 74,82 ****
  ;;
  ;; imap.el support RFC1730/2060 (IMAP4/IMAP4rev1), implemented IMAP
  ;; extensions are RFC2195 (CRAM-MD5), RFC2086 (ACL), RFC2342
! ;; (NAMESPACE), RFC2359 (UIDPLUS), and the kerberos V4 part of RFC1731
! ;; (with use of external program `imtest').  It also take advantage
! ;; the UNSELECT extension in Cyrus IMAPD.
  ;;
  ;; Without the work of John McClary Prevost and Jim Radford this library
  ;; would not have seen the light of day.  Many thanks.
--- 74,84 ----
  ;;
  ;; imap.el support RFC1730/2060 (IMAP4/IMAP4rev1), implemented IMAP
  ;; extensions are RFC2195 (CRAM-MD5), RFC2086 (ACL), RFC2342
! ;; (NAMESPACE), RFC2359 (UIDPLUS), the IMAP-part of RFC2595 (STARTTLS)
! ;; (with use of external library starttls.el and program starttls) and
! ;; the GSSAPI / kerberos V4 sections of RFC1731 (with use of external
! ;; program `imtest').  It also take advantage the UNSELECT extension
! ;; in Cyrus IMAPD.
  ;;
  ;; Without the work of John McClary Prevost and Jim Radford this library
  ;; would not have seen the light of day.  Many thanks.
***************
*** 122,128 ****
  ;; o Don't use `read' at all (important places already fixed)
  ;; o Accept list of articles instead of message set string in most
  ;;   imap-message-* functions.
- ;; o Cyrus IMAPd 1.6.x `imtest' support in the imtest wrapper
  ;;
  ;; Revision history:
  ;;
--- 124,129 ----
***************
*** 154,164 ****
  
  ;; User variables.
  
! (defvar imap-imtest-program "imtest -kp %s %p"
!   "How to call program for Kerberos 4 authentication.
! %s is replaced with server and %p with port to connect to.  The
! program should accept IMAP commands on stdin and return responses to
! stdout.")
  
  (defvar imap-ssl-program '("openssl s_client -ssl3 -connect %s:%p"
  			   "openssl s_client -ssl2 -connect %s:%p"
--- 155,172 ----
  
  ;; User variables.
  
! (defvar imap-kerberos4-program '("imtest -m kerberos_v4 -u %l -p %p %s"
! 				 "imtest -kp %s %p")
!   "List of strings containing commands for Kerberos 4 authentication.
! %s is replaced with server hostname, %p with port to connect to, and
! %l with the value of `imap-default-user'.  The program should accept
! IMAP commands on stdin and return responses to stdout.")
! 
! (defvar imap-gssapi-program '("imtest -m gssapi -u %l -p %p %s")
!   "List of strings containing commands for GSSAPI (krb5) authentication.
! %s is replaced with server hostname, %p with port to connect to, and
! %l with the value of `imap-default-user'.  The program should accept
! IMAP commands on stdin and return responses to stdout.")
  
  (defvar imap-ssl-program '("openssl s_client -ssl3 -connect %s:%p"
  			   "openssl s_client -ssl2 -connect %s:%p"
***************
*** 180,193 ****
  (defvar imap-fetch-data-hook nil
    "Hooks called after receiving each FETCH response.")
  
! (defvar imap-streams '(kerberos4 starttls ssl network)
    "Priority of streams to consider when opening connection to server.")
  
  (defvar imap-stream-alist
!   '((kerberos4 imap-kerberos4s-p imap-kerberos4-open)
!     (ssl       imap-ssl-p        imap-ssl-open)
!     (network   imap-network-p    imap-network-open)
!     (starttls  imap-starttls-p   imap-starttls-open))
    "Definition of network streams.
  
  (NAME CHECK OPEN)
--- 188,202 ----
  (defvar imap-fetch-data-hook nil
    "Hooks called after receiving each FETCH response.")
  
! (defvar imap-streams '(gssapi kerberos4 starttls ssl network)
    "Priority of streams to consider when opening connection to server.")
  
  (defvar imap-stream-alist
!   '((gssapi    imap-gssapi-stream-p    imap-gssapi-open)
!     (kerberos4 imap-kerberos4-stream-p imap-kerberos4-open)
!     (ssl       imap-ssl-p              imap-ssl-open)
!     (network   imap-network-p          imap-network-open)
!     (starttls  imap-starttls-p         imap-starttls-open))
    "Definition of network streams.
  
  (NAME CHECK OPEN)
***************
*** 196,210 ****
  server support the stream and OPEN is a function for opening the
  stream.")
  
! (defvar imap-authenticators '(kerberos4 digest-md5 cram-md5 login anonymous)
    "Priority of authenticators to consider when authenticating to server.")
  
  (defvar imap-authenticator-alist 
!   '((kerberos4  imap-kerberos4a-p imap-kerberos4-auth)
!     (cram-md5   imap-cram-md5-p   imap-cram-md5-auth)
!     (login      imap-login-p      imap-login-auth)
!     (anonymous  imap-anonymous-p  imap-anonymous-auth)
!     (digest-md5 imap-digest-md5-p imap-digest-md5-auth))
    "Definition of authenticators.
  
  (NAME CHECK AUTHENTICATE)
--- 205,225 ----
  server support the stream and OPEN is a function for opening the
  stream.")
  
! (defvar imap-authenticators '(gssapi 
! 			      kerberos4
! 			      digest-md5
! 			      cram-md5
! 			      login
! 			      anonymous)
    "Priority of authenticators to consider when authenticating to server.")
  
  (defvar imap-authenticator-alist 
!   '((gssapi     imap-gssapi-auth-p    imap-gssapia-auth)
!     (kerberos4  imap-kerberos4-auth-p imap-kerberos4-auth)
!     (cram-md5   imap-cram-md5-p       imap-cram-md5-auth)
!     (login      imap-login-p          imap-login-auth)
!     (anonymous  imap-anonymous-p      imap-anonymous-auth)
!     (digest-md5 imap-digest-md5-p     imap-digest-md5-auth))
    "Definition of authenticators.
  
  (NAME CHECK AUTHENTICATE)
***************
*** 376,421 ****
  
  ;; Server functions; stream stuff:
  
! (defun imap-kerberos4s-p (buffer)
    (imap-capability 'AUTH=KERBEROS_V4 buffer))
  
  (defun imap-kerberos4-open (name buffer server port)
!   (message "Opening Kerberized IMAP connection...")
!   (let* ((port (or port imap-default-port))
! 	 (coding-system-for-read imap-coding-system-for-read)
! 	 (coding-system-for-write imap-coding-system-for-write)
! 	 (process (start-process 
! 		   name buffer shell-file-name shell-command-switch
! 		   (format-spec
! 		    imap-imtest-program
! 		    (format-spec-make ?s server ?p (number-to-string port))))))
!     (when process
!       (with-current-buffer buffer
! 	(setq imap-client-eol "\n")
! 	;; Result of authentication is a string: __Full privacy protection__
! 	(while (and (memq (process-status process) '(open run))
! 		    (goto-char (point-min))
! 		    (not (and (imap-parse-greeting)
! 			      (re-search-forward "__\\(.*\\)__\n" nil t))))
! 	  (accept-process-output process 1)
! 	  (sit-for 1))
! 	(and imap-log
! 	     (with-current-buffer (get-buffer-create imap-log)
! 	       (imap-disable-multibyte)
! 	       (buffer-disable-undo)
! 	       (goto-char (point-max))
! 	       (insert-buffer-substring buffer)))
! 	(let ((response (match-string 1)))
! 	  (erase-buffer)
! 	  (message "Kerberized IMAP connection: %s" response)
! 	  (if (and response (let ((case-fold-search nil))
! 			      (not (string-match "failed" response))))
! 	      process
! 	    (if (memq (process-status process) '(open run))
! 		(imap-send-command-wait "LOGOUT"))
! 	    (delete-process process)
! 	    nil))))))
    
  (defun imap-ssl-p (buffer)
    nil)
  
--- 391,509 ----
  
  ;; Server functions; stream stuff:
  
! (defun imap-kerberos4-stream-p (buffer)
    (imap-capability 'AUTH=KERBEROS_V4 buffer))
  
  (defun imap-kerberos4-open (name buffer server port)
!   (let ((cmds imap-kerberos4-program)
! 	cmd done)
!     (while (and (not done) (setq cmd (pop cmds)))
!       (message "Opening Kerberos 4 IMAP connection with `%s'..." cmd)
!       (let* ((port (or port imap-default-port))
! 	     (coding-system-for-read imap-coding-system-for-read)
! 	     (coding-system-for-write imap-coding-system-for-write)
! 	     (process (start-process 
! 		       name buffer shell-file-name shell-command-switch
! 		       (format-spec
! 			cmd
! 			(format-spec-make
! 			 ?s server
! 			 ?p (number-to-string port)
! 			 ?l imap-default-user))))
! 	     response)
! 	(when process
! 	  (with-current-buffer buffer
! 	    (setq imap-client-eol "\n")
! 	    (while (and (memq (process-status process) '(open run))
! 			(goto-char (point-min))
!                         ;; cyrus 1.6.x (13? < x <= 22) queries capabilities
! 		        (or (while (looking-at "^C:")
! 			      (forward-line))
! 			    t)
! 			;; cyrus 1.6 imtest print "S: " before server greeting
! 			(or (not (looking-at "S: "))
! 			    (forward-char 3)
! 			    t)
! 			(not (and (imap-parse-greeting)
! 				  ;; success in imtest < 1.6:
! 				  (or (re-search-forward
! 				       "^__\\(.*\\)__\n" nil t)
! 				      ;; success in imtest 1.6:
! 				      (re-search-forward
! 				       "^\\(Authenticat.*\\)" nil t))
! 				  (setq response (match-string 1)))))
! 	      (accept-process-output process 1)
! 	      (sit-for 1))
! 	    (and imap-log
! 		 (with-current-buffer (get-buffer-create imap-log)
! 		   (imap-disable-multibyte)
! 		   (buffer-disable-undo)
! 		   (goto-char (point-max))
! 		   (insert-buffer-substring buffer)))
! 	    (erase-buffer)
! 	    (message "Kerberos 4 IMAP connection: %s" (or response "failed"))
! 	    (if (and response (let ((case-fold-search nil))
! 				(not (string-match "failed" response))))
! 		(setq done process)
! 	      (if (memq (process-status process) '(open run))
! 		  (imap-send-command-wait "LOGOUT"))
! 	      (delete-process process)
! 	      nil)))))
!     done))
    
+ (defun imap-gssapi-stream-p (buffer)
+   (imap-capability 'AUTH=GSSAPI buffer))
+ 
+ (defun imap-gssapi-open (name buffer server port)
+   (let ((cmds imap-gssapi-program)
+ 	cmd done)
+     (while (and (not done) (setq cmd (pop cmds)))
+       (message "Opening GSSAPI IMAP connection with `%s'..." cmd)
+       (let* ((port (or port imap-default-port))
+ 	     (coding-system-for-read imap-coding-system-for-read)
+ 	     (coding-system-for-write imap-coding-system-for-write)
+ 	     (process (start-process 
+ 		       name buffer shell-file-name shell-command-switch
+ 		       (format-spec
+ 			cmd
+ 			(format-spec-make
+ 			 ?s server
+ 			 ?p (number-to-string port)
+ 			 ?l imap-default-user))))
+ 	     response)
+ 	(when process
+ 	  (with-current-buffer buffer
+ 	    (setq imap-client-eol "\n")
+ 	    (while (and (memq (process-status process) '(open run))
+ 			(goto-char (point-min))
+ 			;; cyrus 1.6 imtest print "S: " before server greeting
+ 			(or (not (looking-at "S: "))
+ 			    (forward-char 3)
+ 			    t)
+ 			(not (and (imap-parse-greeting)
+ 				  ;; success in imtest 1.6:
+ 				  (re-search-forward
+ 				   "^\\(Authenticat.*\\)" nil t)
+ 				  (setq response (match-string 1)))))
+ 	      (accept-process-output process 1)
+ 	      (sit-for 1))
+ 	    (and imap-log
+ 		 (with-current-buffer (get-buffer-create imap-log)
+ 		   (imap-disable-multibyte)
+ 		   (buffer-disable-undo)
+ 		   (goto-char (point-max))
+ 		   (insert-buffer-substring buffer)))
+ 	    (erase-buffer)
+ 	    (message "GSSAPI IMAP connection: %s" (or response "failed"))
+ 	    (if (and response (let ((case-fold-search nil))
+ 				(not (string-match "failed" response))))
+ 		(setq done process)
+ 	      (if (memq (process-status process) '(open run))
+ 		  (imap-send-command-wait "LOGOUT"))
+ 	      (delete-process process)
+ 	      nil)))))
+     done))
+ 
  (defun imap-ssl-p (buffer)
    nil)
  
***************
*** 558,564 ****
        ;;		       passwd nil))))
        ret)))
  
! (defun imap-kerberos4a-p (buffer)
    (imap-capability 'AUTH=KERBEROS_V4 buffer))
  
  (defun imap-kerberos4-auth (buffer)
--- 646,658 ----
        ;;		       passwd nil))))
        ret)))
  
! (defun imap-gssapi-auth-p (buffer)
!   (imap-capability 'AUTH=GSSAPI buffer))
! 
! (defun imap-gssapi-auth (buffer)
!   (eq imap-stream 'gssapi))
! 
! (defun imap-kerberos4-auth-p (buffer)
    (imap-capability 'AUTH=KERBEROS_V4 buffer))
  
  (defun imap-kerberos4-auth (buffer)
***************
*** 1001,1009 ****
  						   (list items))))))
        (if (listp items)
  	  (mapcar (lambda (item)
! 		    (imap-mailbox-get-1 item mailbox))
  		  items)
! 	(imap-mailbox-get-1 items mailbox)))))
  
  (defun imap-mailbox-acl-get (&optional mailbox buffer)
    "Get ACL on mailbox from server in BUFFER."
--- 1095,1103 ----
  						   (list items))))))
        (if (listp items)
  	  (mapcar (lambda (item)
! 		    (imap-mailbox-get item mailbox))
  		  items)
! 	(imap-mailbox-get items mailbox)))))
  
  (defun imap-mailbox-acl-get (&optional mailbox buffer)
    "Get ACL on mailbox from server in BUFFER."
***************
*** 1265,1274 ****
    "Return number of lines in article by looking at the mime bodystructure BODY."
    (if (listp body)
        (if (stringp (car body))
! 	  (cond ((and (string= (car body) "TEXT")
  		      (numberp (nth 7 body)))
  		 (nth 7 body))
! 		((and (string= (car body) "MESSAGE")
  		      (numberp (nth 9 body)))
  		 (nth 9 body))
  		(t 0))
--- 1359,1369 ----
    "Return number of lines in article by looking at the mime bodystructure BODY."
    (if (listp body)
        (if (stringp (car body))
!           ;; upcase for bug in courier imap server
! 	  (cond ((and (string= (upcase (car body)) "TEXT")
  		      (numberp (nth 7 body)))
  		 (nth 7 body))
! 		((and (string= (upcase (car body)) "MESSAGE")
  		      (numberp (nth 9 body)))
  		 (nth 9 body))
  		(t 0))
***************
*** 1318,1330 ****
  		     (if (not (eq (imap-wait-for-tag tag) 'INCOMPLETE))
  			 (setq command nil);; abort command if no cont-req
  		       (let ((process imap-process)
! 			     (stream imap-stream))
  			 (with-current-buffer cmd
! 			   (when (eq stream 'kerberos4)
  			     ;; XXX modifies buffer!
  			     (goto-char (point-min))
  			     (while (search-forward "\r\n" nil t)
! 			       (replace-match "\n")))
  			   (and imap-log
  				(with-current-buffer (get-buffer-create
  						      imap-log)
--- 1413,1426 ----
  		     (if (not (eq (imap-wait-for-tag tag) 'INCOMPLETE))
  			 (setq command nil);; abort command if no cont-req
  		       (let ((process imap-process)
! 			     (stream imap-stream)
! 			     (eol imap-client-eol))
  			 (with-current-buffer cmd
! 			   (when (not (equal eol "\r\n"))
  			     ;; XXX modifies buffer!
  			     (goto-char (point-min))
  			     (while (search-forward "\r\n" nil t)
! 			       (replace-match eol)))
  			   (and imap-log
  				(with-current-buffer (get-buffer-create
  						      imap-log)
*** pub/pgnus/lisp/lpath.el	Wed Jan  5 17:09:44 2000
--- pgnus/lisp/lpath.el	Thu Apr 20 01:31:16 2000
***************
*** 41,47 ****
  		     rmail-summary-exists rmail-select-summary
  		     rmail-update-summary url-retrieve
  		     temp-directory babel-fetch babel-wash
! 		     find-coding-systems-for-charsets sc-cite-regexp))
        (maybe-bind '(global-face-data
  		    mark-active transient-mark-mode mouse-selection-click-count
  		    mouse-selection-click-count-buffer buffer-display-table
--- 41,48 ----
  		     rmail-summary-exists rmail-select-summary
  		     rmail-update-summary url-retrieve
  		     temp-directory babel-fetch babel-wash
! 		     find-coding-systems-for-charsets sc-cite-regexp
! 		     vcard-pretty-print))
        (maybe-bind '(global-face-data
  		    mark-active transient-mark-mode mouse-selection-click-count
  		    mouse-selection-click-count-buffer buffer-display-table
***************
*** 57,63 ****
  		    url-current-callback-func url-current-callback-data
  		    url-be-asynchronous temporary-file-directory
  		    babel-translations babel-history
! 		    display-time-mail-function)))
    (maybe-bind '(mail-mode-hook
  		enable-multibyte-characters browse-url-browser-function
  		adaptive-fill-first-line-regexp adaptive-fill-regexp
--- 58,65 ----
  		    url-current-callback-func url-current-callback-data
  		    url-be-asynchronous temporary-file-directory
  		    babel-translations babel-history
! 		    display-time-mail-function imap-password
! 		    )))
    (maybe-bind '(mail-mode-hook
  		enable-multibyte-characters browse-url-browser-function
  		adaptive-fill-first-line-regexp adaptive-fill-regexp
***************
*** 65,71 ****
  		w3-meta-content-type-charset-regexp
  		w3-meta-charset-content-type-regexp
  		babel-translations babel-history
! 		display-time-mail-function))
    (maybe-fbind '(color-instance-rgb-components
  		 temp-directory
  		 glyph-width annotation-glyph window-pixel-width glyph-height
--- 67,73 ----
  		w3-meta-content-type-charset-regexp
  		w3-meta-charset-content-type-regexp
  		babel-translations babel-history
! 		display-time-mail-function imap-password))
    (maybe-fbind '(color-instance-rgb-components
  		 temp-directory
  		 glyph-width annotation-glyph window-pixel-width glyph-height
***************
*** 91,97 ****
  		 w3-coding-system-for-mime-charset 
  		 rmail-summary-exists rmail-select-summary rmail-update-summary
  		 url-generic-parse-url valid-image-instantiator-format-p
! 		 babel-fetch babel-wash babel-as-string sc-cite-regexp)))
  
  (setq load-path (cons "." load-path))
  (require 'custom)
--- 93,100 ----
  		 w3-coding-system-for-mime-charset 
  		 rmail-summary-exists rmail-select-summary rmail-update-summary
  		 url-generic-parse-url valid-image-instantiator-format-p
! 		 babel-fetch babel-wash babel-as-string sc-cite-regexp
! 		 vcard-pretty-print)))
  
  (setq load-path (cons "." load-path))
  (require 'custom)
*** pub/pgnus/lisp/mail-parse.el	Sat Jan 16 04:21:00 1999
--- pgnus/lisp/mail-parse.el	Thu Apr 20 01:31:16 2000
***************
*** 49,54 ****
--- 49,55 ----
  
  (defalias 'mail-header-remove-comments 'ietf-drums-remove-comments)
  (defalias 'mail-header-remove-whitespace 'ietf-drums-remove-whitespace)
+ (defalias 'mail-header-strip 'ietf-drums-strip)
  (defalias 'mail-header-get-comment 'ietf-drums-get-comment)
  (defalias 'mail-header-parse-address 'ietf-drums-parse-address)
  (defalias 'mail-header-parse-addresses 'ietf-drums-parse-addresses)
*** pub/pgnus/lisp/mail-source.el	Wed Jan  5 17:09:44 2000
--- pgnus/lisp/mail-source.el	Thu Apr 20 01:31:17 2000
***************
*** 632,646 ****
  (defun mail-source-fetch-imap (source callback)
    "Fetcher for imap sources."
    (mail-source-bind (imap source)
!     (let ((found 0)
  	  (buf (get-buffer-create (generate-new-buffer-name " *imap source*")))
  	  (mail-source-string (format "imap:%s:%s" server mailbox))
  	  remove)
        (if (and (imap-open server port stream authentication buf)
! 	       (imap-authenticate user password buf)
  	       (imap-mailbox-select mailbox nil buf))
  	  (let (str (coding-system-for-write 'binary))
  	    (with-temp-file mail-source-crash-box
  	      ;; if predicate is nil, use all uids
  	      (dolist (uid (imap-search (or predicate "1:*") buf))
  		(when (setq str (imap-fetch uid "RFC822.PEEK" 'RFC822 nil buf))
--- 632,654 ----
  (defun mail-source-fetch-imap (source callback)
    "Fetcher for imap sources."
    (mail-source-bind (imap source)
!     (let ((from (format "%s:%s:%s" server user port))
! 	  (found 0)
  	  (buf (get-buffer-create (generate-new-buffer-name " *imap source*")))
  	  (mail-source-string (format "imap:%s:%s" server mailbox))
  	  remove)
        (if (and (imap-open server port stream authentication buf)
! 	       (imap-authenticate
! 		user (or (cdr (assoc from mail-source-password-cache))
! 			 password) buf)
  	       (imap-mailbox-select mailbox nil buf))
  	  (let (str (coding-system-for-write 'binary))
  	    (with-temp-file mail-source-crash-box
+ 	      ;; remember password
+ 	      (with-current-buffer buf
+ 		(when (or imap-password
+ 			  (assoc from mail-source-password-cache))
+ 		  (push (cons from imap-password) mail-source-password-cache)))
  	      ;; if predicate is nil, use all uids
  	      (dolist (uid (imap-search (or predicate "1:*") buf))
  		(when (setq str (imap-fetch uid "RFC822.PEEK" 'RFC822 nil buf))
***************
*** 661,666 ****
--- 669,679 ----
  	      (imap-mailbox-close buf))
  	    (imap-close buf))
  	(imap-close buf)
+ 	;; We nix out the password in case the error
+ 	;; was because of a wrong password being given.
+ 	(setq mail-source-password-cache
+ 	      (delq (assoc from mail-source-password-cache)
+ 		    mail-source-password-cache))
  	(error (imap-error-text buf)))
        (kill-buffer buf)
        found)))
***************
*** 677,684 ****
        (when (eq authentication 'password)
  	(setq password
  	      (or password
  		  (mail-source-read-passwd
! 		   (format "Password for %s at %s: " user subtype)))))
        (webmail-fetch mail-source-crash-box subtype user password)
        (mail-source-callback callback (symbol-name subtype)))))
  
--- 690,704 ----
        (when (eq authentication 'password)
  	(setq password
  	      (or password
+ 		  (cdr (assoc (format "webmail:%s:%s" subtype user) 
+ 			      mail-source-password-cache))
  		  (mail-source-read-passwd
! 		   (format "Password for %s at %s: " user subtype))))
! 	(when (and password
! 		   (not (assoc (format "webmail:%s:%s" subtype user) 
! 			       mail-source-password-cache)))
! 	  (push (cons (format "webmail:%s:%s" subtype user) password) 
! 		mail-source-password-cache)))
        (webmail-fetch mail-source-crash-box subtype user password)
        (mail-source-callback callback (symbol-name subtype)))))
  
*** pub/pgnus/lisp/mailcap.el	Wed Jan  5 17:09:45 2000
--- pgnus/lisp/mailcap.el	Thu Apr 20 01:31:18 2000
***************
*** 714,719 ****
--- 714,720 ----
      (".cpio"     . "application/x-cpio")
      (".csh"      . "application/x-csh")
      (".dvi"      . "application/x-dvi")
+     (".diff"     . "text/x-patch")
      (".el"       . "application/emacs-lisp")
      (".eps"      . "application/postscript")
      (".etx"      . "text/x-setext")
***************
*** 800,810 ****
     ((memq system-type '(ms-dos ms-windows windows-nt))
      (setq path (mapconcat 'expand-file-name
  			  '("~/mime.typ" "~/etc/mime.typ") ";")))
!    (t (setq path (mapconcat 'expand-file-name
! 			    '("~/.mime-types"
! 			      "/etc/mime-types:/usr/etc/mime-types"
! 			      "/usr/local/etc/mime-types"
! 			      "/usr/local/www/conf/mime-types") ":"))))
    (let ((fnames (reverse
  		 (split-string path
  			       (if (memq system-type
--- 801,821 ----
     ((memq system-type '(ms-dos ms-windows windows-nt))
      (setq path (mapconcat 'expand-file-name
  			  '("~/mime.typ" "~/etc/mime.typ") ";")))
!    (t (setq path (mapconcat
! 		  'expand-file-name
! 		  ;; mime.types seems to be the normal name,
! 		  ;; definitely so on current GNUish systems.  The
! 		  ;; ordering follows that for mailcap.
! 		  '("~/.mime.types"
! 		    "/etc/mime.types"
! 		    "/usr/etc/mime.types"
! 		    "/usr/local/etc/mime.types"
! 		    "/usr/local/www/conf/mime.types"
! 		    "~/.mime-types"
! 		    "/etc/mime-types"
! 		    "/usr/etc/mime-types"
! 		    "/usr/local/etc/mime-types"
! 		    "/usr/local/www/conf/mime-types") ":"))))
    (let ((fnames (reverse
  		 (split-string path
  			       (if (memq system-type
*** pub/pgnus/lisp/message.el	Wed Jan  5 17:09:45 2000
--- pgnus/lisp/message.el	Thu Apr 20 01:31:19 2000
***************
*** 33,39 ****
  (require 'mailheader)
  (require 'nnheader)
  (require 'easymenu)
- (require 'custom)
  (if (string-match "XEmacs\\|Lucid" emacs-version)
      (require 'mail-abbrevs)
    (require 'mailabbrev))
--- 33,38 ----
***************
*** 2135,2141 ****
  	 (news (message-news-p))
  	 (mailbuf (current-buffer))
  	 (message-this-is-mail t)
! 	 (message-posting-charset (gnus-setup-posting-charset nil)))
      (save-restriction
        (message-narrow-to-headers)
        ;; Insert some headers.
--- 2134,2143 ----
  	 (news (message-news-p))
  	 (mailbuf (current-buffer))
  	 (message-this-is-mail t)
! 	 (message-posting-charset
! 	  (if (fboundp 'gnus-setup-posting-charset)
! 	      (gnus-setup-posting-charset nil)
! 	    message-posting-charset)))
      (save-restriction
        (message-narrow-to-headers)
        ;; Insert some headers.
***************
*** 2179,2185 ****
  (defun message-send-mail-with-sendmail ()
    "Send off the prepared buffer with sendmail."
    (let ((errbuf (if message-interactive
! 		    (message-generate-new-buffer-clone-locals " sendmail errors")
  		  0))
  	resend-to-addresses delimline)
      (let ((case-fold-search t))
--- 2181,2188 ----
  (defun message-send-mail-with-sendmail ()
    "Send off the prepared buffer with sendmail."
    (let ((errbuf (if message-interactive
! 		    (message-generate-new-buffer-clone-locals
! 		     " sendmail errors")
  		  0))
  	resend-to-addresses delimline)
      (let ((case-fold-search t))
***************
*** 2397,2403 ****
  (defun message-check-news-header-syntax ()
    (and
     ;; Check Newsgroups header.
!    (message-check 'newsgroyps
       (let ((group (message-fetch-field "newsgroups")))
         (or
  	(and group
--- 2400,2406 ----
  (defun message-check-news-header-syntax ()
    (and
     ;; Check Newsgroups header.
!    (message-check 'newsgroups
       (let ((group (message-fetch-field "newsgroups")))
         (or
  	(and group
***************
*** 3793,3798 ****
--- 3796,3803 ----
      (cond ((save-window-excursion
  	     (if (not (eq system-type 'vax-vms))
  		 (with-output-to-temp-buffer "*Directory*"
+ 		   (with-current-buffer standard-output
+ 		     (fundamental-mode)) ; for Emacs 20.4+
  		   (buffer-disable-undo standard-output)
  		   (let ((default-directory "/"))
  		     (call-process
***************
*** 4161,4166 ****
--- 4166,4172 ----
  	(save-excursion
  	  (with-output-to-temp-buffer " *MESSAGE information message*"
  	    (set-buffer " *MESSAGE information message*")
+ 	    (fundamental-mode)		; for Emacs 20.4+
  	    (mapcar 'princ text)
  	    (goto-char (point-min))))
  	(funcall ask question))
*** pub/pgnus/lisp/mm-bodies.el	Wed Jan  5 17:09:46 2000
--- pgnus/lisp/mm-bodies.el	Thu Apr 20 01:31:20 2000
***************
*** 150,164 ****
  	   ((eq encoding 'quoted-printable)
  	    (quoted-printable-decode-region (point-min) (point-max)))
  	   ((eq encoding 'base64)
! 	    (base64-decode-region (point-min)
! 				  ;; Some mailers insert whitespace
! 				  ;; junk at the end which
! 				  ;; base64-decode-region dislikes.
! 				  (save-excursion
! 				    (goto-char (point-max))
! 				    (skip-chars-backward "\n\t ")
! 				    (delete-region (point) (point-max))
! 				    (point))))
  	   ((memq encoding '(7bit 8bit binary))
  	    ;; Do nothing.
  	    )
--- 150,165 ----
  	   ((eq encoding 'quoted-printable)
  	    (quoted-printable-decode-region (point-min) (point-max)))
  	   ((eq encoding 'base64)
! 	    (base64-decode-region
! 	     (point-min)
! 	     ;; Some mailers insert whitespace
! 	     ;; junk at the end which
! 	     ;; base64-decode-region dislikes.
! 	     (save-excursion
! 	       (goto-char (point-max))
! 	       (skip-chars-backward "\n\t ")
! 	       (delete-region (point) (point-max))
! 	       (point))))
  	   ((memq encoding '(7bit 8bit binary))
  	    ;; Do nothing.
  	    )
*** pub/pgnus/lisp/mm-decode.el	Wed Jan  5 17:09:46 2000
--- pgnus/lisp/mm-decode.el	Thu Apr 20 01:31:21 2000
***************
*** 220,225 ****
--- 220,227 ----
  		cd (mail-fetch-field "content-disposition")
  		description (mail-fetch-field "content-description")
  		id (mail-fetch-field "content-id"))))
+       (when cte
+ 	(setq cte (mail-header-strip cte)))
        (if (or (not ctl)
  	      (not (string-match "/" (car ctl))))
  	  (mm-dissect-singlepart
***************
*** 255,261 ****
  
  (defun mm-dissect-singlepart (ctl cte &optional force cdl description id)
    (when (or force
! 	    (not (equal "text/plain" (car ctl))))
      (let ((res (mm-make-handle
  		(mm-copy-to-buffer) ctl cte nil cdl description nil id)))
        (push (car res) mm-dissection-list)
--- 257,265 ----
  
  (defun mm-dissect-singlepart (ctl cte &optional force cdl description id)
    (when (or force
! 	    (if (equal "text/plain" (car ctl))
! 		(assoc 'format ctl)
! 	      t))
      (let ((res (mm-make-handle
  		(mm-copy-to-buffer) ctl cte nil cdl description nil id)))
        (push (car res) mm-dissection-list)
***************
*** 433,452 ****
  (defun mm-mailcap-command (method file type-list)
    (let ((ctl (cdr type-list))
  	(beg 0)
  	out sub total)
!     (while (string-match "%{\\([^}]+\\)}\\|%s\\|%t" method beg)
        (push (substring method beg (match-beginning 0)) out)
        (setq beg (match-end 0)
  	    total (match-string 0 method)
  	    sub (match-string 1 method))
        (cond
         ((string= total "%s")
  	(push (mm-quote-arg file) out))
         ((string= total "%t")
  	(push (mm-quote-arg (car type-list)) out))
         (t
  	(push (mm-quote-arg (or (cdr (assq (intern sub) ctl)) "")) out))))
      (push (substring method beg (length method)) out)
      (mapconcat 'identity (nreverse out) "")))
      
  (defun mm-remove-parts (handles)
--- 437,464 ----
  (defun mm-mailcap-command (method file type-list)
    (let ((ctl (cdr type-list))
  	(beg 0)
+ 	(uses-stdin t)
  	out sub total)
!     (while (string-match "%{\\([^}]+\\)}\\|%s\\|%t\\|%%" method beg)
        (push (substring method beg (match-beginning 0)) out)
        (setq beg (match-end 0)
  	    total (match-string 0 method)
  	    sub (match-string 1 method))
        (cond
+        ((string= total "%%")
+ 	(push "%" out))
         ((string= total "%s")
+ 	(setq uses-stdin nil)
  	(push (mm-quote-arg file) out))
         ((string= total "%t")
  	(push (mm-quote-arg (car type-list)) out))
         (t
  	(push (mm-quote-arg (or (cdr (assq (intern sub) ctl)) "")) out))))
      (push (substring method beg (length method)) out)
+     (if uses-stdin
+ 	(progn
+ 	  (push "<" out)
+ 	  (push (mm-quote-arg file) out)))
      (mapconcat 'identity (nreverse out) "")))
      
  (defun mm-remove-parts (handles)
*** pub/pgnus/lisp/mm-util.el	Wed Jan  5 17:09:47 2000
--- pgnus/lisp/mm-util.el	Thu Apr 20 01:31:22 2000
***************
*** 94,99 ****
--- 94,106 ----
  	   prompt (mapcar (lambda (s) (list (symbol-name (car s))))
  			  mm-mime-mule-charset-alist)))))))
  
+ (eval-and-compile
+   (defalias 'mm-char-or-char-int-p
+     (cond 
+      ((fboundp 'char-or-char-int-p) 'char-or-char-int-p)
+      ((fboundp 'char-valid-p) 'char-valid-p) 
+      (t 'identity))))
+ 
  (defvar mm-coding-system-list nil)
  (defun mm-get-coding-system-list ()
    "Get the coding system list."
***************
*** 241,247 ****
  
  (defun mm-mime-charset (charset)
    "Return the MIME charset corresponding to the MULE CHARSET."
!   (if (fboundp 'coding-system-get)
        ;; This exists in Emacs 20.
        (or
         (and (mm-preferred-coding-system charset)
--- 248,254 ----
  
  (defun mm-mime-charset (charset)
    "Return the MIME charset corresponding to the MULE CHARSET."
!   (if (and (fboundp 'coding-system-get) (fboundp 'get-charset-property))
        ;; This exists in Emacs 20.
        (or
         (and (mm-preferred-coding-system charset)
*** pub/pgnus/lisp/mm-view.el	Wed Jan  5 17:09:47 2000
--- pgnus/lisp/mm-view.el	Thu Apr 20 01:31:22 2000
***************
*** 33,38 ****
--- 33,39 ----
    (autoload 'gnus-article-prepare-display "gnus-art")
    (autoload 'vcard-parse-string "vcard")
    (autoload 'vcard-format-string "vcard")
+   (autoload 'fill-flowed "fill-flowed")
    (autoload 'diff-mode "diff-mode"))
  
  ;;;
***************
*** 127,141 ****
        (mm-insert-inline
         handle
         (concat "\n-- \n"
! 	       (vcard-format-string
! 		(vcard-parse-string (mm-get-part handle)
! 				    'vcard-standard-filter)))))
       (t
        (setq text (mm-get-part handle))
        (let ((b (point))
  	    (charset (mail-content-type-get
  		      (mm-handle-type handle) 'charset)))
  	(insert (mm-decode-string text charset))
  	(save-restriction
  	  (narrow-to-region b (point))
  	  (set-text-properties (point-min) (point-max) nil)
--- 128,152 ----
        (mm-insert-inline
         handle
         (concat "\n-- \n"
! 	       (if (fboundp 'vcard-pretty-print)
! 		   (vcard-pretty-print (mm-get-part handle))
! 		 (vcard-format-string
! 		  (vcard-parse-string (mm-get-part handle)
! 				      'vcard-standard-filter))))))
       (t
        (setq text (mm-get-part handle))
        (let ((b (point))
  	    (charset (mail-content-type-get
  		      (mm-handle-type handle) 'charset)))
  	(insert (mm-decode-string text charset))
+ 	(when (and (equal type "plain")
+ 		   (equal (cdr (assoc 'format (mm-handle-type handle)))
+ 			  "flowed"))
+ 	  (save-restriction
+ 	    (narrow-to-region b (point))
+ 	    (goto-char b)
+ 	    (fill-flowed)
+ 	    (goto-char (point-max))))
  	(save-restriction
  	  (narrow-to-region b (point))
  	  (set-text-properties (point-min) (point-max) nil)
*** pub/pgnus/lisp/nnfolder.el	Wed Jan  5 17:09:49 2000
--- pgnus/lisp/nnfolder.el	Thu Apr 20 01:31:23 2000
***************
*** 746,752 ****
  	    buffer
  	  (push (list group buffer) nnfolder-buffer-alist)
  	  (set-buffer-modified-p t)
! 	  (save-buffer))
        ;; Parse the damn thing.
        (save-excursion
  	(goto-char (point-min))
--- 746,752 ----
  	    buffer
  	  (push (list group buffer) nnfolder-buffer-alist)
  	  (set-buffer-modified-p t)
! 	  (nnfolder-save-buffer))
        ;; Parse the damn thing.
        (save-excursion
  	(goto-char (point-min))
*** pub/pgnus/lisp/nnheader.el	Wed Jan  5 17:09:49 2000
--- pgnus/lisp/nnheader.el	Thu Apr 20 01:31:23 2000
***************
*** 1,6 ****
- 
  ;;; nnheader.el --- header access macros for Gnus and its backends
! ;; Copyright (C) 1987-1990,1993-1999 Free Software Foundation, Inc.
  
  ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
  ;; 	Lars Magne Ingebrigtsen <larsi@gnus.org>
--- 1,7 ----
  ;;; nnheader.el --- header access macros for Gnus and its backends
! 
! ;; Copyright (C) 1987, 88, 89, 90, 93, 94, 95, 96, 97, 98, 99
! ;;   Free Software Foundation, Inc.
  
  ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
  ;; 	Lars Magne Ingebrigtsen <larsi@gnus.org>
***************
*** 728,741 ****
    (concat
     (let ((dir (file-name-as-directory (expand-file-name dir))))
       ;; If this directory exists, we use it directly.
!      (if (file-directory-p (concat dir group))
! 	 (concat dir group "/")
!        ;; If not, we translate dots into slashes.
!        (concat dir
! 	       (mm-encode-coding-string
! 		(nnheader-replace-chars-in-string group ?. ?/)
! 		nnheader-pathname-coding-system)
! 	       "/")))
     (cond ((null file) "")
  	 ((numberp file) (int-to-string file))
  	 (t file))))
--- 729,742 ----
    (concat
     (let ((dir (file-name-as-directory (expand-file-name dir))))
       ;; If this directory exists, we use it directly.
!      (file-name-as-directory
!       (if (file-directory-p (concat dir group))
! 	  (expand-file-name group dir)
! 	;; If not, we translate dots into slashes.
! 	(expand-file-name (mm-encode-coding-string
! 			   (nnheader-replace-chars-in-string group ?. ?/)
! 			  nnheader-pathname-coding-system)
! 			  dir))))
     (cond ((null file) "")
  	 ((numberp file) (int-to-string file))
  	 (t file))))
*** pub/pgnus/lisp/nnimap.el	Wed Jan  5 17:09:49 2000
--- pgnus/lisp/nnimap.el	Thu Apr 20 01:31:24 2000
***************
*** 126,131 ****
--- 126,138 ----
  be called with the headers narrowed and should return a group where it
  thinks the article should be splitted to.")
  
+ (defvar nnimap-split-predicate "UNSEEN UNDELETED"
+   "The predicate used to find articles to split.
+ If you use another IMAP client to peek on articles but always would
+ like nnimap to split them once it's started, you could change this to
+ \"UNDELETED\". Other available predicates are available in
+ RFC2060 section 6.4.4.")
+ 
  (defvar nnimap-split-fancy nil
    "Like `nnmail-split-fancy', which see.")
  
***************
*** 361,369 ****
  				 nnimap-progress-how-often)
  			      nnimap-progress-chars)))
    (with-current-buffer nntp-server-buffer
!     (let (headers lines chars uid)
        (with-current-buffer nnimap-server-buffer
  	(setq uid imap-current-message
  	      headers (if (imap-capability 'IMAP4rev1)
  			  ;; xxx don't just use car? alist doesn't contain
  			  ;; anything else now, but it might...
--- 368,377 ----
  				 nnimap-progress-how-often)
  			      nnimap-progress-chars)))
    (with-current-buffer nntp-server-buffer
!     (let (headers lines chars uid mbx)
        (with-current-buffer nnimap-server-buffer
  	(setq uid imap-current-message
+ 	      mbx imap-current-mailbox
  	      headers (if (imap-capability 'IMAP4rev1)
  			  ;; xxx don't just use car? alist doesn't contain
  			  ;; anything else now, but it might...
***************
*** 376,385 ****
--- 384,397 ----
  	 (buffer-disable-undo)
  	 (insert headers)
  	 (nnheader-ms-strip-cr)
+ 	 (nnheader-fold-continuation-lines)
+ 	 (subst-char-in-region (point-min) (point-max) ?\t ? )
  	 (let ((head (nnheader-parse-head 'naked)))
  	   (mail-header-set-number head uid)
  	   (mail-header-set-chars head chars)
  	   (mail-header-set-lines head lines)
+ 	   (mail-header-set-xref
+ 	    head (format "%s %s:%d" (system-name) mbx uid))
  	   head))))))
  
  (defun nnimap-retrieve-which-headers (articles fetch-old)
***************
*** 492,499 ****
  		    ;; remove nov's for articles which has expired on server
  		    (goto-char (point-min))
  		    (dolist (uid (gnus-set-difference articles uids))
! 		      (when (re-search-forward (format "^%d\t" uid) nil t)
! 			(gnus-delete-line)))))
  	      ;; nothing cached, fetch whole range from server
  	      (nnimap-retrieve-headers-from-server
  	       (cons low high) group server))
--- 504,511 ----
  		    ;; remove nov's for articles which has expired on server
  		    (goto-char (point-min))
  		    (dolist (uid (gnus-set-difference articles uids))
!                       (when (re-search-forward (format "^%d\t" uid) nil t)
!                         (gnus-delete-line)))))
  	      ;; nothing cached, fetch whole range from server
  	      (nnimap-retrieve-headers-from-server
  	       (cons low high) group server))
***************
*** 602,609 ****
      (nnheader-ms-strip-cr)
      (funcall nnimap-callback-callback-function t)))
  
! (defun nnimap-request-article-part (article part prop
! 					    &optional group server to-buffer)
    (when (nnimap-possibly-change-group group server)
      (let ((article (if (stringp article)
  		       (car-safe (imap-search
--- 614,621 ----
      (nnheader-ms-strip-cr)
      (funcall nnimap-callback-callback-function t)))
  
! (defun nnimap-request-article-part (article part prop &optional
!                                             group server to-buffer detail)
    (when (nnimap-possibly-change-group group server)
      (let ((article (if (stringp article)
  		       (car-safe (imap-search
***************
*** 615,623 ****
  	(if (not nnheader-callback-function)
  	    (with-current-buffer (or to-buffer nntp-server-buffer)
  	      (erase-buffer)
! 	      (insert (nnimap-demule (imap-fetch article part prop nil
! 						 nnimap-server-buffer)))
! 	      (nnheader-ms-strip-cr)
  	      (gnus-message 9 "nnimap: Fetching (part of) article %d...done"
  			    article)
  	      (if (bobp)
--- 627,638 ----
  	(if (not nnheader-callback-function)
  	    (with-current-buffer (or to-buffer nntp-server-buffer)
  	      (erase-buffer)
!               (let ((data (imap-fetch article part prop nil
!                                       nnimap-server-buffer)))
!                 (insert (nnimap-demule (if detail
!                                            (nth 2 (car data))
!                                          data))))
!               (nnheader-ms-strip-cr)
  	      (gnus-message 9 "nnimap: Fetching (part of) article %d...done"
  			    article)
  	      (if (bobp)
***************
*** 634,649 ****
    t)
  
  (deffoo nnimap-request-article (article &optional group server to-buffer)
!   (nnimap-request-article-part
!    article "RFC822.PEEK" 'RFC822 group server to-buffer))
  
  (deffoo nnimap-request-head (article &optional group server to-buffer)
!   (nnimap-request-article-part
!    article "RFC822.HEADER" 'RFC822.HEADER group server to-buffer))
  
  (deffoo nnimap-request-body (article &optional group server to-buffer)
!   (nnimap-request-article-part
!    article "RFC822.TEXT.PEEK" 'RFC822.TEXT group server to-buffer))
  
  (deffoo nnimap-request-group (group &optional server fast)
    (nnimap-request-update-info-internal
--- 649,673 ----
    t)
  
  (deffoo nnimap-request-article (article &optional group server to-buffer)
!   (if (imap-capability 'IMAP4rev1 nnimap-server-buffer)
!       (nnimap-request-article-part
!        article "BODY.PEEK[]" 'BODYDETAIL group server to-buffer 'detail)
!     (nnimap-request-article-part
!      article "RFC822.PEEK" 'RFC822 group server to-buffer)))
  
  (deffoo nnimap-request-head (article &optional group server to-buffer)
!   (if (imap-capability 'IMAP4rev1 nnimap-server-buffer)
!       (nnimap-request-article-part
!        article "BODY.PEEK[HEADER]" 'BODYDETAIL group server to-buffer 'detail)
!     (nnimap-request-article-part
!      article "RFC822.HEADER" 'RFC822.HEADER group server to-buffer)))
  
  (deffoo nnimap-request-body (article &optional group server to-buffer)
!   (if (imap-capability 'IMAP4rev1 nnimap-server-buffer)
!       (nnimap-request-article-part
!        article "BODY.PEEK[TEXT]" 'BODYDETAIL group server to-buffer 'detail)
!     (nnimap-request-article-part
!      article "RFC822.TEXT.PEEK" 'RFC822.TEXT group server to-buffer)))
  
  (deffoo nnimap-request-group (group &optional server fast)
    (nnimap-request-update-info-internal
***************
*** 889,895 ****
  	  ;; find split rule for this server / inbox
  	  (when (setq rule (nnimap-split-find-rule server inbox))
  	    ;; iterate over articles
! 	    (dolist (article (imap-search "UNSEEN UNDELETED"))
  	      (when (nnimap-request-head article)
  		;; copy article to right group(s)
  		(setq removeorig nil)
--- 913,919 ----
  	  ;; find split rule for this server / inbox
  	  (when (setq rule (nnimap-split-find-rule server inbox))
  	    ;; iterate over articles
! 	    (dolist (article (imap-search nnimap-split-predicate))
  	      (when (nnimap-request-head article)
  		;; copy article to right group(s)
  		(setq removeorig nil)
*** pub/pgnus/lisp/nnmail.el	Wed Jan  5 17:09:50 2000
--- pgnus/lisp/nnmail.el	Thu Apr 20 01:31:25 2000
***************
*** 1,5 ****
  ;;; nnmail.el --- mail support functions for the Gnus mail backends
! ;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
  
  ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
  ;; Keywords: news, mail
--- 1,5 ----
  ;;; nnmail.el --- mail support functions for the Gnus mail backends
! ;; Copyright (C) 1995,96,97,98,99, 00 Free Software Foundation, Inc.
  
  ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
  ;; Keywords: news, mail
***************
*** 468,499 ****
  		  ?. ?_))
       (setq group (nnheader-translate-file-chars group))
       ;; If this directory exists, we use it directly.
!      (if (or nnmail-use-long-file-names
! 	     (file-directory-p (concat dir group)))
! 	 (concat dir group "/")
!        ;; If not, we translate dots into slashes.
!        (concat dir
! 	       (mm-encode-coding-string
! 		(nnheader-replace-chars-in-string group ?. ?/)
! 		nnmail-pathname-coding-system)
! 	       "/")))
     (or file "")))
  
  (defun nnmail-get-active ()
    "Returns an assoc of group names and active ranges.
  nn*-request-list should have been called before calling this function."
!   (let (group-assoc)
!     ;; Go through all groups from the active list.
!     (save-excursion
!       (set-buffer nntp-server-buffer)
!       (goto-char (point-min))
!       (while (re-search-forward
! 	      "^\\([^ \t]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)" nil t)
! 	;; We create an alist with `(GROUP (LOW . HIGH))' elements.
! 	(push (list (match-string 1)
! 		    (cons (string-to-int (match-string 3))
! 			  (string-to-int (match-string 2))))
! 	      group-assoc)))
      group-assoc))
  
  (defvar nnmail-active-file-coding-system 'raw-text
--- 468,517 ----
  		  ?. ?_))
       (setq group (nnheader-translate-file-chars group))
       ;; If this directory exists, we use it directly.
!      (file-name-as-directory
!       (if (or nnmail-use-long-file-names
! 	      (file-directory-p (concat dir group)))
! 	  (expand-file-name group dir)
! 	;; If not, we translate dots into slashes.
! 	(expand-file-name
! 	 (mm-encode-coding-string
! 	  (nnheader-replace-chars-in-string group ?. ?/)
! 	  nnmail-pathname-coding-system)
! 	 dir))))
     (or file "")))
  
  (defun nnmail-get-active ()
    "Returns an assoc of group names and active ranges.
  nn*-request-list should have been called before calling this function."
!   ;; Go through all groups from the active list.
!   (save-excursion
!     (set-buffer nntp-server-buffer)
!     (nnmail-parse-active)))
! 
! (defun nnmail-parse-active ()
!   "Parse the active file in the current buffer and return an alist."
!   (goto-char (point-min))
!   (unless (re-search-forward "[\\\"]" nil t)
!     (goto-char (point-max))
!     (while (re-search-backward "[][';?()#]" nil t)
!       (insert ?\\)))
!   (goto-char (point-min))
!   (let ((buffer (current-buffer))
! 	group-assoc group max min)
!     (while (not (eobp))
!       (condition-case err
! 	  (progn
! 	    (narrow-to-region (point) (gnus-point-at-eol))
! 	    (setq group (read buffer))
! 	    (unless (stringp group)
! 	      (setq group (symbol-name group)))
! 	    (if (and (numberp (setq max (read nntp-server-buffer)))
! 		     (numberp (setq min (read nntp-server-buffer))))
! 		(push (list group (cons min max))
! 		      group-assoc)))
! 	(error nil))
!       (widen)
!       (forward-line 1))
      group-assoc))
  
  (defvar nnmail-active-file-coding-system 'raw-text
***************
*** 511,518 ****
    (erase-buffer)
    (let (group)
      (while (setq group (pop alist))
!       (insert (format "%s %d %d y\n" (car group) (cdadr group)
! 		      (caadr group))))))
  
  (defun nnmail-get-split-group (file source)
    "Find out whether this FILE is to be split into GROUP only.
--- 529,539 ----
    (erase-buffer)
    (let (group)
      (while (setq group (pop alist))
!       (insert (format "%S %d %d y\n" (intern (car group)) (cdadr group)
! 		      (caadr group))))
!     (goto-char (point-max))
!     (while (search-backward "\\." nil t)
!       (delete-char 1))))
  
  (defun nnmail-get-split-group (file source)
    "Find out whether this FILE is to be split into GROUP only.
***************
*** 1066,1072 ****
      (goto-char (point-min))
      (when (re-search-forward "^References:" nil t)
        (beginning-of-line)
!       (insert "X-Gnus-Broken-Eudora-"))))
  
  (custom-add-option 'nnmail-prepare-incoming-header-hook
  		   'nnmail-fix-eudora-headers)
--- 1087,1096 ----
      (goto-char (point-min))
      (when (re-search-forward "^References:" nil t)
        (beginning-of-line)
!       (insert "X-Gnus-Broken-Eudora-"))
!     (goto-char (point-min))
!     (when (re-search-forward "^In-Reply-To:[^\n]+\\(\n[ \t]+\\)" nil t)
!       (replace-match "" t t nil 1))))
  
  (custom-add-option 'nnmail-prepare-incoming-header-hook
  		   'nnmail-fix-eudora-headers)
***************
*** 1577,1582 ****
--- 1601,1608 ----
    (unless nnmail-split-history
      (error "No current split history"))
    (with-output-to-temp-buffer "*nnmail split history*"
+     (with-current-buffer standard-output
+       (fundamental-mode))		; for Emacs 20.4+
      (let ((history nnmail-split-history)
  	  elem)
        (while (setq elem (pop history))
*** pub/pgnus/lisp/nnml.el	Wed Jan  5 17:09:50 2000
--- pgnus/lisp/nnml.el	Thu Apr 20 01:31:26 2000
***************
*** 41,51 ****
    "Spool directory for the nnml mail backend.")
  
  (defvoo nnml-active-file
!     (concat (file-name-as-directory nnml-directory) "active")
    "Mail active file.")
  
  (defvoo nnml-newsgroups-file
!     (concat (file-name-as-directory nnml-directory) "newsgroups")
    "Mail newsgroups description file.")
  
  (defvoo nnml-get-new-mail t
--- 41,51 ----
    "Spool directory for the nnml mail backend.")
  
  (defvoo nnml-active-file
!     (expand-file-name "active" nnml-directory)
    "Mail active file.")
  
  (defvoo nnml-newsgroups-file
!     (expand-file-name "newsgroups" nnml-directory)
    "Mail newsgroups description file.")
  
  (defvoo nnml-get-new-mail t
***************
*** 372,379 ****
  	      (nnmail-write-region
  	       (point-min) (point-max)
  	       (or (nnml-article-to-file article)
! 		   (concat nnml-current-directory
! 			   (int-to-string article)))
  	       nil (if (nnheader-be-verbose 5) nil 'nomesg))
  	      t)
  	(setq headers (nnml-parse-head chars article))
--- 372,379 ----
  	      (nnmail-write-region
  	       (point-min) (point-max)
  	       (or (nnml-article-to-file article)
! 		   (expand-file-name (int-to-string article)
! 				     nnml-current-directory))
  	       nil (if (nnheader-be-verbose 5) nil 'nomesg))
  	      t)
  	(setq headers (nnml-parse-head chars article))
***************
*** 477,483 ****
    (nnml-update-file-alist)
    (let (file)
      (if (setq file (cdr (assq article nnml-article-file-alist)))
! 	(concat nnml-current-directory file)
        ;; Just to make sure nothing went wrong when reading over NFS --
        ;; check once more.
        (when (file-exists-p
--- 477,483 ----
    (nnml-update-file-alist)
    (let (file)
      (if (setq file (cdr (assq article nnml-article-file-alist)))
! 	(expand-file-name file nnml-current-directory)
        ;; Just to make sure nothing went wrong when reading over NFS --
        ;; check once more.
        (when (file-exists-p
***************
*** 518,525 ****
  
  (defun nnml-find-id (group id)
    (erase-buffer)
!   (let ((nov (concat (nnmail-group-pathname group nnml-directory)
! 		     nnml-nov-file-name))
  	number found)
      (when (file-exists-p nov)
        (nnheader-insert-file-contents nov)
--- 518,525 ----
  
  (defun nnml-find-id (group id)
    (erase-buffer)
!   (let ((nov (expand-file-name nnml-nov-file-name
! 			       (nnmail-group-pathname group nnml-directory)))
  	number found)
      (when (file-exists-p nov)
        (nnheader-insert-file-contents nov)
***************
*** 539,545 ****
  (defun nnml-retrieve-headers-with-nov (articles &optional fetch-old)
    (if (or gnus-nov-is-evil nnml-nov-is-evil)
        nil
!     (let ((nov (concat nnml-current-directory nnml-nov-file-name)))
        (when (file-exists-p nov)
  	(save-excursion
  	  (set-buffer nntp-server-buffer)
--- 539,545 ----
  (defun nnml-retrieve-headers-with-nov (articles &optional fetch-old)
    (if (or gnus-nov-is-evil nnml-nov-is-evil)
        nil
!     (let ((nov (expand-file-name nnml-nov-file-name nnml-current-directory)))
        (when (file-exists-p nov)
  	(save-excursion
  	  (set-buffer nntp-server-buffer)
***************
*** 635,642 ****
        (push (list group active) nnml-group-alist))
      (setcdr active (1+ (cdr active)))
      (while (file-exists-p
! 	    (concat (nnmail-group-pathname group nnml-directory)
! 		    (int-to-string (cdr active))))
        (setcdr active (1+ (cdr active))))
      (cdr active)))
  
--- 635,642 ----
        (push (list group active) nnml-group-alist))
      (setcdr active (1+ (cdr active)))
      (while (file-exists-p
! 	    (expand-file-name (int-to-string (cdr active))
! 			      (nnmail-group-pathname group nnml-directory)))
        (setcdr active (1+ (cdr active))))
      (cdr active)))
  
***************
*** 676,683 ****
  	(save-excursion
  	  (set-buffer buffer)
  	  (set (make-local-variable 'nnml-nov-buffer-file-name)
! 	       (concat (nnmail-group-pathname group nnml-directory)
! 		       nnml-nov-file-name))
  	  (erase-buffer)
  	  (when (file-exists-p nnml-nov-buffer-file-name)
  	    (nnheader-insert-file-contents nnml-nov-buffer-file-name)))
--- 676,684 ----
  	(save-excursion
  	  (set-buffer buffer)
  	  (set (make-local-variable 'nnml-nov-buffer-file-name)
! 	       (expand-file-name
! 		nnml-nov-file-name
! 		(nnmail-group-pathname group nnml-directory)))
  	  (erase-buffer)
  	  (when (file-exists-p nnml-nov-buffer-file-name)
  	    (nnheader-insert-file-contents nnml-nov-buffer-file-name)))
*** pub/pgnus/lisp/nnslashdot.el	Wed Jan  5 17:09:50 2000
--- pgnus/lisp/nnslashdot.el	Thu Apr 20 01:31:27 2000
***************
*** 377,387 ****
  	      (narrow-to-region (point) (search-forward "</story>"))
  	      (goto-char (point-min))
  	      (re-search-forward "<title>\\([^<]+\\)</title>")
! 	      (setq description (nnweb-decode-entities-string (match-string 1)))
  	      (re-search-forward "<url>\\([^<]+\\)</url>")
  	      (setq sid (match-string 1))
! 	      (string-match "/\\([0-9/]+\\).shtml" sid)
! 	      (setq sid (match-string 1 sid))
  	      (re-search-forward "<comments>\\([^<]+\\)</comments>")
  	      (setq articles (string-to-number (match-string 1)))
  	      (setq gname (concat description " (" sid ")"))
--- 377,388 ----
  	      (narrow-to-region (point) (search-forward "</story>"))
  	      (goto-char (point-min))
  	      (re-search-forward "<title>\\([^<]+\\)</title>")
! 	      (setq description
! 		    (nnweb-decode-entities-string (match-string 1)))
  	      (re-search-forward "<url>\\([^<]+\\)</url>")
  	      (setq sid (match-string 1))
! 	      (string-match "/\\([0-9/]+\\)\\(.shtml\\|$\\)" sid)
! 	      (setq sid (concat "00/" (match-string 1 sid)))
  	      (re-search-forward "<comments>\\([^<]+\\)</comments>")
  	      (setq articles (string-to-number (match-string 1)))
  	      (setq gname (concat description " (" sid ")"))
***************
*** 397,405 ****
  		(nnweb-insert (format nnslashdot-active-url number) t)
  		(goto-char (point-min))
  		(while (re-search-forward
! 			"article.pl\\?sid=\\([^&]+\\).*<b>\\([^<]+\\)</b>" nil t)
  		  (setq sid (match-string 1)
! 			description (nnweb-decode-entities-string (match-string 2)))
  		  (forward-line 1)
  		  (when (re-search-forward "<b>\\([0-9]+\\)</b>" nil t)
  		    (setq articles (string-to-number (match-string 1))))
--- 398,408 ----
  		(nnweb-insert (format nnslashdot-active-url number) t)
  		(goto-char (point-min))
  		(while (re-search-forward
! 			"article.pl\\?sid=\\([^&]+\\).*<b>\\([^<]+\\)</b>"
! 			nil t)
  		  (setq sid (match-string 1)
! 			description
! 			(nnweb-decode-entities-string (match-string 2)))
  		  (forward-line 1)
  		  (when (re-search-forward "<b>\\([0-9]+\\)</b>" nil t)
  		    (setq articles (string-to-number (match-string 1))))
*** pub/pgnus/lisp/nntp.el	Wed Jan  5 17:09:51 2000
--- pgnus/lisp/nntp.el	Thu Apr 20 01:31:28 2000
***************
*** 1,5 ****
  ;;; nntp.el --- nntp access for Gnus
! ;;; Copyright (C) 1987-90,92-99 Free Software Foundation, Inc.
  
  ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
  ;; Keywords: news
--- 1,6 ----
  ;;; nntp.el --- nntp access for Gnus
! ;;; Copyright (C) 1987, 88, 89, 90, 92, 93, 94, 95, 96, 97, 98, 99
! ;;;   Free Software Foundation, Inc.
  
  ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
  ;; Keywords: news
*** pub/pgnus/lisp/nnultimate.el	Wed Jan  5 17:09:51 2000
--- pgnus/lisp/nnultimate.el	Thu Apr 20 01:31:29 2000
***************
*** 82,88 ****
        (while (and (setq article (car articles))
  		  map)
  	(while (and map
! 		    (> article (caar map)))
  	  (pop map))
  	(when (setq mmap (car map))
  	  (setq farticle -1)
--- 82,89 ----
        (while (and (setq article (car articles))
  		  map)
  	(while (and map
! 		    (or (> article (caar map))
! 			(< (cadar map) (caar map))))
  	  (pop map))
  	(when (setq mmap (car map))
  	  (setq farticle -1)
***************
*** 124,130 ****
  				      "-" (number-to-string current-page)
  				      (match-string 0 href))))
  	      (goto-char (point-min))
! 	      (setq contents (w3-parse-buffer (current-buffer)))
  	      (setq table (nnultimate-find-forum-table contents))
  	      (setq string (mapconcat 'identity (nnweb-text table) ""))
  	      (when (string-match "topic is \\([0-9]\\) pages" string)
--- 125,132 ----
  				      "-" (number-to-string current-page)
  				      (match-string 0 href))))
  	      (goto-char (point-min))
! 	      (setq contents
! 		    (ignore-errors (w3-parse-buffer (current-buffer))))
  	      (setq table (nnultimate-find-forum-table contents))
  	      (setq string (mapconcat 'identity (nnweb-text table) ""))
  	      (when (string-match "topic is \\([0-9]\\) pages" string)
***************
*** 337,361 ****
  		(setq art (1+ (string-to-number (car artlist)))))
  	      (pop artlist))
  	    (setq garticles art))
! 	  (string-match "/\\([0-9]+\\).html" href)
! 	  (setq topic (string-to-number (match-string 1 href)))
! 	  (if (setq tinfo (assq topic topics))
! 	      (progn
! 		(setq old-max (cadr tinfo))
! 		(setcar (cdr tinfo) garticles))
! 	    (setq old-max 0)
! 	    (push (list topic garticles subject href) topics)
! 	    (setcar (nthcdr 4 entry) topics))
! 	  (when (not (= old-max garticles))
! 	    (setq inc (- garticles old-max))
! 	    (setq mapping (nconc mapping
! 				 (list
! 				  (list
! 				   old-total (1- (incf old-total inc))
! 				   topic (1+ old-max)))))
! 	    (incf old-max inc)
! 	    (setcar (nthcdr 5 entry) mapping)
! 	    (setcar (nthcdr 6 entry) old-total)))))
      (setcar (nthcdr 7 entry) current-time)
      (setcar (nthcdr 1 entry) (1- old-total))
      (nnultimate-write-groups)
--- 339,364 ----
  		(setq art (1+ (string-to-number (car artlist)))))
  	      (pop artlist))
  	    (setq garticles art))
! 	  (when garticles
! 	    (string-match "/\\([0-9]+\\).html" href)
! 	    (setq topic (string-to-number (match-string 1 href)))
! 	    (if (setq tinfo (assq topic topics))
! 		(progn
! 		  (setq old-max (cadr tinfo))
! 		  (setcar (cdr tinfo) garticles))
! 	      (setq old-max 0)
! 	      (push (list topic garticles subject href) topics)
! 	      (setcar (nthcdr 4 entry) topics))
! 	    (when (not (= old-max garticles))
! 	      (setq inc (- garticles old-max))
! 	      (setq mapping (nconc mapping
! 				   (list
! 				    (list
! 				     old-total (1- (incf old-total inc))
! 				     topic (1+ old-max)))))
! 	      (incf old-max inc)
! 	      (setcar (nthcdr 5 entry) mapping)
! 	      (setcar (nthcdr 6 entry) old-total))))))
      (setcar (nthcdr 7 entry) current-time)
      (setcar (nthcdr 1 entry) (1- old-total))
      (nnultimate-write-groups)
*** pub/pgnus/lisp/nnwarchive.el	Wed Jan  5 17:09:52 2000
--- pgnus/lisp/nnwarchive.el	Thu Apr 20 01:31:30 2000
***************
*** 61,80 ****
    '((egroups
       (address . "www.egroups.com")
       (open-url 
!       "http://www.egroups.com/register?method=loginAction&email=%s&password=%s" 
        nnwarchive-login nnwarchive-passwd)
       (list-url 
!       "http://www.egroups.com/UserGroupsPage?")
       (list-dissect . nnwarchive-egroups-list)
       (list-groups . nnwarchive-egroups-list-groups)
       (xover-url 
!       "http://www.egroups.com/group/%s/?fetchForward=1&start=%d" group aux)
       (xover-last-url 
!       "http://www.egroups.com/group/%s/?fetchForward=1" group)
       (xover-page-size . 13)
       (xover-dissect . nnwarchive-egroups-xover)
       (article-url 
!       "http://www.egroups.com/group/%s/%d.html?raw=1" group article)
       (article-dissect . nnwarchive-egroups-article)
       (authentication . t)
       (article-offset . 0)
--- 61,80 ----
    '((egroups
       (address . "www.egroups.com")
       (open-url 
!       "http://www.egroups.com/login.cgi?&login_email=%s&login_password=%s" 
        nnwarchive-login nnwarchive-passwd)
       (list-url 
!       "http://www.egroups.com/mygroups")
       (list-dissect . nnwarchive-egroups-list)
       (list-groups . nnwarchive-egroups-list-groups)
       (xover-url 
!       "http://www.egroups.com/message/%s/%d" group aux)
       (xover-last-url 
!       "http://www.egroups.com/message/%s/" group)
       (xover-page-size . 13)
       (xover-dissect . nnwarchive-egroups-xover)
       (article-url 
!       "http://www.egroups.com/message/%s/%d?source=1" group article)
       (article-dissect . nnwarchive-egroups-article)
       (authentication . t)
       (article-offset . 0)
***************
*** 287,317 ****
    t)
  
  (deffoo nnwarchive-open-server (server &optional defs connectionless)
    (nnwarchive-init server)
!   (if (nnwarchive-server-opened server)
!       t
!     (nnoo-change-server 'nnwarchive server defs)
!     (when nnwarchive-authentication
!       (setq nnwarchive-login
! 	    (or nnwarchive-login
! 		(read-string
  		 (format "Login at %s: " server)
  		 user-mail-address)))
!       (setq nnwarchive-passwd
! 	    (or nnwarchive-passwd
! 		(mail-source-read-passwd
! 		 (format "Password for %s at %s: " 
! 			 nnwarchive-login server)))))
!     (unless nnwarchive-groups
!       (nnwarchive-read-groups))
!     (save-excursion
!       (set-buffer nnwarchive-buffer)
!       (erase-buffer)
!       (if nnwarchive-open-url
! 	  (nnwarchive-url nnwarchive-open-url))
!       (if nnwarchive-open-dissect
! 	  (funcall nnwarchive-open-dissect)))
!     t))
  
  (nnoo-define-skeleton nnwarchive)
  
--- 287,315 ----
    t)
  
  (deffoo nnwarchive-open-server (server &optional defs connectionless)
+   (nnoo-change-server 'nnwarchive server defs)
    (nnwarchive-init server)
!   (when nnwarchive-authentication
!     (setq nnwarchive-login
! 	  (or nnwarchive-login
! 	      (read-string
  		 (format "Login at %s: " server)
  		 user-mail-address)))
!     (setq nnwarchive-passwd
! 	  (or nnwarchive-passwd
! 	      (mail-source-read-passwd
! 	       (format "Password for %s at %s: " 
! 		       nnwarchive-login server)))))
!   (unless nnwarchive-groups
!     (nnwarchive-read-groups))
!   (save-excursion
!     (set-buffer nnwarchive-buffer)
!     (erase-buffer)
!     (if nnwarchive-open-url
! 	(nnwarchive-url nnwarchive-open-url))
!     (if nnwarchive-open-dissect
! 	(funcall nnwarchive-open-dissect)))
!   t)
  
  (nnoo-define-skeleton nnwarchive)
  
***************
*** 389,402 ****
      expr)))
  
  (defun nnwarchive-url (xurl)
!   (let ((url-confirmation-func 'identity))
!     (cond 
!      ((eq (car xurl) 'post)
!       (pop xurl)
!       (nnwarchive-fetch-form (car xurl) (nnwarchive-eval (cdr xurl))))
!      (t
!       (nnweb-insert (apply 'format (nnwarchive-eval xurl)))))))
! 
  (defun nnwarchive-generate-active ()
    (save-excursion
      (set-buffer nntp-server-buffer)
--- 387,402 ----
      expr)))
  
  (defun nnwarchive-url (xurl)
!   (mm-with-unibyte-current-buffer
!     (let ((url-confirmation-func 'identity)
! 	  (url-cookie-multiple-line nil))
!       (cond 
!        ((eq (car xurl) 'post)
! 	(pop xurl)
! 	(nnwarchive-fetch-form (car xurl) (nnwarchive-eval (cdr xurl))))
!        (t
! 	(nnweb-insert (apply 'format (nnwarchive-eval xurl))))))))
!   
  (defun nnwarchive-generate-active ()
    (save-excursion
      (set-buffer nntp-server-buffer)
***************
*** 424,430 ****
  	(erase-buffer)
  	(nnwarchive-url nnwarchive-xover-last-url)
  	(goto-char (point-min))
! 	(when (re-search-forward "of \\([0-9]+\\)</title>" nil t)
  	  (setq articles (string-to-number (match-string 1)))) 
  	(let ((elem (assoc group nnwarchive-groups)))
  	  (if elem
--- 424,430 ----
  	(erase-buffer)
  	(nnwarchive-url nnwarchive-xover-last-url)
  	(goto-char (point-min))
! 	(when (re-search-forward "of \\([0-9]+\\)[ \t\n\r]*</title>" nil t)
  	  (setq articles (string-to-number (match-string 1)))) 
  	(let ((elem (assoc group nnwarchive-groups)))
  	  (if elem
***************
*** 442,457 ****
  	group description elem articles)
      (goto-char (point-min))
      (while 
! 	(re-search-forward
! 	 "/group/\\([^/]+\\)/info\\.html[^>]+>[^>]+>[\040\t]*-[\040\t]*\\([^<]+\\)<"
! 	 nil t)
        (setq group (match-string 1)
  	    description (match-string 2))
-       (forward-line 1)
-       (when (re-search-forward ">\\([0-9]+\\)<" nil t)
- 	(setq articles (string-to-number (match-string 1)))) 
        (if (setq elem (assoc group nnwarchive-groups))
! 	  (setcar (cdr elem) articles)
  	(push (list group articles description) nnwarchive-groups))))
    t)
  
--- 442,452 ----
  	group description elem articles)
      (goto-char (point-min))
      (while 
! 	(re-search-forward "href=\"/group/\\([^/\"\> ]+\\)" nil t)
        (setq group (match-string 1)
  	    description (match-string 2))
        (if (setq elem (assoc group nnwarchive-groups))
! 	  (setcar (cdr elem) 0)
  	(push (list group articles description) nnwarchive-groups))))
    t)
  
***************
*** 459,465 ****
    (let (article subject from date)
      (goto-char (point-min))
      (while (re-search-forward
! 	    "<a href=\"/group/\\([^/]+\\)/\\([0-9]+\\)\\.html[^>]+>\\([^<]+\\)<"
  	    nil t)
        (setq group  (match-string 1)
  	    article (string-to-number (match-string 2))
--- 454,460 ----
    (let (article subject from date)
      (goto-char (point-min))
      (while (re-search-forward
! 	    "<a href=\"/group/\\([^/]+\\)/\\([0-9]+\\)[^>]+>\\([^<]+\\)<"
  	    nil t)
        (setq group  (match-string 1)
  	    article (string-to-number (match-string 2))
*** pub/pgnus/lisp/nnweb.el	Wed Jan  5 17:09:52 2000
--- pgnus/lisp/nnweb.el	Thu Apr 20 01:31:30 2000
***************
*** 722,728 ****
    (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t)
      (replace-match (char-to-string 
  		    (if (eq (aref (match-string 1) 0) ?\#)
! 			(string-to-number (substring (match-string 1) 1))
  		      (or (cdr (assq (intern (match-string 1))
  				     w3-html-entities))
  			  ?#)))
--- 722,731 ----
    (while (re-search-forward "&\\(#[0-9]+\\|[a-z]+\\);" nil t)
      (replace-match (char-to-string 
  		    (if (eq (aref (match-string 1) 0) ?\#)
! 			(let ((c
! 			       (string-to-number (substring 
! 						  (match-string 1) 1))))
! 			  (if (mm-char-or-char-int-p c) c 32))
  		      (or (cdr (assq (intern (match-string 1))
  				     w3-html-entities))
  			  ?#)))
***************
*** 754,767 ****
  	  (narrow-to-region (point) (point))
  	  (url-insert-file-contents url)
  	  (goto-char (point-min))
! 	  (while (re-search-forward 
! 		  "HTTP-EQUIV=\"Refresh\"[^>]*URL=\\([^\"]+\\)\""
! 		  nil t)
  	    (let ((url (match-string 1)))
  	      (delete-region (point-min) (point-max))
! 	      (nnweb-insert url))
! 	    (goto-char (point-min)))
! 	  (goto-char (point-max)))
        (url-insert-file-contents url))
      (setq buffer-file-name name)))
  
--- 757,767 ----
  	  (narrow-to-region (point) (point))
  	  (url-insert-file-contents url)
  	  (goto-char (point-min))
! 	  (when (re-search-forward 
! 		 "HTTP-EQUIV=\"Refresh\"[^>]*URL=\\([^\"]+\\)\"" nil t)
  	    (let ((url (match-string 1)))
  	      (delete-region (point-min) (point-max))
! 	      (nnweb-insert url t))))
        (url-insert-file-contents url))
      (setq buffer-file-name name)))
  
*** pub/pgnus/lisp/parse-time.el	Wed Jan  5 17:09:52 2000
--- pgnus/lisp/parse-time.el	Thu Apr 20 01:31:31 2000
***************
*** 167,173 ****
  			(= (length elt) 7)
  			(= (aref elt 1) ?:)))
       [0 1] [2 4] [5 7])
!     ((5) (50 99) ,#'(lambda () (+ 1900 elt)))
      ((5) (0 49) ,#'(lambda () (+ 2000 elt))))
    "(slots predicate extractor...)")
  
--- 167,173 ----
  			(= (length elt) 7)
  			(= (aref elt 1) ?:)))
       [0 1] [2 4] [5 7])
!     ((5) (50 110) ,#'(lambda () (+ 1900 elt)))
      ((5) (0 49) ,#'(lambda () (+ 2000 elt))))
    "(slots predicate extractor...)")
  
*** pub/pgnus/lisp/pop3.el	Wed Jan  5 17:09:52 2000
--- pgnus/lisp/pop3.el	Thu Apr 20 01:31:31 2000
***************
*** 1,9 ****
  ;;; pop3.el --- Post Office Protocol (RFC 1460) interface
  
! ;; Copyright (C) 1996-1999 Free Software Foundation, Inc.
  
  ;; Author: Richard L. Pieri <ratinox@peorth.gweep.net>
! ;; Keywords: mail, pop3
  ;; Version: 1.3s
  
  ;; This file is part of GNU Emacs.
--- 1,10 ----
  ;;; pop3.el --- Post Office Protocol (RFC 1460) interface
  
! ;; Copyright (C) 1996, 97, 98, 1999 Free Software Foundation, Inc.
  
  ;; Author: Richard L. Pieri <ratinox@peorth.gweep.net>
! ;; Maintainer: FSF
! ;; Keywords: mail
  ;; Version: 1.3s
  
  ;; This file is part of GNU Emacs.
***************
*** 35,41 ****
  ;;; Code:
  
  (require 'mail-utils)
- (provide 'pop3)
  
  (defconst pop3-version "1.3s")
  
--- 36,41 ----
***************
*** 60,65 ****
--- 60,68 ----
    "Timestamp returned when initially connected to the POP server.
  Used for APOP authentication.")
  
+ (defvar pop3-movemail-file-coding-system nil
+   "Coding system for the crashbox made by `pop3-movemail'.")
+ 
  (defvar pop3-read-point nil)
  (defvar pop3-debug nil)
  
***************
*** 71,78 ****
  	 (n 1)
  	 message-count
  	 (pop3-password pop3-password)
- 	 ;; use Unix line endings for crashbox
- 	 (coding-system-for-write 'binary)
  	 )
      ;; for debugging only
      (if pop3-debug (switch-to-buffer (process-buffer process)))
--- 74,79 ----
***************
*** 85,91 ****
  	  ((equal 'pass pop3-authentication-scheme)
  	   (pop3-user process pop3-maildrop)
  	   (pop3-pass process))
! 	  (t (error "Invalid POP3 authentication scheme.")))
      (setq message-count (car (pop3-stat process)))
      (unwind-protect
  	(while (<= n message-count)
--- 86,92 ----
  	  ((equal 'pass pop3-authentication-scheme)
  	   (pop3-user process pop3-maildrop)
  	   (pop3-pass process))
! 	  (t (error "Invalid POP3 authentication scheme")))
      (setq message-count (car (pop3-stat process)))
      (unwind-protect
  	(while (<= n message-count)
***************
*** 94,100 ****
  	  (pop3-retr process n crashbuf)
  	  (save-excursion
  	    (set-buffer crashbuf)
! 	    (write-region (point-min) (point-max) crashbox t 'nomesg)
  	    (set-buffer (process-buffer process))
  	    (while (> (buffer-size) 5000)
  	      (goto-char (point-min))
--- 95,102 ----
  	  (pop3-retr process n crashbuf)
  	  (save-excursion
  	    (set-buffer crashbuf)
! 	    (let ((coding-system-for-write pop3-movemail-file-coding-system))
! 	      (write-region (point-min) (point-max) crashbox t 'nomesg))
  	    (set-buffer (process-buffer process))
  	    (while (> (buffer-size) 5000)
  	      (goto-char (point-min))
***************
*** 109,158 ****
      )
    t)
  
- (defun pop3-get-message-count ()
-   "Return the number of messages in the maildrop."
-   (let* ((process (pop3-open-server pop3-mailhost pop3-port))
- 	 message-count
- 	 (pop3-password pop3-password)
- 	 )
-     ;; for debugging only
-     (if pop3-debug (switch-to-buffer (process-buffer process)))
-     ;; query for password
-     (if (and pop3-password-required (not pop3-password))
- 	(setq pop3-password
- 	      (pop3-read-passwd (format "Password for %s: " pop3-maildrop))))
-     (cond ((equal 'apop pop3-authentication-scheme)
- 	   (pop3-apop process pop3-maildrop))
- 	  ((equal 'pass pop3-authentication-scheme)
- 	   (pop3-user process pop3-maildrop)
- 	   (pop3-pass process))
- 	  (t (error "Invalid POP3 authentication scheme.")))
-     (setq message-count (car (pop3-stat process)))
-     (pop3-quit process)
-     message-count))
- 
  (defun pop3-open-server (mailhost port)
!   "Open TCP connection to MAILHOST.
  Returns the process associated with the connection."
!   (let ((process-buffer
! 	 (get-buffer-create (format "trace of POP session to %s" mailhost)))
! 	(process)
! 	(coding-system-for-read 'binary);; because FSF Emacs 20 and
! 	(coding-system-for-write 'binary);; XEmacs 20 & 21 are st00pid
! 	)
      (save-excursion
!       (set-buffer process-buffer)
        (erase-buffer)
        (setq pop3-read-point (point-min))
!       )
!     (setq process
! 	  (open-network-stream "POP" process-buffer mailhost port))
!     (let ((response (pop3-read-response process t)))
!       (setq pop3-timestamp
! 	    (substring response (or (string-match "<" response) 0)
! 		       (+ 1 (or (string-match ">" response) -1)))))
!     process
!     ))
  
  ;; Support functions
  
--- 111,133 ----
      )
    t)
  
  (defun pop3-open-server (mailhost port)
!   "Open TCP connection to MAILHOST on PORT.
  Returns the process associated with the connection."
!   (let ((coding-system-for-read 'binary)
! 	(coding-system-for-write 'binary)
! 	process)
      (save-excursion
!       (set-buffer (get-buffer-create (concat " trace of POP session to %s"
! 					     mailhost)))
        (erase-buffer)
        (setq pop3-read-point (point-min))
!       (setq process (open-network-stream "POP"(current-buffer) mailhost port))
!       (let ((response (pop3-read-response process t)))
! 	(setq pop3-timestamp
! 	      (substring response (or (string-match "<" response) 0)
! 			 (+ 1 (or (string-match ">" response) -1)))))
!       process)))
  
  ;; Support functions
  
***************
*** 163,177 ****
      (insert output)))
  
  (defun pop3-send-command (process command)
!   (set-buffer (process-buffer process))
!   (goto-char (point-max))
!   ;;    (if (= (aref command 0) ?P)
!   ;;	(insert "PASS <omitted>\r\n")
!   ;;      (insert command "\r\n"))
!   (setq pop3-read-point (point))
!   (goto-char (point-max))
!   (process-send-string process (concat command "\r\n"))
!   )
  
  (defun pop3-read-response (process &optional return)
    "Read the response from the server.
--- 138,152 ----
      (insert output)))
  
  (defun pop3-send-command (process command)
!     (set-buffer (process-buffer process))
!     (goto-char (point-max))
! ;;    (if (= (aref command 0) ?P)
! ;;	(insert "PASS <omitted>\r\n")
! ;;      (insert command "\r\n"))
!     (setq pop3-read-point (point))
!     (goto-char (point-max))
!     (process-send-string process (concat command "\r\n"))
!     )
  
  (defun pop3-read-response (process &optional return)
    "Read the response from the server.
***************
*** 187,193 ****
        (setq match-end (point))
        (goto-char pop3-read-point)
        (if (looking-at "-ERR")
! 	  (signal 'error (list (buffer-substring (point) (- match-end 2))))
  	(if (not (looking-at "+OK"))
  	    (progn (setq pop3-read-point match-end) nil)
  	  (setq pop3-read-point match-end)
--- 162,168 ----
        (setq match-end (point))
        (goto-char pop3-read-point)
        (if (looking-at "-ERR")
! 	  (error (buffer-substring (point) (- match-end 2)))
  	(if (not (looking-at "+OK"))
  	    (progn (setq pop3-read-point match-end) nil)
  	  (setq pop3-read-point match-end)
***************
*** 196,224 ****
  	    t)
  	  )))))
  
- (defun pop3-string-to-list (string &optional regexp)
-   "Chop up a string into a list."
-   (let ((list)
- 	(regexp (or regexp " "))
- 	(string (if (string-match "\r" string)
- 		    (substring string 0 (match-beginning 0))
- 		  string)))
-     (store-match-data nil)
-     (while string
-       (if (string-match regexp string)
- 	  (setq list (cons (substring string 0 (- (match-end 0) 1)) list)
- 		string (substring string (match-end 0)))
- 	(setq list (cons string list)
- 	      string nil)))
-     (nreverse list)))
- 
  (defvar pop3-read-passwd nil)
  (defun pop3-read-passwd (prompt)
    (if (not pop3-read-passwd)
!       (if (load "passwd" t)
  	  (setq pop3-read-passwd 'read-passwd)
! 	(autoload 'ange-ftp-read-passwd "ange-ftp")
! 	(setq pop3-read-passwd 'ange-ftp-read-passwd)))
    (funcall pop3-read-passwd prompt))
  
  (defun pop3-clean-region (start end)
--- 171,185 ----
  	    t)
  	  )))))
  
  (defvar pop3-read-passwd nil)
  (defun pop3-read-passwd (prompt)
    (if (not pop3-read-passwd)
!       (if (fboundp 'read-passwd)
  	  (setq pop3-read-passwd 'read-passwd)
! 	(if (load "passwd" t)
! 	    (setq pop3-read-passwd 'read-passwd)
! 	  (autoload 'ange-ftp-read-passwd "ange-ftp")
! 	  (setq pop3-read-passwd 'ange-ftp-read-passwd))))
    (funcall pop3-read-passwd prompt))
  
  (defun pop3-clean-region (start end)
***************
*** 245,252 ****
  		   (looking-at "BABYL OPTIONS:") ; Babyl
  		   ))
  	  (let ((from (mail-strip-quoted-names (mail-fetch-field "From")))
! 		(date (pop3-string-to-list (or (mail-fetch-field "Date")
! 					       (message-make-date))))
  		(From_))
  	    ;; sample date formats I have seen
  	    ;; Date: Tue, 9 Jul 1996 09:04:21 -0400 (EDT)
--- 206,214 ----
  		   (looking-at "BABYL OPTIONS:") ; Babyl
  		   ))
  	  (let ((from (mail-strip-quoted-names (mail-fetch-field "From")))
! 		(date (split-string (or (mail-fetch-field "Date")
! 					(message-make-date))
! 				    " "))
  		(From_))
  	    ;; sample date formats I have seen
  	    ;; Date: Tue, 9 Jul 1996 09:04:21 -0400 (EDT)
***************
*** 300,320 ****
  
  (defun pop3-apop (process user)
    "Send alternate authentication information to the server."
!   (if (not (fboundp 'md5)) (autoload 'md5 "md5"))
!   (let ((hash (md5 (concat pop3-timestamp pop3-password))))
!     (pop3-send-command process (format "APOP %s %s" user hash))
!     (let ((response (pop3-read-response process t)))
!       (if (not (and response (string-match "+OK" response)))
! 	  (pop3-quit process)))))
  
  ;; TRANSACTION STATE
  
  (defun pop3-stat (process)
    "Return the number of messages in the maildrop and the maildrop's size."
    (pop3-send-command process "STAT")
    (let ((response (pop3-read-response process t)))
!     (list (string-to-int (nth 1 (pop3-string-to-list response)))
! 	  (string-to-int (nth 2 (pop3-string-to-list response))))
      ))
  
  (defun pop3-list (process &optional msg)
--- 262,301 ----
  
  (defun pop3-apop (process user)
    "Send alternate authentication information to the server."
!   (let ((pass pop3-password))
!     (if (and pop3-password-required (not pass))
! 	(setq pass
! 	      (pop3-read-passwd (format "Password for %s: " pop3-maildrop))))
!     (if pass
! 	(let ((hash (pop3-md5 (concat pop3-timestamp pass))))
! 	  (pop3-send-command process (format "APOP %s %s" user hash))
! 	  (let ((response (pop3-read-response process t)))
! 	    (if (not (and response (string-match "+OK" response)))
! 		(pop3-quit process)))))
!     ))
  
  ;; TRANSACTION STATE
  
+ (defvar pop3-md5-program "md5"
+   "*Program to encode its input in MD5.")
+ 
+ (defun pop3-md5 (string)
+   (with-temp-buffer
+     (insert string)
+     (call-process-region (point-min) (point-max)
+ 			 (or shell-file-name "/bin/sh")
+ 			 t (current-buffer) nil
+ 			 "-c" pop3-md5-program)
+     ;; The meaningful output is the first 32 characters.
+     ;; Don't return the newline that follows them!
+     (buffer-substring (point-min) (+ (point-min) 32))))
+ 
  (defun pop3-stat (process)
    "Return the number of messages in the maildrop and the maildrop's size."
    (pop3-send-command process "STAT")
    (let ((response (pop3-read-response process t)))
!     (list (string-to-int (nth 1 (split-string response " ")))
! 	  (string-to-int (nth 2 (split-string response " "))))
      ))
  
  (defun pop3-list (process &optional msg)
***************
*** 341,356 ****
  	;; bill@att.com
  	;; condensed into:
  	;; (sometimes causes problems for really large messages.)
! 	;;	(if (> (buffer-size) 20000) (sleep-for (/ (buffer-size) 20000)))
  	(goto-char start))
        (setq pop3-read-point (point-marker))
!       ;; this code does not seem to work for some POP servers...
!       ;; and I cannot figure out why not.
!       ;;      (goto-char (match-beginning 0))
!       ;;      (backward-char 2)
!       ;;      (if (not (looking-at "\r\n"))
!       ;;	  (insert "\r\n"))
!       ;;      (re-search-forward "\\.\r\n")
        (goto-char (match-beginning 0))
        (setq end (point-marker))
        (pop3-clean-region start end)
--- 322,337 ----
  	;; bill@att.com
  	;; condensed into:
  	;; (sometimes causes problems for really large messages.)
! ;	(if (> (buffer-size) 20000) (sleep-for (/ (buffer-size) 20000)))
  	(goto-char start))
        (setq pop3-read-point (point-marker))
! ;; this code does not seem to work for some POP servers...
! ;; and I cannot figure out why not.
! ;      (goto-char (match-beginning 0))
! ;      (backward-char 2)
! ;      (if (not (looking-at "\r\n"))
! ;	  (insert "\r\n"))
! ;      (re-search-forward "\\.\r\n")
        (goto-char (match-beginning 0))
        (setq end (point-marker))
        (pop3-clean-region start end)
***************
*** 376,382 ****
    "Return highest accessed message-id number for the session."
    (pop3-send-command process "LAST")
    (let ((response (pop3-read-response process t)))
!     (string-to-int (nth 1 (pop3-string-to-list response)))
      ))
  
  (defun pop3-rset (process)
--- 357,363 ----
    "Return highest accessed message-id number for the session."
    (pop3-send-command process "LAST")
    (let ((response (pop3-read-response process t)))
!     (string-to-int (nth 1 (split-string response " ")))
      ))
  
  (defun pop3-rset (process)
***************
*** 477,479 ****
--- 458,464 ----
  ;; Restrictions: none
  ;; Possible responses:
  ;;  +OK [TCP connection closed]
+ 
+ (provide 'pop3)
+ 
+ ;;; pop3.el ends here
*** pub/pgnus/lisp/qp.el	Wed Jan  5 17:09:52 2000
--- pgnus/lisp/qp.el	Thu Apr 20 01:31:32 2000
***************
*** 23,68 ****
  
  ;;; Code:
  
  (defvar quoted-printable-encoding-characters
    (mapcar 'identity "0123456789ABCDEFabcdef"))
  
! (defun quoted-printable-decode-region (from to)
!   "Decode quoted-printable in the region between FROM and TO."
    (interactive "r")
    (save-excursion
!     (goto-char from)
!     (while (search-forward "=" to t)
!       (cond
!        ;; End of the line.
!        ((eq (char-after) ?\n)
! 	(delete-char -1)
! 	(delete-char 1))
!        ;; Encoded character.
!        ((and
! 	 (memq (char-after) quoted-printable-encoding-characters)
! 	 (memq (char-after (1+ (point)))
! 	       quoted-printable-encoding-characters))
! 	(subst-char-in-region
! 	 (1- (point)) (point) ?=
! 	 (string-to-number
! 	  (buffer-substring (point) (+ 2 (point)))
! 	  16))
! 	(delete-char 2))
!        ;; Quoted equal sign.
!        ((eq (char-after) ?=)
! 	(delete-char 1))
!        ;; End of buffer.
!        ((eobp)
! 	(delete-char -1))
!        ;; Invalid.
!        (t
! 	(message "Malformed MIME quoted-printable message"))))))
  
! (defun quoted-printable-decode-string (string)
!   "Decode the quoted-printable-encoded STRING and return the results."
    (with-temp-buffer
      (insert string)
!     (quoted-printable-decode-region (point-min) (point-max))
      (buffer-string)))
  
  (defun quoted-printable-encode-region (from to &optional fold class)
--- 23,85 ----
  
  ;;; Code:
  
+ (require 'mm-util)
+ 
  (defvar quoted-printable-encoding-characters
    (mapcar 'identity "0123456789ABCDEFabcdef"))
  
! (defun quoted-printable-decode-region (from to &optional charset)
!   "Decode quoted-printable in the region between FROM and TO.
! If CHARSET is non-nil, decode the region with charset."
    (interactive "r")
    (save-excursion
!     (save-restriction
!       (let (start)
! 	(narrow-to-region from to)
! 	(goto-char from)
! 	(while (not (eobp))
! 	  (cond 
! 	   ((eq (char-after) ?=)
! 	    (delete-char 1)
! 	    (unless start
! 	      (setq start (point)))
! 	    (cond
! 	     ;; End of the line.
! 	     ((eq (char-after) ?\n)
! 	      (delete-char 1))
! 	     ;; Encoded character.
! 	     ((and
! 	       (memq (char-after) quoted-printable-encoding-characters)
! 	       (memq (char-after (1+ (point)))
! 		     quoted-printable-encoding-characters))
! 	      (insert
! 	       (string-to-number
! 		(buffer-substring (point) (+ 2 (point)))
! 		16))
! 	      (delete-char 2))
! 	     ;; Quoted equal sign.
! 	     ((eq (char-after) ?=)
! 	      (forward-char 1))
! 	     ;; End of buffer.
! 	     ((eobp))
! 	     ;; Invalid.
! 	     (t
! 	      (message "Malformed MIME quoted-printable message"))))
! 	   ((and charset start (not (eq (mm-charset-after) 'ascii)))
! 	    (mm-decode-coding-region start (point) charset)
! 	    (setq start nil)
! 	    (forward-char 1))
! 	   (t
! 	    (forward-char 1))))
! 	(if (and charset start)
! 	    (mm-decode-coding-region start (point) charset))))))
  
! (defun quoted-printable-decode-string (string &optional charset)
!   "Decode the quoted-printable-encoded STRING and return the results.
! If CHARSET is non-nil, decode the region with charset."
    (with-temp-buffer
      (insert string)
!     (quoted-printable-decode-region (point-min) (point-max) charset)
      (buffer-string)))
  
  (defun quoted-printable-encode-region (from to &optional fold class)
*** pub/pgnus/lisp/rfc2047.el	Wed Jan  5 17:09:53 2000
--- pgnus/lisp/rfc2047.el	Thu Apr 20 01:31:33 2000
***************
*** 105,137 ****
    "Encode the message header according to `rfc2047-header-encoding-alist'.
  Should be called narrowed to the head of the message."
    (interactive "*")
!   (when (featurep 'mule)
!     (save-excursion
!       (goto-char (point-min))
!       (let ((alist rfc2047-header-encoding-alist)
! 	    elem method)
! 	(while (not (eobp))
! 	  (save-restriction
! 	    (rfc2047-narrow-to-field)
! 	    (when (rfc2047-encodable-p)
! 	      ;; We found something that may perhaps be encoded.
! 	      (while (setq elem (pop alist))
! 		(when (or (and (stringp (car elem))
! 			       (looking-at (car elem)))
! 			  (eq (car elem) t))
! 		  (setq alist nil
! 			method (cdr elem))))
! 	      (when method
! 		(cond
! 		 ((eq method 'mime)
! 		  (rfc2047-encode-region (point-min) (point-max))
! 		  (rfc2047-fold-region (point-min) (point-max)))
! 		 ;; Hm.
! 		 (t))))
! 	    (goto-char (point-max)))))
!       (when mail-parse-charset
! 	(encode-coding-region (point-min) (point-max)
! 			      mail-parse-charset)))))
  
  (defun rfc2047-encodable-p (&optional header)
    "Say whether the current (narrowed) buffer contains characters that need encoding in headers."
--- 105,135 ----
    "Encode the message header according to `rfc2047-header-encoding-alist'.
  Should be called narrowed to the head of the message."
    (interactive "*")
!   (save-excursion
!     (goto-char (point-min))
!     (let ((alist rfc2047-header-encoding-alist)
! 	  elem method)
!       (while (not (eobp))
! 	(save-restriction
! 	  (rfc2047-narrow-to-field)
! 	  (when (rfc2047-encodable-p)
! 	    ;; We found something that may perhaps be encoded.
! 	    (while (setq elem (pop alist))
! 	      (when (or (and (stringp (car elem))
! 			     (looking-at (car elem)))
! 			(eq (car elem) t))
! 		(setq alist nil
! 		      method (cdr elem))))
! 	    (cond
! 	     ((eq method 'mime)
! 	      (rfc2047-encode-region (point-min) (point-max))
! 	      (rfc2047-fold-region (point-min) (point-max)))
! 	     ;; Hm.
! 	     (t)))
! 	  (goto-char (point-max)))))
!     (when mail-parse-charset
!       (encode-coding-region
!        (point-min) (point-max) mail-parse-charset))))
  
  (defun rfc2047-encodable-p (&optional header)
    "Say whether the current (narrowed) buffer contains characters that need encoding in headers."
*** pub/pgnus/lisp/time-date.el	Wed Jan 20 01:52:16 1999
--- pgnus/lisp/time-date.el	Thu Apr 20 01:31:33 2000
***************
*** 3,8 ****
--- 3,10 ----
  
  ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
  ;;	Masanobu Umeda <umerin@mse.kyutech.ac.jp>
+ ;; Keywords: mail news util
+ 
  ;; This file is part of GNU Emacs.
  
  ;; GNU Emacs is free software; you can redistribute it and/or modify
***************
*** 26,31 ****
--- 28,34 ----
  
  (require 'parse-time)
  
+ ;;;###autoload
  (defun date-to-time (date)
    "Convert DATE into time."
    (condition-case ()
***************
*** 36,42 ****
    "Convert TIME to a floating point number."
    (+ (* (car time) 65536.0)
       (cadr time)
!      (/ (or (caddr time) 0) 1000000.0)))
  
  (defun seconds-to-time (seconds)
    "Convert SECONDS (a floating point number) to an Emacs time structure."
--- 39,45 ----
    "Convert TIME to a floating point number."
    (+ (* (car time) 65536.0)
       (cadr time)
!      (/ (or (nth 2 time) 0) 1000000.0)))
  
  (defun seconds-to-time (seconds)
    "Convert SECONDS (a floating point number) to an Emacs time structure."
***************
*** 116,121 ****
--- 119,125 ----
         (- (/ (1- year) 100))		;	- century years
         (/ (1- year) 400))))		;	+ Gregorian leap years
  
+ ;;;###autoload
  (defun safe-date-to-time (date)
    "Parse DATE and return a time structure.
  If DATE is malformed, a zero time will be returned."
*** pub/pgnus/lisp/utf7.el	Wed Jan  5 17:09:53 2000
--- pgnus/lisp/utf7.el	Thu Apr 20 01:31:34 2000
***************
*** 1,7 ****
  ;;; utf7.el --- UTF-7 encoding/decoding for Emacs
  ;; Copyright (C) 1999 Free Software Foundation, Inc.
  
! ;; Author: Jon K Hellan <hellan@item.ntnu.no>
  ;; Keywords: mail
  
  ;; This file is part of GNU Emacs, but the same permissions apply
--- 1,7 ----
  ;;; utf7.el --- UTF-7 encoding/decoding for Emacs
  ;; Copyright (C) 1999 Free Software Foundation, Inc.
  
! ;; Author: Jon K Hellan <hellan@acm.org>
  ;; Keywords: mail
  
  ;; This file is part of GNU Emacs, but the same permissions apply
*** pub/pgnus/lisp/webmail.el	Wed Jan  5 17:09:53 2000
--- pgnus/lisp/webmail.el	Thu Apr 20 01:31:34 2000
***************
*** 2,8 ****
  ;; Copyright (C) 1999 Free Software Foundation, Inc.
  
  ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
! ;; Keywords: hotmail yahoo netaddress my-deja
  
  ;; This file is part of GNU Emacs.
  
--- 2,8 ----
  ;; Copyright (C) 1999 Free Software Foundation, Inc.
  
  ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
! ;; Keywords: hotmail netaddress my-deja netscape
  
  ;; This file is part of GNU Emacs.
  
***************
*** 77,83 ****
       (list-snarf . webmail-hotmail-list)
       (article-snarf . webmail-hotmail-article)
       (trash-url 
!       "%s&login=%s&f=33792&curmbox=ACTIVE&_lang=&js=&foo=inbox&page=&%s=on&Move+To.x=Move+To&tobox=trAsH" 
        webmail-aux user id))
      (yahoo
       (paranoid cookie post)
--- 77,83 ----
       (list-snarf . webmail-hotmail-list)
       (article-snarf . webmail-hotmail-article)
       (trash-url 
!       "%s&login=%s&f=33792&curmbox=ACTIVE&_lang=&foo=inbox&js=&page=&%s=on&_HMaction=MoveTo&tobox=trAsH&nullbox=" 
        webmail-aux user id))
      (yahoo
       (paranoid cookie post)
***************
*** 111,120 ****
--- 111,141 ----
        "http://www.netaddress.com/tpl/Mail/%s/List?FolderID=-4&SortUseCase=True"
        webmail-session)
       (list-snarf . webmail-netaddress-list)
+      (article-url "http://www.netaddress.com/")
       (article-snarf . webmail-netaddress-article)
       (trash-url 
        "http://www.netaddress.com/tpl/Message/%s/Move?FolderID=-4&Q=%s&N=&Sort=Date&F=-1"
        webmail-session id))
+     (netscape
+      (paranoid cookie post agent)
+      (address . "webmail.netscape.com")
+      (open-url "http://ureg.netscape.com/iiop/UReg2/login/login?U2_LA=en&U2_BACK_FROM_CJ=true&U2_CS=iso-8859-1&U2_ENDURL=http://webmail.netscape.com/tpl/Subscribe/Step1&U2_NEW_ENDURL=http://webmail.netscape.com/tpl/Subscribe/Step1&U2_EXITURL=http://home.netscape.com/&U2_SOURCE=Webmail")
+      (open-snarf . webmail-netscape-open)
+      (login-url
+       content 
+       ("http://ureg.netscape.com/iiop/UReg2/login/loginform")
+       "%s&U2_USERNAME=%s&U2_PASSWORD=%s"
+       webmail-aux user password)
+      (login-snarf . webmail-netaddress-login)
+      (list-url 
+       "http://webmail.netscape.com/tpl/Mail/%s/List?FolderID=-4&SortUseCase=True"
+       webmail-session)
+      (list-snarf . webmail-netaddress-list)
+      (article-url "http://webmail.netscape.com/")
+      (article-snarf . webmail-netscape-article)
+      (trash-url 
+       "http://webmail.netscape.com/tpl/Message/%s/Move?FolderID=-4&Q=%s&N=&Sort=Date&F=-1"
+       webmail-session id))
      (my-deja
       (paranoid cookie post)
       (address . "www.my-deja.com")
***************
*** 123,129 ****
       (login-url
        content 
        ("%s" webmail-aux)
!       "user=%s&pw=%s&autologout=60&go="
        user password)
       (list-url "http://www.deja.com/rg_gotomail.xp")
       (list-snarf . webmail-my-deja-list)
--- 144,150 ----
       (login-url
        content 
        ("%s" webmail-aux)
!       "member_name=%s&pw=%s&go=&priv_opt_MyDeja99="
        user password)
       (list-url "http://www.deja.com/rg_gotomail.xp")
       (list-snarf . webmail-my-deja-list)
***************
*** 356,362 ****
  (defun webmail-hotmail-list ()
    (let (site url newp)
      (goto-char (point-min))
!     (if (re-search-forward "[0-9]+ messages, [0-9]+ new" nil t) 
  	(message "Found %s" (match-string 0))
        (webmail-error "maybe your w3 version is too old"))
      (goto-char (point-min))
--- 377,383 ----
  (defun webmail-hotmail-list ()
    (let (site url newp)
      (goto-char (point-min))
!     (if (re-search-forward "[0-9]+ new" nil t) 
  	(message "Found %s" (match-string 0))
        (webmail-error "maybe your w3 version is too old"))
      (goto-char (point-min))
***************
*** 644,649 ****
--- 665,676 ----
  
  ;;; netaddress
  
+ (defun webmail-netscape-open ()
+   (goto-char (point-min))
+   (if (re-search-forward "login/hint\\?\\([^\"]+\\)\"" nil t)
+       (setq webmail-aux (match-string 1))
+     (webmail-error "open@1")))
+ 
  (defun webmail-netaddress-open ()
    (goto-char (point-min))
    (if (re-search-forward "action=\"\\([^\"]+\\)\"" nil t)
***************
*** 671,677 ****
  	  (setq item 
  		(cons id 
  		      (format "%s/tpl/Message/%s/Read?Q=%s&FolderID=-4&SortUseCase=True&Sort=Date&Headers=True"
! 			      (car webmail-open-url)
  			      webmail-session id)))
  	(if (or (not webmail-newmail-only)
  		(equal (match-string 1) "True"))
--- 698,704 ----
  	  (setq item 
  		(cons id 
  		      (format "%s/tpl/Message/%s/Read?Q=%s&FolderID=-4&SortUseCase=True&Sort=Date&Headers=True"
! 			      (car webmail-article-url)
  			      webmail-session id)))
  	(if (or (not webmail-newmail-only)
  		(equal (match-string 1) "True"))
***************
*** 788,794 ****
        ;; Some blank line to seperate mails.
        (insert "\n\nFrom nobody " (current-time-string) "\n")
        (if id
! 	  (insert (format "Message-ID: <%s@usa.net>\n" id)))
        (unless (looking-at "$") 
  	(if (search-forward "\n\n" nil t)
  	    (forward-line -1)
--- 815,946 ----
        ;; Some blank line to seperate mails.
        (insert "\n\nFrom nobody " (current-time-string) "\n")
        (if id
! 	  (insert (format "Message-ID: <%s@%s>\n" id webmail-address)))
!       (unless (looking-at "$") 
! 	(if (search-forward "\n\n" nil t)
! 	    (forward-line -1)
! 	  (webmail-error "article@2")))
!       (when mime
! 	(narrow-to-region (point-min) (point))
! 	(goto-char (point-min))
! 	(while (not (eobp))
! 	  (if (looking-at "MIME-Version\\|Content-Type")
! 	      (delete-region (point) 
! 			     (progn
! 			       (forward-line 1)
! 			       (if (re-search-forward "^[^ \t]" nil t)
! 				   (goto-char (match-beginning 0))
! 				 (point-max))))
! 	    (forward-line 1)))
! 	(goto-char (point-max))
! 	(widen)
! 	(narrow-to-region (point) (point-max))
! 	(insert "MIME-Version: 1.0\n"
! 		(prog1
! 		    (mml-generate-mime)
! 		  (delete-region (point-min) (point-max))))
! 	(goto-char (point-min))
! 	(widen))
!       (let (case-fold-search)
! 	(while (re-search-forward "^From " nil t)
! 	  (beginning-of-line)
! 	  (insert ">"))))
!     (mm-append-to-file (point-min) (point-max) file)))
! 
! (defun webmail-netscape-article (file id)
!   (let (p p1 attachment count mime type)
!     (save-restriction
!       (webmail-encode-8bit)
!       (goto-char (point-min))
!       (if (not (search-forward "Trash" nil t))
! 	  (webmail-error "article@1"))
!       (if (not (search-forward "<form>" nil t))
! 	  (webmail-error "article@2"))
!       (delete-region (point-min) (match-beginning 0)) 
!       (if (not (search-forward "</form>" nil t))
! 	  (webmail-error "article@3"))
!       (narrow-to-region (point-min) (match-end 0))
!       (goto-char (point-min))
!       (while (re-search-forward "[\040\t\r\n]+" nil t)
! 	(replace-match " "))
!       (goto-char (point-min))
!       (while (re-search-forward "<a href=[^>]*>[^<]*</a>" nil t)
! 	(replace-match ""))
!       (goto-char (point-min))
!       (while (search-forward "<b>" nil t)
! 	(replace-match "\n"))
!       (nnweb-remove-markup)
!       (nnweb-decode-entities)
!       (goto-char (point-min))
!       (delete-blank-lines)
!       (goto-char (point-min))
!       (while (re-search-forward "^\040+\\|\040+$" nil t)
! 	(replace-match ""))
!       (goto-char (point-min))
!       (while (re-search-forward "\040+" nil t)
! 	(replace-match " "))
!       (goto-char (point-max))
!       (widen)
!       (insert "\n\n")
!       (setq p (point))
!       (unless (search-forward "<!-- Data -->" nil t)
! 	(webmail-error "article@4"))
!       (forward-line 14)
!       (delete-region p (point))
!       (goto-char (point-max))
!       (unless (re-search-backward 
! 	       "<form name=\"Transfer2\"" p t)
! 	(webmail-error "article@5"))
!       (delete-region (point) (point-max))
!       (goto-char p)
!       (while (search-forward
! 	      "<TABLE border=\"0\" WIDTH=\"98%\" cellpadding=0 cellspacing=0>"
! 	      nil t 2)
! 	(setq mime t)
! 	(unless (search-forward "</TABLE>" nil t)
! 	  (webmail-error "article@6"))
! 	(setq p1 (point))
! 	(if (search-backward "<IMG " p t)
! 	    (progn
! 	      (unless (re-search-forward "HREF=\"\\(/tpl/Attachment/[^/]+/\\([^/]+/[^\?]+\\)[^\"]+\\)\"" p1 t)
! 		(webmail-error "article@7"))
! 	      (setq attachment (match-string 1))
! 	      (setq type (match-string 2))
! 	      (unless (search-forward "</TABLE>" nil t)
! 		(webmail-error "article@8"))
! 	      (delete-region p (point))
! 	      (let (bufname);; Attachment
! 		(save-excursion
! 		  (set-buffer (generate-new-buffer " *webmail-att*"))
! 		  (nnweb-insert (concat (car webmail-open-url) attachment))
! 		  (push (current-buffer) webmail-buffer-list)
! 		  (setq bufname (buffer-name)))
! 		(insert "<#part type=" type)
! 		(insert " buffer=\"" bufname "\"")
! 		(insert " disposition=\"inline\"")
! 		(insert "><#/part>\n")
! 		(setq p (point))))
! 	  (delete-region p p1)
! 	  (narrow-to-region 
! 	   p
! 	   (if (search-forward 
! 		"<TABLE border=\"0\" WIDTH=\"98%\" cellpadding=0 cellspacing=0>"
! 		nil t)
! 	       (match-beginning 0)
! 	     (point-max)))
! 	  (webmail-netaddress-single-part)
! 	  (goto-char (point-max))
! 	  (setq p (point))
! 	  (widen)))
!       (unless mime
! 	(narrow-to-region p (point-max))
! 	(setq mime (webmail-netaddress-single-part))
! 	(widen))
!       (goto-char (point-min))
!       ;; Some blank line to seperate mails.
!       (insert "\n\nFrom nobody " (current-time-string) "\n")
!       (if id
! 	  (insert (format "Message-ID: <%s@%s>\n" id webmail-address)))
        (unless (looking-at "$") 
  	(if (search-forward "\n\n" nil t)
  	    (forward-line -1)
***************
*** 825,831 ****
  (defun webmail-my-deja-open ()
    (webmail-refresh-redirect)
    (goto-char (point-min))
!   (if (re-search-forward "action=\"\\([^\"]+login_confirm\\.xp[^\"]+\\)\"" 
  			 nil t)
        (setq webmail-aux (match-string 1))
      (webmail-error "open@1")))
--- 977,983 ----
  (defun webmail-my-deja-open ()
    (webmail-refresh-redirect)
    (goto-char (point-min))
!   (if (re-search-forward "action=\"\\([^\"]+login_confirm\\.xp[^\"]*\\)\"" 
  			 nil t)
        (setq webmail-aux (match-string 1))
      (webmail-error "open@1")))
*** pub/pgnus/lisp/ChangeLog	Wed Jan  5 17:09:35 2000
--- pgnus/lisp/ChangeLog	Thu Apr 20 01:31:01 2000
***************
*** 1,3 ****
--- 1,301 ----
+ Thu Apr 20 01:39:25 2000  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+ 
+ 	* gnus.el: Pterodactyl Gnus v5.8.4 is released.
+ 
+ 2000-04-19  Dave Love  <fx@gnu.org>
+ 
+ 	* mailcap.el (mailcap-parse-mimetypes): Add ...mime.types.
+ 
+ 2000-04-18 12:28:24  Shenghuo ZHU  <zsh@cs.rochester.edu>
+ 
+ 	* nnwarchive.el (nnwarchive-type-definition): New egroups html.
+ 	(nnwarchive-egroups-*): Ditto.
+ 	(nnwarchive-url): Unibyte buffer and single line cookie.
+ 
+ 2000-04-14 18:50:04  Shenghuo ZHU  <zsh@cs.rochester.edu>
+ 
+ 	* mm-util.el (mm-char-or-char-int-p): New alias.
+ 	* nnweb.el (nnweb-decode-entities): Check the validity of numeric 
+ 	entities.
+ 
+ 2000-04-10   Daiki Ueno  <ueno@unixuser.org>
+ 
+         * lisp/imap.el (imap-body-lines): Check Content-Type: of the
+         article case insensitively.
+ 
+ 2000-04-10 20:35:46  Shenghuo ZHU  <zsh@cs.rochester.edu>
+ 
+ 	* mail-source.el (mail-source-fetch-webmail): Use the default
+ 	password provided in mail-sources; use webmail:subtype:user as
+ 	the key.
+ 	
+ 2000-04-10 20:35:46  John Wiegley <johnw@gnu.org>
+ 
+ 	* mail-source.el (mail-source-fetch-webmail): Use
+ 	mail-source-password-cache.
+ 
+ 2000-04-09 18:13:47  Shenghuo ZHU  <zsh@cs.rochester.edu>
+ 
+ 	* webmail.el: Add netscape mail and fix HotMail mail.
+ 
+ 2000-04-08  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* imap.el (imap-kerberos4-open): Work with recent `imtest's.
+ 
+ 2000-04-02  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* nnimap.el (nnimap-request-article): Use BODY.PEEK[] instead of
+ 	RFC822.PEEK if server support IMAP4rev1.
+ 	(nnimap-request-body): Use BODY.PEEK[TEXT] instead of
+ 	RFC822.TEXT.PEEK if server support IMAP4rev1.
+ 	(nnimap-request-head): Use BODY.PEEK[HEADER] instead of
+ 	RFC822.HEADER if server support IMAP4rev1.
+ 	(nnimap-request-article-part): Support bodydetail in response
+ 	data.
+ 
+ 2000-03-11  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* fill-flowed.el: New file.
+ 
+ 	* mm-decode.el (mm-dissect-singlepart): Create a MIME handle for
+ 	text/plain parts with `format' parameters.
+ 
+ 	* mm-view.el (autoload): Autoload fill-flowed.
+ 	(mm-inline-text): For "plain" parts with a format=flowed
+ 	parameter, call `fill-flowed'.
+ 
+ 2000-03-21 10:32:44  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* nnslashdot.el (nnslashdot-request-list): Fudge new-style
+ 	slashdot ids.
+ 
+ 2000-03-20 00:12:42  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* nnslashdot.el (nnslashdot-request-list): Use the new slashdot
+ 	format. 
+ 
+ 2000-03-16  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* imap.el: GSSAPI support, support kerberos 4 with Cyrus v1.6.x
+ 	`imtest' too.
+ 	(imap-kerberos4-program): Renamed from `imap-imtest-program'.
+ 	(imap-gssapi-program): New variable.
+ 	(imap-streams): Add gssapi.
+ 	(imap-stream-alist): Ditto.
+ 	(imap-authenticators): Ditto.
+ 	(imap-authenticator-alist): Ditto.
+ 	(imap-kerberos4-stream-p): Rename from `imap-kerberos4s-p'.
+ 	(imap-kerberos4-open): Loop over imtest programs, support Cyrus
+ 	1.6.x `imtest' syntax.
+ 	(imap-gssapi-stream-p): New function.
+ 	(imap-gssapi-open): Ditto.
+ 	(imap-gssapi-auth-p): Ditto.
+ 	(imap-gssapi-auth): Ditto.
+ 	(imap-kerberos4-auth-p): Renamed from `imap-kerberos4a-p'.
+ 	(imap-send-command): Use buffer-local `imap-client-eol' value.
+ 
+ 	* nnimap.el (nnimap-retrieve-headers-progress): Fold continuation
+ 	lines and turn TAB into SPC before parsing.
+ 
+ 2000-03-15  Simon Josefsson <jas@pdc.kth.se>
+ 
+ 	* nnheader.el (nnheader-group-pathname): Make sure to return a
+ 	directory. 
+ 	* nnmail.el (nnmail-group-pathname): Ditto.
+ 
+ 2000-02-08  Per Abrahamsen  <abraham@dina.kvl.dk>
+ 
+ 	* nnmail.el (nnmail-fix-eudora-headers): Fix `In-Reply-To' too, it
+ 	might split in the middle of a message-id.
+ 
+ 2000-03-13 13:51:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* gnus-srvr.el (gnus-server-kill-server): Offer to kill all the
+ 	groups from the server.
+ 
+ 	* gnus-sum.el (gnus-summary-save-parts): Fix interactive spec. 
+ 	(gnus-summary-toggle-header): Update the wash status.
+ 
+ 	* gnus-uu.el ((gnus-uu-extract-map "X" gnus-summary-mode-map)):
+ 	Moved here.
+ 
+ 	* gnus-agent.el (gnus-agent-save-group-info): Respect old
+ 	setting. 
+ 
+ 	* nnmail.el (nnmail-get-active): Use it.
+ 	(nnmail-parse-active): New function.
+ 
+ 	* mm-view.el (mm-inline-text): Support the new version of
+ 	vcard.el. 
+ 
+ 	* gnus-sum.el (gnus-summary-move-article): Only delete article
+ 	when moving junk.
+ 	(gnus-deaden-summary): Bury the buffer.
+ 
+ 	* nnmail.el (nnmail-group-pathname): Ditto.
+ 
+ 	* nnheader.el (nnheader-group-pathname): Use expand-file-name.
+ 
+ 2000-03-13 20:23:06  Christoph Rohland  <hans-christoph.rohland@sap.com>
+ 
+ 	* rfc2047.el (rfc2047-encode-message-header): Encode no matter
+ 	whether Mule.
+ 
+ 2000-03-10 14:57:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* message.el (message-send-mail): Protect against unloaded Gnus. 
+ 
+ 	* gnus-topic.el (gnus-topic-update-topic-line): Don't update the
+ 	parent.  
+ 	(gnus-topic-update-topic-line): Yes, do.
+ 	(gnus-topic-goto-missing-group): Tally the correct number of
+ 	unread articles before inserting the topic line.
+ 
+ 2000-03-01 09:55:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* nnultimate.el (nnultimate-retrieve-headers): Ignore errors. 
+ 
+ 2000-02-13 13:53:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* mm-decode.el (mm-dissect-buffer): Ditto.
+ 
+ 	* gnus-art.el (article-decode-charset): Strip CTE.
+ 
+ 	* ietf-drums.el (ietf-drums-strip): New function.
+ 
+ 	* gnus-sum.el (gnus-summary-move-article): Don't use the prefix
+ 	when prompting in read-only groups.
+ 
+ 2000-02-23  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* imap.el (imap-send-command): Change EOL-chars when
+ 	`imap-client-eol' differs from default, not only for kerberos4.
+ 	(imap-mailbox-status): Get encoded mailbox's status.
+ 
+ 2000-02-19  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* mail-source.el (mail-source-fetch-imap): Copy `imap-password'
+ 	into `mail-source-password-cache'.
+ 
+ 2000-02-17  Florian Weimer  <fw@deneb.cygnus.argh.org>
+ 
+ 	* mm-util.el (mm-mime-charset): Check for presence of
+ 	`coding-system-get' and `get-charset-property' (recent XEmacs has
+ 	the former, but not the latter).
+ 
+ 2000-01-28  Dave Love  <fx@gnu.org>
+ 
+ 	* message.el (message-check-news-header-syntax): Fix typo
+ 	`newsgroyps'.
+ 	(message-talkative-question): Put temp buffer in fundamental-mode.
+ 	(message-recover): Use fundamental-mode in the right buffer.
+ 
+ 	* nnmail.el (nnmail-split-history): Use fundamental-mode in the
+ 	right buffer.
+ 
+ 2000-01-26 12:01:18  Shenghuo ZHU  <zsh@cs.rochester.edu>
+ 
+ 	* qp.el (quoted-printable-decode-region): Add charset parameter.
+ 	(quoted-printable-decode-string): Ditto.
+ 	
+ 	* gnus-art.el (article-de-quoted-unreadable): Use it.
+ 
+ 2000-01-21  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* nnimap.el (nnimap-split-predicate): New variable.
+ 	(nnimap-split-articles): Use it.
+ 
+ 2000-01-20  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* utf7.el: Change email address.
+ 
+ 2000-01-18 22:03:51  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* gnus-group.el (gnus-group-catchup): Purge split history.
+ 
+ 2000-01-14 02:43:55  Shenghuo ZHU  <zsh@cs.rochester.edu>
+ 
+ 	* nnmail.el (nnmail-generate-active): Support extended group name.
+ 	(nnmail-get-active): Ditto.
+ 
+ 2000-01-13 15:16:10  Shenghuo ZHU  <zsh@cs.rochester.edu>
+ 
+ 	* gnus-agent.el (gnus-agent-write-active): Since no prefix in
+ 	group names, don't remove anything.
+ 
+ 2000-01-13 15:10:53  Shenghuo ZHU  <zsh@cs.rochester.edu>
+ 
+ 	* webmail.el (webmail-my-deja-open): My-deja changes.
+ 
+ 2000-01-13  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* nnimap.el (nnimap-retrieve-headers-progress): Create xref field.
+ 
+ 2000-01-10 23:35:33  Shenghuo ZHU  <zsh@cs.rochester.edu>
+ 
+ 	* gnus-agent.el (gnus-agent-fetch-headers): Translate full path.
+ 
+ 2000-01-09 22:52:35  Shenghuo ZHU  <zsh@cs.rochester.edu>
+ 
+ 	* gnus.el (gnus-other-frame): Fix typo.
+ 
+ 1999-06-25  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+ 
+ 	* gnus-cus.el (gnus-group-customize): Fix typo.
+ 
+ 2000-01-08 08:36:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* nnweb.el (nnweb-insert): Simplified.
+ 
+ 2000-01-06 18:32:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* gnus-art.el (gnus-article-mode-map): "e" is
+ 	gnus-summary-edit-article. 
+ 
+ 2000-01-06 18:25:37  Jari Aalto  <jari.aalto@poboxes.com>
+ 
+ 	* mailcap.el (mailcap-mime-extensions): Add .diff.
+ 
+ 2000-01-06 00:06:40 Kim-Minh Kaplan <kmkaplan@vocatex.fr>
+ 
+         * mm-decode.el (mm-mailcap-command): handle "%%" and the case where
+         there is no "%s" in the method.
+ 
+ 2000-01-08 21:01:04  Kim-Minh Kaplan <kmkaplan@vocatex.fr>
+ 
+ 	* gnus-sum.el (gnus-summary-select-article): Return 'old.
+ 
+ 2000-01-06 13:41:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* nnfolder.el (nnfolder-read-folder): Use nnfolder-save-buffer. 
+ 
+ 	* gnus.el: Really always pop up a new frame.
+ 
+ 	* parse-time.el (parse-time-rules): Allow 100-110 to be
+ 	2000-2010. 
+ 
+ 	* time-date.el (date-to-time): Don't use timezone.
+ 
+ 2000-01-06  Dave Love  <fx@gnu.org>
+ 
+ 	* time-date.el: Add keywords.
+ 	(date-to-time): Add autoload cookie.  Canonicalize with
+ 	timezone-make-date-arpa-standard.
+ 	(time-to-seconds): Avoid caddr.
+ 	(safe-date-to-time): Add autoload cookie.
+ 
+ 	* base64.el: Require cl when compiling.
+ 
+ 2000-01-05 17:31:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* gnus-sum.el (gnus-summary-select-article): Return whether we
+ 	selected something new.
+ 	(gnus-summary-search-article): Start searching at the window
+ 	point.
+ 
+ 	* gnus-group.el (gnus-fetch-group): Complete over
+ 	gnus-active-hashtb. 
+ 
  Wed Jan  5 17:06:41 2000  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
  
  	* gnus.el: Pterodactyl Gnus v5.8.3 is released.
*** pub/pgnus/texi/gnus.texi	Wed Jan  5 17:09:56 2000
--- pgnus/texi/gnus.texi	Thu Apr 20 01:31:39 2000
***************
*** 355,361 ****
  spool or your mbox file.  All at the same time, if you want to push your
  luck.
  
! This manual corresponds to Gnus 5.8.3.
  
  @end ifinfo
  
--- 355,361 ----
  spool or your mbox file.  All at the same time, if you want to push your
  luck.
  
! This manual corresponds to Gnus 5.8.4.
  
  @end ifinfo
  
***************
*** 386,392 ****
  
  @end iftex
  
- 
  @menu
  * Starting Up::           Finding news can be a pain.
  * The Group Buffer::      Selecting, subscribing and killing groups.
--- 386,391 ----
***************
*** 400,405 ****
--- 399,863 ----
  * Appendices::            Terminology, Emacs intro, FAQ, History, Internals.
  * Index::                 Variable, function and concept index.
  * Key Index::             Key Index.
+ 
+ @detailmenu
+  --- The Detailed Node Listing ---
+ 
+ Starting Gnus
+ 
+ * Finding the News::    Choosing a method for getting news.
+ * The First Time::      What does Gnus do the first time you start it?
+ * The Server is Down::  How can I read my mail then?
+ * Slave Gnusae::        You can have more than one Gnus active at a time.
+ * Fetching a Group::    Starting Gnus just to read a group.
+ * New Groups::          What is Gnus supposed to do with new groups?
+ * Startup Files::       Those pesky startup files---@file{.newsrc}.
+ * Auto Save::           Recovering from a crash.
+ * The Active File::     Reading the active file over a slow line Takes Time.
+ * Changing Servers::    You may want to move from one server to another.
+ * Startup Variables::   Other variables you might change.
+ 
+ New Groups
+ 
+ * Checking New Groups::      Determining what groups are new.
+ * Subscription Methods::     What Gnus should do with new groups.
+ * Filtering New Groups::     Making Gnus ignore certain new groups.
+ 
+ The Group Buffer
+ 
+ * Group Buffer Format::    Information listed and how you can change it.
+ * Group Maneuvering::      Commands for moving in the group buffer.
+ * Selecting a Group::      Actually reading news.
+ * Group Data::             Changing the info for a group.
+ * Subscription Commands::  Unsubscribing, killing, subscribing.
+ * Group Levels::           Levels? What are those, then?
+ * Group Score::            A mechanism for finding out what groups you like.
+ * Marking Groups::         You can mark groups for later processing.
+ * Foreign Groups::         Creating and editing groups.
+ * Group Parameters::       Each group may have different parameters set.
+ * Listing Groups::         Gnus can list various subsets of the groups.
+ * Sorting Groups::         Re-arrange the group order.
+ * Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
+ * Browse Foreign Server::  You can browse a server.  See what it has to offer.
+ * Exiting Gnus::           Stop reading news and get some work done.
+ * Group Topics::           A folding group mode divided into topics.
+ * Misc Group Stuff::       Other stuff that you can to do.
+ 
+ Group Buffer Format
+ 
+ * Group Line Specification::       Deciding how the group buffer is to look.
+ * Group Modeline Specification::   The group buffer modeline.
+ * Group Highlighting::             Having nice colors in the group buffer.
+ 
+ Group Topics
+ 
+ * Topic Variables::    How to customize the topics the Lisp Way.
+ * Topic Commands::     Interactive E-Z commands.
+ * Topic Sorting::      Sorting each topic individually.
+ * Topic Topology::     A map of the world.
+ * Topic Parameters::   Parameters that apply to all groups in a topic.
+ 
+ Misc Group Stuff
+ 
+ * Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
+ * Group Information::     Information and help on groups and Gnus.
+ * Group Timestamp::       Making Gnus keep track of when you last read a group.
+ * File Commands::         Reading and writing the Gnus files.
+ 
+ The Summary Buffer
+ 
+ * Summary Buffer Format::       Deciding how the summary buffer is to look.
+ * Summary Maneuvering::         Moving around the summary buffer.
+ * Choosing Articles::           Reading articles.
+ * Paging the Article::          Scrolling the current article.
+ * Reply Followup and Post::     Posting articles.
+ * Marking Articles::            Marking articles as read, expirable, etc.
+ * Limiting::                    You can limit the summary buffer.
+ * Threading::                   How threads are made.
+ * Sorting::                     How articles and threads are sorted.
+ * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
+ * Article Caching::             You may store articles in a cache.
+ * Persistent Articles::         Making articles expiry-resistant.
+ * Article Backlog::             Having already read articles hang around.
+ * Saving Articles::             Ways of customizing article saving.
+ * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
+ * Article Treatment::           The article buffer can be mangled at will.
+ * MIME Commands::               Doing MIMEy things with the articles.
+ * Charsets::                    Character set issues.
+ * Article Commands::            Doing various things with the article buffer.
+ * Summary Sorting::             Sorting the summary buffer in various ways.
+ * Finding the Parent::          No child support? Get the parent.
+ * Alternative Approaches::      Reading using non-default summaries.
+ * Tree Display::                A more visual display of threads.
+ * Mail Group Commands::         Some commands can only be used in mail groups.
+ * Various Summary Stuff::       What didn't fit anywhere else.
+ * Exiting the Summary Buffer::  Returning to the Group buffer.
+ * Crosspost Handling::          How crossposted articles are dealt with.
+ * Duplicate Suppression::       An alternative when crosspost handling fails.
+ 
+ Summary Buffer Format
+ 
+ * Summary Buffer Lines::     You can specify how summary lines should look.
+ * To From Newsgroups::       How to not display your own name.
+ * Summary Buffer Mode Line:: You can say how the mode line should look.
+ * Summary Highlighting::     Making the summary buffer all pretty and nice.
+ 
+ Choosing Articles
+ 
+ * Choosing Commands::        Commands for choosing articles.
+ * Choosing Variables::       Variables that influence these commands.
+ 
+ Reply, Followup and Post
+ 
+ * Summary Mail Commands::       Sending mail.
+ * Summary Post Commands::       Sending news.
+ * Summary Message Commands::    Other Message-related commands.
+ * Canceling and Superseding::   ``Whoops, I shouldn't have called him that.''
+ 
+ Marking Articles
+ 
+ * Unread Articles::      Marks for unread articles.
+ * Read Articles::        Marks for read articles.
+ * Other Marks::          Marks that do not affect readedness.
+ 
+ Marking Articles
+ 
+ * Setting Marks::             How to set and remove marks.
+ * Generic Marking Commands::  How to customize the marking.
+ * Setting Process Marks::     How to mark articles for later processing.
+ 
+ Threading
+ 
+ * Customizing Threading::     Variables you can change to affect the threading.
+ * Thread Commands::           Thread based commands in the summary buffer.
+ 
+ Customizing Threading
+ 
+ * Loose Threads::        How Gnus gathers loose threads into bigger threads.
+ * Filling In Threads::   Making the threads displayed look fuller.
+ * More Threading::       Even more variables for fiddling with threads.
+ * Low-Level Threading::  You thought it was over... but you were wrong!
+ 
+ Decoding Articles
+ 
+ * Uuencoded Articles::    Uudecode articles.
+ * Shell Archives::        Unshar articles.
+ * PostScript Files::      Split PostScript.
+ * Other Files::           Plain save and binhex.
+ * Decoding Variables::    Variables for a happy decoding.
+ * Viewing Files::         You want to look at the result of the decoding?
+ 
+ Decoding Variables
+ 
+ * Rule Variables::          Variables that say how a file is to be viewed.
+ * Other Decode Variables::  Other decode variables.
+ * Uuencoding and Posting::  Variables for customizing uuencoding.
+ 
+ Article Treatment
+ 
+ * Article Highlighting::    You want to make the article look like fruit salad.
+ * Article Fontisizing::     Making emphasized text look nice.
+ * Article Hiding::          You also want to make certain info go away.
+ * Article Washing::         Lots of way-neat functions to make life better.
+ * Article Buttons::         Click on URLs, Message-IDs, addresses and the like.
+ * Article Date::            Grumble, UT!
+ * Article Signature::       What is a signature?
+ * Article Miscellania::     Various other stuff.
+ 
+ Alternative Approaches
+ 
+ * Pick and Read::               First mark articles and then read them.
+ * Binary Groups::               Auto-decode all articles.
+ 
+ Various Summary Stuff
+ 
+ * Summary Group Information::         Information oriented commands.
+ * Searching for Articles::            Multiple article commands.
+ * Summary Generation Commands::       (Re)generating the summary buffer.
+ * Really Various Summary Commands::   Those pesky non-conformant commands.
+ 
+ The Article Buffer
+ 
+ * Hiding Headers::        Deciding what headers should be displayed.
+ * Using MIME::            Pushing articles through @sc{mime} before reading them.
+ * Customizing Articles::  Tailoring the look of the articles.
+ * Article Keymap::        Keystrokes available in the article buffer.
+ * Misc Article::          Other stuff.
+ 
+ Composing Messages
+ 
+ * Mail::                 Mailing and replying.
+ * Post::                 Posting and following up.
+ * Posting Server::       What server should you post via?
+ * Mail and Post::        Mailing and posting at the same time.
+ * Archived Messages::    Where Gnus stores the messages you've sent.
+ * Posting Styles::       An easier way to specify who you are.
+ * Drafts::               Postponing messages and rejected messages.
+ * Rejected Articles::    What happens if the server doesn't like your article?
+ 
+ Select Methods
+ 
+ * The Server Buffer::     Making and editing virtual servers.
+ * Getting News::          Reading USENET news with Gnus.
+ * Getting Mail::          Reading your personal mail with Gnus.
+ * Browsing the Web::      Getting messages from a plethora of Web sources.
+ * Other Sources::         Reading directories, files, SOUP packets.
+ * Combined Groups::       Combining groups into one group.
+ * Gnus Unplugged::        Reading news and mail offline.
+ 
+ The Server Buffer
+ 
+ * Server Buffer Format::      You can customize the look of this buffer.
+ * Server Commands::           Commands to manipulate servers.
+ * Example Methods::           Examples server specifications.
+ * Creating a Virtual Server:: An example session.
+ * Server Variables::          Which variables to set.
+ * Servers and Methods::       You can use server names as select methods.
+ * Unavailable Servers::       Some servers you try to contact may be down.
+ 
+ Getting News
+ 
+ * NNTP::               Reading news from an @sc{nntp} server.
+ * News Spool::         Reading news from the local spool.
+ 
+ Getting Mail
+ 
+ * Mail in a Newsreader::         Important introductory notes.  
+ * Getting Started Reading Mail:: A simple cookbook example.
+ * Splitting Mail::               How to create mail groups.
+ * Mail Sources::                 How to tell Gnus where to get mail from.
+ * Mail Backend Variables::       Variables for customizing mail handling.
+ * Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.
+ * Group Mail Splitting::         Use group customize to drive mail splitting.
+ * Incorporating Old Mail::       What about the old mail you have?
+ * Expiring Mail::                Getting rid of unwanted mail.
+ * Washing Mail::                 Removing gruft from the mail you get.
+ * Duplicates::                   Dealing with duplicated mail.
+ * Not Reading Mail::             Using mail backends for reading other files.
+ * Choosing a Mail Backend::      Gnus can read a variety of mail formats.
+ 
+ Mail Sources
+ 
+ * Mail Source Specifiers::       How to specify what a mail source is.
+ * Mail Source Customization::    Some variables that influence things.
+ * Fetching Mail::                Using the mail source specifiers.
+ 
+ Choosing a Mail Backend
+ 
+ * Unix Mail Box::               Using the (quite) standard Un*x mbox.
+ * Rmail Babyl::                 Emacs programs use the rmail babyl format.
+ * Mail Spool::                  Store your mail in a private spool?
+ * MH Spool::                    An mhspool-like backend.
+ * Mail Folders::                Having one file for each group.
+ * Comparing Mail Backends::     An in-depth looks at pros and cons.
+ 
+ Browsing the Web
+ 
+ * Web Searches::          Creating groups from articles that match a string.
+ * Slashdot::              Reading the Slashdot comments.
+ * Ultimate::              The Ultimate Bulletin Board systems.
+ * Web Archive::           Reading mailing list archived on web.
+ 
+ Other Sources
+ 
+ * Directory Groups::      You can read a directory as if it was a newsgroup.
+ * Anything Groups::       Dired?  Who needs dired?
+ * Document Groups::       Single files can be the basis of a group.
+ * SOUP::                  Reading @sc{soup} packets ``offline''.
+ * Mail-To-News Gateways:: Posting articles via mail-to-news gateways.
+ * IMAP::                  Using Gnus as a @sc{imap} client.
+ 
+ Document Groups
+ 
+ * Document Server Internals::   How to add your own document types.
+ 
+ SOUP
+ 
+ * SOUP Commands::     Commands for creating and sending @sc{soup} packets
+ * SOUP Groups::       A backend for reading @sc{soup} packets.
+ * SOUP Replies::      How to enable @code{nnsoup} to take over mail and news.
+ 
+ @sc{imap}
+ 
+ * Splitting in IMAP::     Splitting mail with nnimap.
+ * Editing IMAP ACLs::     Limiting/enabling other users access to a mailbox.
+ * Expunging mailboxes::   Equivalent of a "compress mailbox" button.
+ 
+ Combined Groups
+ 
+ * Virtual Groups::     Combining articles from many groups.
+ * Kibozed Groups::     Looking through parts of the newsfeed for articles.
+ 
+ Gnus Unplugged
+ 
+ * Agent Basics::           How it all is supposed to work.
+ * Agent Categories::       How to tell the Gnus Agent what to download.
+ * Agent Commands::         New commands for all the buffers.
+ * Agent Expiry::           How to make old articles go away.
+ * Outgoing Messages::      What happens when you post/mail something?
+ * Agent Variables::        Customizing is fun.
+ * Example Setup::          An example @file{.gnus.el} file for offline people.
+ * Batching Agents::        How to fetch news from a @code{cron} job.
+ * Agent Caveats::          What you think it'll do and what it does.
+ 
+ Agent Categories
+ 
+ * Category Syntax::       What a category looks like.
+ * The Category Buffer::   A buffer for maintaining categories.
+ * Category Variables::    Customize'r'Us.
+ 
+ Agent Commands
+ 
+ * Group Agent Commands::
+ * Summary Agent Commands::
+ * Server Agent Commands::
+ 
+ Scoring
+ 
+ * Summary Score Commands::   Adding score entries for the current group.
+ * Group Score Commands::     General score commands.
+ * Score Variables::          Customize your scoring.  (My, what terminology).
+ * Score File Format::        What a score file may contain.
+ * Score File Editing::       You can edit score files by hand as well.
+ * Adaptive Scoring::         Big Sister Gnus knows what you read.
+ * Home Score File::          How to say where new score entries are to go.
+ * Followups To Yourself::    Having Gnus notice when people answer you.
+ * Scoring Tips::             How to score effectively.
+ * Reverse Scoring::          That problem child of old is not problem.
+ * Global Score Files::       Earth-spanning, ear-splitting score files.
+ * Kill Files::               They are still here, but they can be ignored.
+ * Converting Kill Files::    Translating kill files to score files.
+ * GroupLens::                Getting predictions on what you like to read.
+ * Advanced Scoring::         Using logical expressions to build score rules.
+ * Score Decays::             It can be useful to let scores wither away.
+ 
+ GroupLens
+ 
+ * Using GroupLens::          How to make Gnus use GroupLens.
+ * Rating Articles::          Letting GroupLens know how you rate articles.
+ * Displaying Predictions::   Displaying predictions given by GroupLens.
+ * GroupLens Variables::      Customizing GroupLens.
+ 
+ Advanced Scoring
+ 
+ * Advanced Scoring Syntax::     A definition.
+ * Advanced Scoring Examples::   What they look like.
+ * Advanced Scoring Tips::       Getting the most out of it.
+ 
+ Various
+ 
+ * Process/Prefix::             A convention used by many treatment commands.
+ * Interactive::                Making Gnus ask you many questions.
+ * Symbolic Prefixes::          How to supply some Gnus functions with options.
+ * Formatting Variables::       You can specify what buffers should look like.
+ * Windows Configuration::      Configuring the Gnus buffer windows.
+ * Faces and Fonts::            How to change how faces look.
+ * Compilation::                How to speed Gnus up.
+ * Mode Lines::                 Displaying information in the mode lines.
+ * Highlighting and Menus::     Making buffers look all nice and cozy.
+ * Buttons::                    Get tendonitis in ten easy steps!
+ * Daemons::                    Gnus can do things behind your back.
+ * NoCeM::                      How to avoid spam and other fatty foods.
+ * Undo::                       Some actions can be undone.
+ * Moderation::                 What to do if you're a moderator.
+ * XEmacs Enhancements::        There are more pictures and stuff under XEmacs.
+ * Fuzzy Matching::             What's the big fuzz?
+ * Thwarting Email Spam::       A how-to on avoiding unsolicited commercial email.
+ * Various Various::            Things that are really various.
+ 
+ Formatting Variables
+ 
+ * Formatting Basics::     A formatting variable is basically a format string.
+ * Mode Line Formatting::  Some rules about mode line formatting variables.
+ * Advanced Formatting::   Modifying output in various ways.
+ * User-Defined Specs::    Having Gnus call your own functions.
+ * Formatting Fonts::      Making the formatting look colorful and nice.
+ 
+ XEmacs Enhancements
+ 
+ * Picons::    How to display pictures of what your reading.
+ * Smileys::   Show all those happy faces the way they were meant to be shown.
+ * Toolbar::   Click'n'drool.
+ * XVarious::  Other XEmacsy Gnusey variables.
+ 
+ Picons
+ 
+ * Picon Basics::           What are picons and How do I get them.
+ * Picon Requirements::     Don't go further if you aren't using XEmacs.
+ * Easy Picons::            Displaying Picons---the easy way.
+ * Hard Picons::            The way you should do it.  You'll learn something.
+ * Picon Useless Configuration:: Other variables you can trash/tweak/munge/play with.
+ 
+ Appendices
+ 
+ * History::                        How Gnus got where it is today.
+ * On Writing Manuals::             Why this is not a beginner's guide.
+ * Terminology::                    We use really difficult, like, words here.
+ * Customization::                  Tailoring Gnus to your needs.
+ * Troubleshooting::                What you might try if things do not work.
+ * Gnus Reference Guide::           Rilly, rilly technical stuff.
+ * Emacs for Heathens::             A short introduction to Emacsian terms.
+ * Frequently Asked Questions::     A question-and-answer session.
+ 
+ History
+ 
+ * Gnus Versions::       What Gnus versions have been released.
+ * Other Gnus Versions:: Other Gnus versions that also have been released.
+ * Why?::                What's the point of Gnus?
+ * Compatibility::       Just how compatible is Gnus with @sc{gnus}?
+ * Conformity::          Gnus tries to conform to all standards.
+ * Emacsen::             Gnus can be run on a few modern Emacsen.
+ * Gnus Development::    How Gnus is developed.
+ * Contributors::        Oodles of people.
+ * New Features::        Pointers to some of the new stuff in Gnus.
+ * Newest Features::     Features so new that they haven't been written yet.
+ 
+ New Features
+ 
+ * ding Gnus::          New things in Gnus 5.0/5.1, the first new Gnus.
+ * September Gnus::     The Thing Formally Known As Gnus 5.3/5.3.
+ * Red Gnus::           Third time best---Gnus 5.4/5.5.
+ * Quassia Gnus::       Two times two is four, or Gnus 5.6/5.7.
+ 
+ Customization
+ 
+ * Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
+ * Slow Terminal Connection::  You run a remote Emacs.
+ * Little Disk Space::         You feel that having large setup files is icky.
+ * Slow Machine::              You feel like buying a faster machine.
+ 
+ Gnus Reference Guide
+ 
+ * Gnus Utility Functions::   Common functions and variable to use.
+ * Backend Interface::        How Gnus communicates with the servers.
+ * Score File Syntax::        A BNF definition of the score file standard.
+ * Headers::                  How Gnus stores headers internally.
+ * Ranges::                   A handy format for storing mucho numbers.
+ * Group Info::               The group info format.
+ * Extended Interactive::     Symbolic prefixes and stuff.
+ * Emacs/XEmacs Code::        Gnus can be run under all modern Emacsen.
+ * Various File Formats::     Formats of files that Gnus use.
+ 
+ Backend Interface
+ 
+ * Required Backend Functions::        Functions that must be implemented.
+ * Optional Backend Functions::        Functions that need not be implemented.
+ * Error Messaging::                   How to get messages and report errors.
+ * Writing New Backends::              Extending old backends.
+ * Hooking New Backends Into Gnus::    What has to be done on the Gnus end.
+ * Mail-like Backends::                Some tips on mail backends.
+ 
+ Various File Formats
+ 
+ * Active File Format::      Information on articles and groups available.
+ * Newsgroups File Format::  Group descriptions.
+ 
+ Emacs for Heathens
+ 
+ * Keystrokes::      Entering text and executing commands.
+ * Emacs Lisp::      The built-in Emacs programming language.
+ 
+ @end detailmenu
  @end menu
  
  @node Starting Up
***************
*** 1733,1738 ****
--- 2191,2199 ----
  handy if you want to read the most important groups before you read the
  rest.
  
+ If this variable is @code{best}, Gnus will make the next newsgroup the
+ one with the best level.
+ 
  @vindex gnus-group-default-list-level
  All groups with a level less than or equal to
  @code{gnus-group-default-list-level} will be listed in the group buffer
***************
*** 6599,6607 ****
  @kindex W W l (Summary)
  @findex gnus-article-hide-list-identifiers
  @vindex gnus-list-identifiers
! Hide list identifiers specified in @code{gnus-list-identifiers}.  These
! are strings some list servers add to the beginning of all @code{Subject}
! headers---for example, @samp{[zebra 4711]}.
  
  @table @code
  
--- 7060,7069 ----
  @kindex W W l (Summary)
  @findex gnus-article-hide-list-identifiers
  @vindex gnus-list-identifiers
! Strip list identifiers specified in @code{gnus-list-identifiers}.
! These are strings some mailing list servers add to the beginning of
! all @code{Subject} headers---for example, @samp{[zebra 4711]}.  Any
! leading @samp{Re: } is skipped before stripping.
  
  @table @code
  
***************
*** 7338,7344 ****
  Parameters}).  The default value is @code{(unknown-8bit)}, which is
  something some agents insist on having in there.
  
! @cindex Russina
  @cindex koi8-r
  @cindex koi8-u
  @cindex iso-8859-5
--- 7800,7830 ----
  Parameters}).  The default value is @code{(unknown-8bit)}, which is
  something some agents insist on having in there.
  
! @vindex gnus-group-posting-charset-alist
! When posting, @code{gnus-group-posting-charset-alist} is used to
! determine which charsets should not be encoded using the @sc{mime}
! encodings.  For instance, some hierarchies discourage using
! quoted-printable header encoding.
! 
! This variable is an alist of regexps and permitted unencoded charsets
! for posting.  Each element of the alist has the form @code{(}@var{test
! header body-list}@code{)}, where:
! 
! @table @var
! @item 
! test
! is either a regular expression matching the newsgroup header or a
! variable to query,
! @item header
! is the charset which may be left unencoded in the header (@code{nil}
! means encode all charsets),
! @item body-list
! is a list of charsets which may be encoded using 8bit content-transfer
! encoding in the body, or one of the special values @code{nil} (always
! encode using quoted-printable) or @code{t} (always use 8bit).
! @end table
! 
! @cindex Russian
  @cindex koi8-r
  @cindex koi8-u
  @cindex iso-8859-5
***************
*** 8222,8229 ****
  @end table
  
  @vindex gnus-exit-group-hook
! @code{gnus-exit-group-hook} is called when you exit the current
! group.
  
  @findex gnus-summary-wake-up-the-dead
  @findex gnus-dead-summary-mode
--- 8708,8716 ----
  @end table
  
  @vindex gnus-exit-group-hook
! @code{gnus-exit-group-hook} is called when you exit the current group
! with an ``updating'' exit.  For instance @kbd{Q}
! (@code{gnus-summary-exit-no-update}) does not call this hook.
  
  @findex gnus-summary-wake-up-the-dead
  @findex gnus-dead-summary-mode
***************
*** 8982,8987 ****
--- 9469,9489 ----
  (add-hook 'message-send-hook 'ispell-message)
  @end lisp
  
+ If you want to change the @code{ispell} dictionary based on what group
+ you're in, you could say something like the following:
+ 
+ @lisp
+ (add-hook 'gnus-select-group-hook
+           (lambda ()
+             (cond
+              ((string-match "^de\\." gnus-newsgroup-name)
+               (ispell-change-dictionary "deutsch"))
+              (t
+               (ispell-change-dictionary "english")))))
+ @end lisp
+ 
+ Modify to suit your needs.
+ 
  
  @node Archived Messages
  @section Archived Messages
***************
*** 9199,9205 ****
           (signature my-quote-randomizer))
          ((message-news-p)
           (signature my-news-signature))
!         ((header "From.*To" "larsi.*org")
           (Organization "Somewhere, Inc."))
          ((posting-from-work-p)
           (signature-file "~/.work-signature")
--- 9701,9707 ----
           (signature my-quote-randomizer))
          ((message-news-p)
           (signature my-news-signature))
!         (header "From.*To" "larsi.*org"
           (Organization "Somewhere, Inc."))
          ((posting-from-work-p)
           (signature-file "~/.work-signature")
***************
*** 10656,10662 ****
  An example @sc{imap} mail source:
  
  @lisp
! (imap :server "mail.mycorp.com" :stream kerberos4)
  @end lisp
  
  @item webmail
--- 11158,11164 ----
  An example @sc{imap} mail source:
  
  @lisp
! (imap :server "mail.mycorp.com" :stream kerberos4 :fetchflag "\\Seen")
  @end lisp
  
  @item webmail
***************
*** 11863,11870 ****
--- 12365,12375 ----
  * Slashdot::              Reading the Slashdot comments.
  * Ultimate::              The Ultimate Bulletin Board systems.
  * Web Archive::           Reading mailing list archived on web.
+ * Customizing w3::        Doing stuff to Emacs/w3 from Gnus.
  @end menu
  
+ All the web sources require Emacs/w3 and the url library to work.
+ 
  The main caveat with all these web sources is that they probably won't
  work for a very long time.  Gleaning information from the @sc{html} data 
  is guesswork at best, and when the layout is altered, the Gnus backend
***************
*** 12084,12089 ****
--- 12589,12595 ----
  @samp{~/News/ultimate/}.
  @end table
  
+ 
  @node Web Archive
  @subsection Web Archive
  @cindex nnwarchive
***************
*** 12120,12125 ****
--- 12626,12663 ----
  The password for your account on the web server.
  @end table
  
+ 
+ @node Customizing w3
+ @subsection Customizing w3
+ @cindex w3
+ @cindex html
+ @cindex url
+ @cindex Netscape
+ 
+ Gnus uses the url library to fetch web pages and Emacs/w3 to display web 
+ pages.  Emacs/w3 is documented in its own manual, but there are some
+ things that may be more relevant for Gnus users.
+ 
+ For instance, a common question is how to make Emacs/w3 follow links
+ using the @code{browse-url} functions (which will call some external web 
+ browser like Netscape).  Here's one way:
+ 
+ @lisp
+ (eval-after-load "w3"
+   '(progn
+     (fset 'w3-fetch-orig (symbol-function 'w3-fetch))
+     (defun w3-fetch (&optional url target)
+       (interactive (list (w3-read-url-with-default)))
+       (if (eq major-mode 'gnus-article-mode)
+           (browse-url url)
+         (w3-fetch-orig url target)))))
+ @end lisp
+ 
+ Put that in your @file{.emacs} file, and hitting links in w3-rendered
+ @sc{html} in the Gnus article buffers will use @code{browse-url} to
+ follow the link.
+ 
+ 
  @node Other Sources
  @section Other Sources
  
***************
*** 12851,12867 ****
  @item nnimap-stream
  @vindex nnimap-stream
  The type of stream used to connect to your server.  By default, nnimap
! will use the most secure stream your server is capable of.
  
  @itemize @bullet
  @item
! @dfn{kerberos4:} Uses the `imtest' program.
  @item
! @dfn{ssl:} Uses OpenSSL or SSLeay.
  @item
  @dfn{network:} Plain, TCP/IP network connection.
  @end itemize
  
  @item nnimap-authenticator
  @vindex nnimap-authenticator
  
--- 13389,13424 ----
  @item nnimap-stream
  @vindex nnimap-stream
  The type of stream used to connect to your server.  By default, nnimap
! will detect and automatically use all of the below, with the exception
! of SSL. (SSL is being replaced by STARTTLS, which can be automatically
! detected, but it's not widely deployed yet).
  
  @itemize @bullet
  @item
! @dfn{gssapi:} Connect with GSSAPI (usually kerberos 5). Require the
! @samp{imtest} program.
  @item
! @dfn{kerberos4:} Connect with kerberos 4. Require the @samp{imtest} program.
! @item
! @dfn{starttls:} Connect via the STARTTLS extension (similar to
! SSL). Require the external library @samp{starttls.el} and program
! @samp{starttls}.
! @item
! @dfn{ssl:} Connect through SSL. Require OpenSSL (the
! program @samp{openssl}) or SSLeay (@samp{s_client}).
  @item
  @dfn{network:} Plain, TCP/IP network connection.
  @end itemize
  
+ The @samp{imtest} program is shipped with Cyrus IMAPD, nnimap support
+ both @samp{imtest} version 1.5.x and version 1.6.x.
+ 
+ For SSL connections, the OpenSSL program is available from
+ @file{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay,
+ and nnimap support it too - altough the most recent versions of SSLeay,
+ 0.9.x, are known to have serious bugs making it useless. Earlier
+ versions, especially 0.8.x, of SSLeay are known to work.
+ 
  @item nnimap-authenticator
  @vindex nnimap-authenticator
  
***************
*** 12870,12876 ****
  
  @itemize @bullet
  @item
! @dfn{kerberos4:} Kerberos authentication.
  @item
  @dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
  @item
--- 13427,13440 ----
  
  @itemize @bullet
  @item
! @dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Require
! external program @code{imtest}.
! @item
! @dfn{kerberos4:} Kerberos authentication. Require external program
! @code{imtest}.
! @item
! @dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Require
! external library @code{digest-md5.el}.
  @item
  @dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
  @item
***************
*** 13020,13025 ****
--- 13584,13601 ----
  
  Nnmail equivalent: @code{nnmail-split-methods}.
  
+ @item nnimap-split-predicate
+ @cindex splitting
+ @vindex nnimap-split-predicate
+ 
+ Mail matching this predicate in @code{nnimap-split-inbox} will be
+ splitted, it is a string and the default is @samp{UNSEEN UNDELETED}.
+ 
+ This might be useful if you use another @sc{imap} client to read mail in
+ your inbox but would like Gnus to split all articles in the inbox
+ regardless of readedness. Then you might change this to
+ @samp{UNDELETED}.
+ 
  @item nnimap-split-fancy
  @cindex splitting, fancy
  @findex nnimap-split-fancy
***************
*** 15855,15860 ****
--- 16431,16442 ----
  will mark the next three unread articles as read, no matter what the
  summary buffer looks like.  Set @code{gnus-summary-goto-unread} to
  @code{nil} for a more straightforward action.
+ 
+ Many commands do not use the process/prefix convention.  All commands
+ that do explicitly say so in this manual.  To apply the process/prefix
+ convention to commands that do not use it, you can use the @kbd{M-&}
+ command.  For instance, to mark all the articles in the group as
+ expirable, you could say `M P b M-& E'.
  
  
  @node Interactive
*** pub/pgnus/texi/message.texi	Wed Jan  5 17:09:56 2000
--- pgnus/texi/message.texi	Thu Apr 20 01:31:40 2000
***************
*** 1,7 ****
  \input texinfo                  @c -*-texinfo-*-
  
  @setfilename message
! @settitle Pterodactyl Message 5.8.3 Manual
  @synindex fn cp
  @synindex vr cp
  @synindex pg cp
--- 1,7 ----
  \input texinfo                  @c -*-texinfo-*-
  
  @setfilename message
! @settitle Pterodactyl Pterodactyl Message 5.8.4 Manual
  @synindex fn cp
  @synindex vr cp
  @synindex pg cp
***************
*** 42,48 ****
  @tex
  
  @titlepage
! @title Pterodactyl Message 5.8.3 Manual
  
  @author by Lars Magne Ingebrigtsen
  @page
--- 42,48 ----
  @tex
  
  @titlepage
! @title Pterodactyl Pterodactyl Message 5.8.4 Manual
  
  @author by Lars Magne Ingebrigtsen
  @page
***************
*** 83,89 ****
  * Key Index::         List of Message mode keys.
  @end menu
  
! This manual corresponds to Pterodactyl Message 5.8.3.  Message is
  distributed with the Gnus distribution bearing the same version number
  as this manual.
  
--- 83,89 ----
  * Key Index::         List of Message mode keys.
  @end menu
  
! This manual corresponds to Pterodactyl Pterodactyl Message 5.8.4.  Message is
  distributed with the Gnus distribution bearing the same version number
  as this manual.
  
*** pub/pgnus/aclocal.m4	Mon Jun 28 19:46:56 1999
--- pgnus/aclocal.m4	Thu Apr 20 01:31:40 2000
***************
*** 4,10 ****
   [# If set to t, that means we are running in a shell under Emacs.
    # If you have an Emacs named "t", then use the full path.
    test "$EMACS" = t && EMACS=
!   AC_PATH_PROGS(EMACS, emacs xemacs, no)
    if test $EMACS != "no"; then
      AC_MSG_CHECKING([where .elc files should go])
      dnl Set default value
--- 4,10 ----
   [# If set to t, that means we are running in a shell under Emacs.
    # If you have an Emacs named "t", then use the full path.
    test "$EMACS" = t && EMACS=
!   test "$EMACS" || AC_PATH_PROGS(EMACS, emacs xemacs, no)
    if test $EMACS != "no"; then
      AC_MSG_CHECKING([where .elc files should go])
      dnl Set default value
*** pub/pgnus/texi/ChangeLog	Wed Jan  5 17:09:56 2000
--- pgnus/texi/ChangeLog	Thu Apr 20 01:31:41 2000
***************
*** 1,6 ****
--- 1,44 ----
+ 2000-03-19  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* gnus.texi (IMAP): Addition.
+ 
+ 2000-03-13 17:44:59  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* gnus.texi (Process/Prefix): Addition.
+ 
+ 2000-02-04  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* gnus.texi (IMAP): Fix.
+ 
+ 2000-01-27 18:06:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* gnus.texi (Remember): Addition.
+ 
+ 2000-01-21  Simon Josefsson  <jas@pdc.kth.se>
+ 
+ 	* gnus.texi (Splitting in IMAP): Addition.
+ 	(Mail Source Specifiers): Add fetchflag setting in example.
+ 
+ 2000-01-08 08:10:04  Martin Bialasinski  <agr30+news@uni-koeln.de>
+ 
+ 	* gnus.texi (Mail and Post): Example.
+ 
+ 2000-01-08 07:46:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* gnus.texi (Customizing w3): New.
+ 
+ 2000-01-08 07:46:06  Hamish Macdonald  <hamishm@lucent.com>
+ 
+ 	* gnus.texi (Customizing w3): Example.
+ 
+ 2000-01-06 17:55:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+ 
+ 	* gnus.texi (Charsets): Addition.
+ 
  2000-01-05 15:58:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
  
  	* gnus.texi (Mail Group Commands): Addition.
+ 	(Top): Added detailmenu.
  
  2000-01-03 01:31:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
  
*** pub/pgnus/GNUS-NEWS	Wed Dec  1 17:31:03 1999
--- pgnus/GNUS-NEWS	Thu Apr 20 01:31:42 2000
***************
*** 7,12 ****
--- 7,28 ----
  *** The mail-fetching functions have changed.  See the manual for the
  many details.  In particular, all procmail fetching variables are gone.
  
+ If you used procmail like in
+ 
+ (setq nnmail-use-procmail t)
+ (setq nnmail-spool-file 'procmail)
+ (setq nnmail-procmail-directory "~/mail/incoming/")
+ (setq nnmail-procmail-suffix "\\.in")
+ 
+ this now has changed to 
+ 
+ (setq mail-sources
+       '((directory :path "~/mail/incoming/"
+ 		   :suffix ".in")))
+ 
+ More information is available in the info doc at Select Methods ->
+ Getting Mail -> Mail Sources
+ 
  *** Gnus is now a MIME-capable reader.  This affects many parts of
  Gnus, and adds a slew of new commands.  See the manual for details.