changeset 161:28f395d8dc7a r20-3b7

Import from CVS: tag r20-3b7
author cvs
date Mon, 13 Aug 2007 09:42:26 +0200
parents 1c55655d6702
children 4de2936b4e77
files CHANGES-beta ChangeLog etc/NEWS etc/TUTORIAL etc/gnus-refcard.tex etc/gnusrefcard/Makefile etc/gnusrefcard/README etc/gnusrefcard/bk-a4.tex etc/gnusrefcard/bk-lt.tex etc/gnusrefcard/booklet.tex etc/gnusrefcard/gnuslogo.ps etc/gnusrefcard/gnusref.tex etc/gnusrefcard/makelogo etc/gnusrefcard/quickref.tex etc/gnusrefcard/refcard.tex etc/mule/FAQ-Mule lib-src/ChangeLog lib-src/update-elc.sh lisp/ChangeLog lisp/bytecomp/byte-optimize.el lisp/bytecomp/bytecomp.el lisp/custom/ChangeLog lisp/custom/cus-edit.el lisp/custom/cus-face.el lisp/custom/custom.el lisp/custom/wid-browse.el lisp/custom/wid-edit.el lisp/custom/widget-example.el lisp/custom/widget.el lisp/edebug/edebug.el lisp/efs/dired.el lisp/gnus/ChangeLog lisp/gnus/smiley.el lisp/modes/ada-mode.el lisp/modes/arc-mode.el lisp/modes/cperl-mode.el lisp/modes/icon.el lisp/modes/ksh-mode.el lisp/modes/lisp-mode.el lisp/modes/make-mode.el lisp/modes/pascal.el lisp/modes/perl-mode.el lisp/modes/python-mode.el lisp/modes/scheme.el lisp/modes/simula.el lisp/modes/tcl.el lisp/modes/verilog-mode.el lisp/modes/vhdl-mode.el lisp/modes/vrml-mode.el lisp/mule/chinese-hooks.el lisp/mule/chinese.el lisp/mule/cyrillic-hooks.el lisp/mule/cyrillic.el lisp/mule/european-hooks.el lisp/mule/greek-hooks.el lisp/mule/ipa-hooks.el lisp/mule/japanese-hooks.el lisp/mule/korean-hooks.el lisp/mule/thai-hooks.el lisp/mule/thai.el lisp/packages/add-log.el lisp/packages/bookmark.el lisp/packages/buff-menu.el lisp/packages/chistory.el lisp/packages/diff.el lisp/packages/hexl.el lisp/packages/hyper-apropos.el lisp/packages/info.el lisp/packages/ispell.el lisp/packages/pending-del.el lisp/packages/tar-mode.el lisp/prim/auto-autoloads.el lisp/prim/cus-load.el lisp/prim/files.el lisp/prim/rect.el lisp/prim/subr.el lisp/prim/syntax.el lisp/psgml/ChangeLog lisp/psgml/psgml-parse.el lisp/tm/tm-ew-e.el lisp/utils/lib-complete.el lisp/utils/ph.el lisp/version.el lisp/x11/x-iso8859-1.el man/custom.texi man/widget.texi src/ChangeLog src/alloc.c src/bytecode.c src/console.c src/data.c src/editfns.c src/emacsfns.h src/keymap.c src/process.c
diffstat 84 files changed, 4954 insertions(+), 724 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES-beta	Mon Aug 13 09:41:47 2007 +0200
+++ b/CHANGES-beta	Mon Aug 13 09:42:26 2007 +0200
@@ -1,9 +1,22 @@
 							-*- indented-text -*-
+to 20.3 beta7.
+-- Miscellaneous Ebola fixes
+-- hyper-apropos update courtesy of Hrvoje Niksic
+-- Make lib-complete deal with compressed .el files when not using Mule.
+   (Patch based on code from Jonathan Doughty)
+-- Gnus refcard update courtesy of Vladimir Alexiev
+-- Various fixes from Kyle Jones
+-- ph.el-1.2.1.1 Courtesy of Oscar Figueiredo
+-- custom-1.9916
+-- `with-current-buffer', etc. ported from Emacs 20.1 courtesy of Hrvoje
+   Niksic
+-- Miscellaneous bug fixes
+
 to 20.3 beta6.
 -- Configure updates courtesy of Martin Buchholz
 -- Mule updates courtesy of MORIOKA Tomohiko
--- Lots of Ebola cleanup, but much remains.
--- Miscellaneous bug fixes.
+-- Lots of Ebola cleanup, but much remains
+-- Miscellaneous bug fixes
 
 to 20.3 beta5.
 -- Configure patches continued from Martin Buchholz
--- a/ChangeLog	Mon Aug 13 09:41:47 2007 +0200
+++ b/ChangeLog	Mon Aug 13 09:42:26 2007 +0200
@@ -1,3 +1,34 @@
+1997-06-14  Steven L Baur  <steve@altair.xemacs.org>
+
+	* XEmacs 20.3-beta7 is released.
+
+1997-06-12  Steven L Baur  <steve@altair.xemacs.org>
+
+	* etc/TUTORIAL (things): Synched by Hrvoje Niksic with previous
+	XEmacs version.
+
+1997-06-13  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* lisp/gnus/smiley.el (smiley-deformed-regexp-alist): Modify
+	regexp for horizontal smiley faces.
+	(smiley-nosey-regexp-alist): Add horizontal smiley faces.
+
+	* lisp/leim/quail.el (quail-get-translation): Don't use
+	`string-to-vector' for XEmacs.
+
+1997-06-13  Gary D. Foster  <Gary.Foster@corp.Sun.COM>
+
+	* lisp/modes/*.el: Removed all "\177" bindings that were
+	  previously commented out and normalized everything vis a vis
+	  'backspace and 'delete keysyms.
+	* lisp/packages/*.el: Normalized all the "\177" bindings
+	* lisp/modes/cperl-mode.el: Created cperl-electric-delete function 
+	  which is a "smart" version of the cperl-electric-backspace
+	  function (it honors the desired delete direction).  Bound it to
+	  'delete and the electric-backspace to 'backspace.
+	* lisp/packages/pending-del.el: Added cperl-electric-backspace and 
+	  cperl-electric-delete to the 'supersede list.
+
 1997-06-11  Steven L Baur  <steve@altair.xemacs.org>
 
 	* XEmacs 20.3-b6 is released.
--- a/etc/NEWS	Mon Aug 13 09:41:47 2007 +0200
+++ b/etc/NEWS	Mon Aug 13 09:42:26 2007 +0200
@@ -202,6 +202,23 @@
 ** The PATTERN argument to `split-string' is now optional and defaults
 to whitespace ("[ \f\t\n\r\v]+").
 
+** The new macro `with-current-buffer' lets you evaluate an expression
+conveniently with a different current buffer.  It looks like this:
+
+  (with-current-buffer BUFFER BODY-FORMS...)
+
+BUFFER is the expression that says which buffer to use.
+BODY-FORMS say what to do in that buffer.
+
+** The new primitive `save-current-buffer' saves and restores the
+choice of current buffer, like `save-excursion', but without saving or
+restoring the value of point or the mark.  `with-current-buffer'
+works using `save-current-buffer'.
+
+** The new macro `with-temp-file' lets you do some work in a new buffer and
+write the output to a specified file.  Like `progn', it returns the value
+of the last form.
+
 
 
 * Changes in XEmacs 20.2
--- a/etc/TUTORIAL	Mon Aug 13 09:41:47 2007 +0200
+++ b/etc/TUTORIAL	Mon Aug 13 09:42:26 2007 +0200
@@ -1,15 +1,20 @@
-Copyright (c) 1985 Free Software Foundation, Inc;  See end for conditions.
+Copyright (c) 1985, 1996 Free Software Foundation, Inc. See end for conditions.
+
 You are looking at the Emacs tutorial.
 
-Emacs commands generally involve the CONTROL key (sometimes labeled
-CTRL or CTL) or the META key (sometimes labeled EDIT or ALT).  Rather than
-write that in full each time, we'll use the following abbreviations:
+Emacs commands generally involve the CONTROL key (sometimes labelled
+CTRL or CTL) or the META key.  On some keyboards, the META key is
+labelled ALT or EDIT or something else (for example, on Sun keyboards,
+the diamond key to the left of the spacebar is META).  If you have no
+META key, you can use ESC instead.  Rather than write out META or
+CONTROL each time we want you to prefix a character, we'll use the
+following abbreviations:
 
  C-<chr>  means hold the CONTROL key while typing the character <chr>
 	  Thus, C-f would be: hold the CONTROL key and type f.
- M-<chr>  means hold the META or EDIT or ALT key down while typing <chr>.
-	  If there is no META, EDIT or ALT key, instead press and release the
-	  ESC key and then type <chr>.  We write <ESC> for the ESC key.
+ M-<chr>  means hold the META key down while typing <chr>.  If there
+	  is no META key, type <ESC>, release it, then type the
+	  character <chr>.
 
 Important note: to end the Emacs session, type C-x C-c.  (Two characters.)
 The characters ">>" at the left margin indicate directions for you to
@@ -39,9 +44,8 @@
 
 	C-v	Move forward one screenful
 	M-v	Move backward one screenful
-	C-l	Clear screen and redisplay all the text,
-		 moving the text around the cursor
-		 to the center of the screen.
+	C-l	Clear screen and redisplay everything
+		 putting the text near the cursor at the center.
 		 (That's control-L, not control-1.)
 
 >> Find the cursor, and note what text is near it.
@@ -209,17 +213,39 @@
 This should have scrolled the screen up by 8 lines.  If you would like
 to scroll it down again, you can give an argument to M-v.
 
-If you are using X Windows, there should be a tall rectangular area
-called a scroll bar at the left hand side of the Emacs window.  You
-can scroll the text by clicking the mouse in the scroll bar.
+If you are using the X Window system, there is probably a rectangular
+area called a scroll bar at the right hand side of the Emacs window.
+You can scroll the text by manipulating the scroll bar with the mouse.
 
 >> Try pressing the middle button at the top of the highlighted area
    within the scroll bar.  This should scroll the text to a position
    determined by how high or low you click.
 
->> Try moving the mouse up and down, while holding the middle button
-   pressed down.  You'll see that the text scrolls up and down as
-   you move the mouse.
+>> Move the mouse to a point in the scroll bar about three lines from
+the top, and click the left button a couple of times.
+
+
+* CURSOR CONTROL WITH AN X TERMINAL
+-----------------------------------
+
+If you have an X terminal, you will probably find it easier to use
+the keys on the keypad to control the cursor.  The left, right, up,
+and down arrow keys move in the expected direction; they function
+exactly like C-b, C-f, C-p, and C-n, but are easier to type and to
+remember.  You can also use C-left and C-right to move by words, and
+C-up and C-down to move by blocks (e.g.  paragraphs, if you're
+editing text).  If you have keys labelled HOME (or BEGIN) and END,
+they will take you to the beginning and end of a line, respectively,
+and C-home and C-end will move to the beginning and end of the file.
+If your keyboard has PgUp and PgDn keys, you can use them to move up
+and down a screenful at a time, like M-v and C-v.
+
+All of these commands can take numeric arguments, as described above.
+You can use a shortcut to enter these arguments: just hold down the
+CONTROL or META key and type the number. For example, to move 12
+words to the right, type C-1 C-2 C-right.  Note that it is very easy
+to type this because you do not have to release the CONTROL key
+between keystrokes.
 
 
 * WHEN EMACS IS HUNG
@@ -254,17 +280,24 @@
 question.  Normally, if you do not want to execute the disabled
 command, answer the question with "n".
 
->> Type <ESC> : (which is a disabled command),
+>> Type `C-x n p' (which is a disabled command),
    then type n to answer the question.
 
 
 * WINDOWS
 ---------
 
-Emacs can have several windows, each displaying its own text.  We will
-explain later on how to use multiple windows.  Right now we want to
-explain how to get rid of extra windows and go back to basic
-one-window editing.  It is simple:
+Emacs can have several windows, each displaying its own text.
+Note that "window" as used by Emacs does not refer to separate
+overlapping windows in the window system, but to separate panes
+within a single X window. (Emacs can also have multiple X
+windows, or "frames" in Emacs terminology.  This is described
+later.)
+
+At this stage it is better not to go into the techniques of
+using multiple windows.  But you do need to know how to get
+rid of extra windows that may appear to display help or
+output from certain commands.  It is simple:
 
 	C-x 1	One window (i.e., kill all other windows).
 
@@ -273,6 +306,13 @@
 other windows.
 
 >> Move the cursor to this line and type C-u 0 C-l.
+
+(Remember that C-l redraws the screen.  If you give a
+numeric argument to this command, it means "redraw the
+screen and put the current line that many lines from the
+top of the screen."  So C-u 0 C-l means "redraw the
+screen, putting the current line at the top.")
+
 >> Type Control-h k Control-f.
    See how this window shrinks, while a new one appears
    to display documentation on the Control-f command.
@@ -570,6 +610,67 @@
    It should ask you whether to save the buffer named TUTORIAL.
    Answer yes to the question by typing "y".
 
+* USING THE MENU
+----------------
+
+If you are on an X terminal, you will notice a menubar at the
+top of the Emacs screen.  You can use this menubar to access all
+the most common Emacs commands, such as "find file".  You will
+find this easier at first, because you don't need to remember
+the keystrokes necessary to access any particular command.  Once
+you are comfortable with Emacs, it will be easy to begin using
+the keyboard commands because each menu item with a
+corresponding keyboard command has the command listed next to
+it.
+
+Note that there are many items in the menubar that have no exact
+keyboard equivalents.  For example, the Buffers menu lists all
+of the available buffers in most-recently used order.  You can
+switch to any buffer by simply findings its name in the Buffers
+menu and selecting it.
+
+
+* USING THE MOUSE
+-----------------
+
+When running under X, Emacs is fully integrated with the mouse.
+You can position the text cursor by clicking the left button at
+the desired location, and you can select text by dragging the
+left mouse button across the text you want to select. (Or
+alternatively, click the left mouse button at one end of the
+text, then move to the other end and use Shift-click to select
+the text.)
+
+To kill some selected text, you can use C-w or choose the Cut
+item from the Edit menu.  Note that these are *not* equivalent:
+C-w only saves the text internally within Emacs (similar to C-k
+as described above), whereas Cut does this and also puts the
+text into the X clipboard, where it can be accessed by other
+applications.
+
+To retrieve text from the X clipboard, use the Paste item from
+the Edit menu.
+
+The middle mouse button is commonly used to choose items that
+are visible on the screen.  For example, if you enter Info (the
+on-line Emacs documentation) using C-h i or the Help menu, you
+can follow a highlighted link by clicking the middle mouse
+button on it.  Similarly, if you are typing a file name in
+(e.g. when prompted by "Find File") and you hit TAB to show the
+possible completions, you can click the middle mouse button on
+one of the completions to select it.
+
+The right mouse button brings up a popup menu.  The contents of
+this menu vary depending on what mode you're in, and usually
+contain a few commonly used commands, so they're easier to
+access.
+
+>> Press the right mouse button now.
+
+You will have to hold the button down in order to keep the
+menu up.
+
+
 * EXTENDING THE COMMAND SET
 ---------------------------
 
@@ -667,7 +768,7 @@
 The line immediately above the echo area it is called the "mode line".
 The mode line says something like this:
 
---**-Emacs: TUTORIAL          (Fundamental)--L670--58%----------------
+--**-XEmacs: TUTORIAL          (Fundamental)--L670--58%----------------
 
 This line gives useful information about the status of Emacs and
 the text you are editing.
@@ -759,6 +860,7 @@
 
 >> Move the cursor into the previous paragraph and type M-q.
 
+
 * SEARCHING
 -----------
 
@@ -981,7 +1083,8 @@
 ------------
 
 Remember, to exit Emacs permanently use C-x C-c.  To exit to a shell
-temporarily, so that you can come back to Emacs afterward, use C-z.
+temporarily, so that you can come back in, use C-z.  (under X, this
+iconifies the current Emacs frame.)
 
 This tutorial is meant to be understandable to all new users, so if
 you found something unclear, don't sit and blame yourself - complain!
@@ -992,6 +1095,7 @@
 
 This tutorial descends from a long line of Emacs tutorials
 starting with the one written by Stuart Cracraft for the original Emacs.
+Ben Wing updated the tutorial for X Windows.
 
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
--- a/etc/gnus-refcard.tex	Mon Aug 13 09:41:47 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-% Reference Card for (ding) Gnus, 3 twocolumn pages.
-% To be processed with latex 2.09
-\def\Guide{Card}\def\guide{card}
-\def\logoscale{0.25}
-\def\sec{\section*}
-\def\subsec{\subsection*}
-\def\subsubsec{\subsubsection*}
-\documentstyle{article}
-\textwidth 7.26in \textheight 10in \topmargin -1.0in
-% the same settings work for A4, although there is a bit of space at the
-% top and bottom of the page. 
-\oddsidemargin -0.5in \evensidemargin -0.5in
-\begin{document}
-\twocolumn\scriptsize\pagestyle{empty}
-\input{gnusref}
-
-% page 1, left column
-\Title
-\par
-\vspace{0.5\baselineskip}
-\Logo{refcard}
-\vspace*{\fill}
-\GroupLevels
-\GroupMode
-\pagebreak
-
-% page 1, right column
-\Notes
-\vspace*{\fill}
-\GroupCommands
-\pagebreak
-
-% page 2, left column
-\SummaryMode
-\Asubmap
-\Bsubmap
-\Gsubmap
-\Hsubmap
-\Tsubmap
-\pagebreak
-
-% page 2, right column
-\Msubmap
-\Marks
-\pagebreak
-
-% page 3
-\Osubmap
-\Ssubmap
-\Xsubmap
-\Vsubmap
-\SortSummary
-\Wsubmap
-\Zsubmap
-\ArticleMode
-\ServerMode
-
-% page 4
-\BrowseServer
-\pagebreak
-\onecolumn
-\vspace*{\fill}
-\CopyRight
-
-\end{document}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnusrefcard/Makefile	Mon Aug 13 09:42:26 2007 +0200
@@ -0,0 +1,62 @@
+# -*- mode: makefile; tab-width: 4 -*-
+
+###### variables
+sources	= README Makefile makelogo gnuslogo.ps gnusref.tex \
+	quickref.tex refcard.tex booklet.tex bk-a4.tex bk-lt.tex
+targets	= quickref.ps refcard.ps $(bk-lt) $(bk-a4)
+bk-lt	= bk-lt-d.ps bk-lt-s1.ps bk-lt-s2.ps
+bk-a4	= bk-a4-d.ps bk-a4-s1.ps bk-a4-s2.ps
+ x-lt = 10.8in
+ y-lt =  5.5in
+x2-lt = -2.3in
+y2-lt = 11.0in
+ x-a4 = 27.4cm
+ y-a4 = 14.85cm
+x2-a4 = -6.3cm
+y2-a4 = 29.7cm
+  first = -3L($(x-$*),0)+0L($(x-$*),$(y-$*))
+ second = 1R($(x2-$*),$(y2-$*))+-2R($(x2-$*),$(y-$*))
+reverse = -1L($(x-$*),0)+2L($(x-$*),$(y-$*))
+
+###### user targets
+all: $(targets)
+quickref: quickref.ps
+refcard: refcard.ps
+booklet: bk-lt bk-a4
+bk-lt: bk-lt-d bk-lt-s
+bk-a4: bk-a4-d bk-a4-s
+bk-lt-d: bk-lt-d.ps
+bk-lt-s: bk-lt-s1.ps bk-lt-s2.ps
+bk-a4-d: bk-a4-d.ps
+bk-a4-s: bk-a4-s1.ps bk-a4-s2.ps
+clean:
+	-rm -f *.dvi *.aux *.log *.toc gnuslogo.???* bk-??.ps $(targets)
+
+###### internal targets
+quickref.ps: quickref.tex gnuslogo.quickref
+	latex quickref.tex
+	dvips quickref.dvi
+refcard.ps: refcard.tex gnusref.tex gnuslogo.refcard
+	latex refcard.tex
+	dvips refcard.dvi
+bk-lt.ps bk-a4.ps: bk-%.ps: bk-%.tex booklet.tex gnusref.tex gnuslogo.booklet
+	latex bk-$*.tex; latex bk-$*.tex  # twice to make the TOC
+	dvips bk-$*.dvi
+gnuslogo.quickref gnuslogo.refcard gnuslogo.booklet: gnuslogo.%: gnuslogo.ps
+	./makelogo $*
+bk-lt-d.ps bk-a4-d.ps: bk-%-d.ps: bk-%.ps
+	pstops '4:$(first),$(second)' bk-$*.ps bk-$*-d.ps
+bk-lt-s1.ps bk-a4-s1.ps: bk-%-s1.ps: bk-%.ps
+	pstops '4:$(first)' bk-$*.ps bk-$*-s1.ps
+bk-lt-s2.ps bk-a4-s2.ps: bk-%-s2.ps: bk-%.ps
+	pstops '4:$(reverse)' bk-$*.ps bk-$*-s2.ps
+
+dist = /usr/menaik/ftp/pub/oolog/gnus
+dist: $(sources) $(targets)
+	-mkdir $(dist); 
+	-rm -f $(dist)/*
+	tar cf - $(sources) | gzip > $(dist)/gnusref.tar.gz
+	for F in $(targets); do gzip -c $$F > $(dist)/$$F.gz; done
+	cp README $(dist)/README
+	chmod ogu+r $(dist) $(dist)/*
+	ls -l $(dist)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnusrefcard/README	Mon Aug 13 09:42:26 2007 +0200
@@ -0,0 +1,53 @@
+<URL:ftp://ftp.cs.ualberta.ca/pub/oolog/gnus/>
+
+(ding) Gnus Reference Card
+--------------------------
+Vladimir Alexiev <vladimir@cs.ualberta.ca>
+Suggestions and corrections are welcome.
+
+This directory contains reference materials for the Emacs newsreader Gnus. 
+Three versions of the reference material are provided:
+ - 16-page booklet (\small font)
+ - 5-page 2-column reference card (\footnotesize font which is quite small)
+ - 1-page 2-column quick refcard (\scriptsize font which is even smaller)
+The first two contain all Gnus commands; the last contains only the
+most-often used commands. 
+ The booklet is provided for single- and double-sided printers, in paper
+formats Letter and A4. The other two cards can be printed on both Letter
+and A4 printers.
+
+The following files are available:
+  bk-lt-d.ps.gz   booklet, Letter paper, double-sided
+  bk-lt-s1.ps.gz  booklet, Letter paper, single-sided, first run
+  bk-lt-s2.ps.gz  booklet, Letter paper, single-sided, second run
+  bk-a4-d.ps.gz   booklet, A4 paper, double-sided
+  bk-a4-s1.ps.gz  booklet, A4 paper, single-sided, first run
+  bk-a4-s2.ps.gz  booklet, A4 paper, single-sided, second run
+  refcard.ps.gz   reference card
+  quickref.ps.gz  quick refcard
+
+To produce the booklet:
+1) Print the booklet.
+ a) If you have a double-sided printer, 
+    - just print bk-??-d.ps
+ b) If you have a single-sided printer, things are more complicated
+    - leave only one paper tray in your printer
+    - print bk-??-s1.ps
+    - reload the resulting 4-sheet stack back into the printer. Don't
+      rearrange the stack, just turn it upside down.
+    - print bk-??-s2.ps
+2) **Important** Arrange the printed stack in the correct order.
+   The pages are numbered, so you can't make a mistake.
+3) Fold the booklet in two and staple it in the middle. Enjoy! 
+
+If you want to make the files yourself, you need the following source files: 
+  makelogo gnuslogo.ps gnusref.tex refcard.tex quickref.tex
+  booklet.tex bk-a4.tex bk-lt.tex
+which are included in the archive gnusref.tar.gz,
+and the following programs
+  GNU make 3.70
+  LaTeX 2.09, TeX 3.141
+  dvips 5.55
+  pstops 1.p13 (part of the package "psutils" by 
+    Angus Duggan <angus@harlequin.co.uk>)
+Earlier versions might also work.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnusrefcard/bk-a4.tex	Mon Aug 13 09:42:26 2007 +0200
@@ -0,0 +1,9 @@
+% Reference Booklet for (ding) Gnus, A4 format.
+% To be processed with latex 2.09
+\documentstyle{article}
+\textwidth 4.9in \textheight 7.35in \topmargin -1.0in
+\oddsidemargin -0.5in \evensidemargin -0.5in
+\begin{document}
+\small%\footnotesize
+\input{booklet}
+\end{document}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnusrefcard/bk-lt.tex	Mon Aug 13 09:42:26 2007 +0200
@@ -0,0 +1,9 @@
+% Reference Booklet for (ding) Gnus, Letter format.
+% To be processed with latex 2.09
+\documentstyle{article}
+\textwidth 4.5in \textheight 7.5in \topmargin -1.0in
+\oddsidemargin -0.5in \evensidemargin -0.5in
+\begin{document}
+\small%\footnotesize
+\input{booklet}
+\end{document}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnusrefcard/booklet.tex	Mon Aug 13 09:42:26 2007 +0200
@@ -0,0 +1,67 @@
+% include file for the Reference Booklet (16 pages).
+\def\Guide{Booklet}\def\guide{booklet}
+\def\logoscale{0.5}
+\def\sec{\section}
+\def\subsec{\subsection}
+\def\subsubsec{\subsubsection}
+\def\blankpage{\vspace*{\fill}\par
+%\centerline{(This page intentionally left blank.)}
+\par\vspace*{\fill}\pagebreak}
+
+\input{gnusref}
+
+\setcounter{page}{0}
+\thispagestyle{empty}
+\vspace*{\fill}
+\Title
+\vspace{0.4in}
+\Logo{booklet}
+\vspace*{\fill}
+\pagebreak
+
+\tableofcontents
+\pagebreak
+\Notes
+\GroupLevels
+\Marks
+\General
+\ServerMode
+\BrowseServer
+\ArticleMode
+\pagebreak
+
+\GroupMode
+\ListGroups     
+\CreateGroups   
+\SortGroups     
+\SOUP           
+\MarkGroups     
+\Unsubscribe    
+\GroupTopics    
+\SummaryMode    
+\SortSummary    
+\Article        
+\MailGroup      
+\Limit          
+\GotoArticle    
+\MarkArticles   
+\MarkScore      
+\ProcessMark    
+\OutputArticles 
+\Send           
+\Exit           
+\Thread         
+\Score          
+\Wash           
+\Hide           
+\Highlight      
+\Extract        
+\PickAndRead    
+
+%\pagebreak
+%\sec{Personal Notes}
+%\blankpage
+
+\thispagestyle{empty}
+\vspace*{\fill}
+\CopyRight
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnusrefcard/gnuslogo.ps	Mon Aug 13 09:42:26 2007 +0200
@@ -0,0 +1,1055 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: gnuslogo1.ps
+%%Creator: XV Version 3.00  Rev: 3/30/93  -  by John Bradley
+%%BoundingBox: 0 0 493 505
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% define string to hold a scanline's worth of data
+/pix 62 string def
+
+% lower left corner
+0 0 translate
+
+% size of image (on paper, in 1/72inch coords)
+493.0 505.0 scale
+
+% dimensions of data
+493 505 1
+
+% mapping matrix
+[493 0 0 -505 0 505]
+
+{currentfile pix readhexstring pop}
+image
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff01fffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff8003ffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff0000ffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff8000007ffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000003ffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffe0000000ffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff000000003fff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff000000000fff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffc0000000007ff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff80000000003ff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff00000000001ff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffe00000000000ff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffc00000000000ff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffff8000000000007f8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffff0000000000003f8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffff0000000000003f8
+fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffe0000000000001f8
+fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffc0000000000000f8
+ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffc0000000000000f8
+ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff8000000000000078
+fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000000000000038
+fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffe0000000000000038
+fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffe0000000000000038
+fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffc0000000000000018
+ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffc0000000000000018
+ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff
+fffffffffffffffffffffffffffffffffff80000000000000018
+ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff
+fffffffffffffffffffffffffffffffffff80000000000000008
+ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff
+fffffffffffffffffffffffffffffffffff00000000000000008
+fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff
+fffffffffffffffffffffffffffffffffff00000000000000008
+fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffe00000000000000008
+fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffe00000000000000008
+fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffc00000000000000000
+ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff
+ffffffffffffffffffffffffffffffffffc00000000000000000
+ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff
+ffffffffffffffffffffffffffffffffff800000000000000000
+ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff
+ffffffffffffffffffffffffffffffffff800000000000000000
+ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffff000040000000000000
+fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff
+ffffffffffffffffffffffffffffffffff0007ffc00000000000
+fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffe001ffffc0000000000
+fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff
+fffffffffffffffffffffffffffffffffc003ffffe0000000000
+fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff
+fffffffffffffffffffffffffffffffffc007fffffc000000000
+fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff
+fffffffffffffffffffffffffffffffff800fffffff000000000
+ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff
+fffffffffffffffffffffffffffffffff801fffffff800000000
+ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff
+fffffffffffffffffffffffffffffffff003ffffffff00000000
+ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff
+fffffffffffffffffffffffffffffffff007ffffffff00000000
+ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff
+ffffffffffffffffffffffffffffffffe00fffffffff80000000
+fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff
+ffffffffffffffffffffffffffffffffe01fffffffffc0000008
+fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff
+ffffffffffffffffffffffffffffffffc03fffffffffc0000008
+fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff
+ffffffffffffffffffffffffffffffffc07ffffffffff0000000
+fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff
+ffffffffffffffffffffffffffffffff807ffffffffff0000000
+fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff
+ffffffffffffffffffffffffffffffff80fffffffffff0000008
+fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff
+ffffffffffffffffffffffffffffffff81fffffffffff8000008
+fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff
+ffffffffffffffffffffffffffffffff01fffffffffff8000008
+ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff
+ffffffffffffffffffffffffffffffff03fffffffffffc000008
+ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff
+fffffffffffffffffffffffffffffffe03fffffffffffc000008
+ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff
+fffffffffffffffffffffffffffffffe07fffffffffffe000008
+ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff
+fffffffffffffffffffffffffffffffe07fffffffffffe000008
+ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff
+fffffffffffffffffffffffffffffffe0ffffffffffffe000008
+ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff
+fffffffffffffffffffffffffffffffc0ffffffffffffe000008
+ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff
+fffffffffffffffffffffffffffffffc1fffffffffffff000008
+ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff
+fffffffffffffffffffffffffffffffc3fffffffffffff000008
+ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff
+fffffffffffffffffffffffffffffff87fffffffffffff000008
+ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff
+fffffffffffffffffffffffffffffff87fffffffffffff000008
+ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff
+fffffffffffffffffffffffffffffff87fffffffffffff000008
+ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff
+fffffffffffffffffffffffffffffff8ffffffffffffff000008
+ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff
+fffffffffffffffffffffffffffffffcffffffffffffff000008
+fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff
+ffffffffffffffffffffffffffffe7fdffffffffffffff000008
+fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff
+ffffffffffffffffffffffffffffe7fdffffffffffffff000008
+fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff
+ffffffffffffffffffffffffffffc7ffffffffffffffff000008
+fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff
+fffffffffeffffffffffffffffff87ffffffffffffffff000008
+f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff
+fffffffffcffffffffffffffffff87ffffffffffffffff000008
+f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff
+fffffffff8ffffffffffffffffff07ffffffffffffffff000008
+f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff
+fffffffff8fffffffffffffffffe0fffffffffffffffff000008
+f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff
+fffffffff0fffffffffffffffffe0fffffffffffffffff000018
+e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff
+fffffffff0fffffffffffffffffc0fffffffffffffffff000018
+e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff
+ffffffffe0fffffffffffffffffc1fffffffffffffffff000018
+c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff
+ffffffffe0fffffffffffffffff81fffffffffffffffff000018
+c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff
+ffffffffc0fffffffffffffffff83fffffffffffffffff000018
+800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff
+ffffffff01fffffffffffffffff03fffffffffffffffff000038
+800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff
+ffffffff01fffffffffffffffff03fffffffffffffffff800038
+00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff
+fffffffe03ffffffffffffffffe07fffffffffffffffff800038
+00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff
+fffffffc03ffffffffffffffffe07fffffffffffffffff800038
+00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff
+fffffff803ffffffffffffffffc07fffffffffffffffff800038
+00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff
+fffffff007ffffffffffffffffc0ffffffffffffffffff800038
+0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff
+fffffff007ffffffffffffffff80ffffffffffffffffff800078
+0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff
+ffffffc00fffffffffffffffff81ffffffffffffffffff800078
+8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff
+ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8
+8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff
+ffffff801fffffffffffffffff03ffffffffffffffffff8000f8
+c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff
+fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8
+e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff
+fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8
+f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff
+fffff0003ffffffffffffffff80fffffffffffffffffff8000f8
+f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff
+ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8
+f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f
+ffff00007fffffffffffffffe01fffffffffffffffffff0001f8
+fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007
+fffc00007fffffffffffffffc01fffffffffffffffffff0001f8
+fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000
+ffe000007ffffbffffffffff801fffffffffffffffffff0001f8
+fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000
+00000000fffff3ffffffffff003fffffffffffffffffff0001f8
+fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000
+00000001fffff1fffffffffe003fffffffffffffffffff0003f8
+ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000
+00000001ffffe1fffffffffc007fffffffffffffffffff0003f8
+ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000
+00000003ffffe0fffffffff0007fffffffffffffffffff0003f8
+ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000
+00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8
+ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000
+00000007ffffc07fffffff8000ffffffffffffffffffff0003f8
+fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000
+00000007ffff803fffffff0000fffffffffffffffffffe0007f8
+fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000
+00000007ffff801ffffffc0001fffffffffffffffffffe0007f8
+fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000
+0000000fffff000ffffff80003fffffffffffffffffffe0007f8
+fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000
+0000000fffff0007ffffe00003fffffffffffffffffffe0007f8
+ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000
+0000001ffffe0001ffff800007fffffffffffffffffffe000ff8
+ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000
+0000001ffffe0000fffc000007fffffffffffffffffffe000ff8
+ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000
+0000003ffffe0000000000000ffffffffffffffffffffe000ff8
+fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000
+0000003ffffc0000000000000ffffffffffffffffffffe000ff8
+fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000
+0000007ffff80000000000001ffffffffffffffffffffe001ff8
+fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000
+0000007ffff80000000000001ffffffffffffffffffffe001ff8
+fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000
+000000fffff80000000000003ffffffffffffffffffffc001ff8
+fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000
+000003fffff00000000000007ffffffffffffffffffffc001ff8
+fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000
+000007ffffe00000000000007ffffffffffffffffffffe003ff8
+fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000
+000007ffffe0000000000000fffffffffffffffffffffc003ff8
+ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000
+00001fffffc0000000000001fffffffffffffffffffffc003ff8
+ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000
+00001fffffc0000000000003fffffffffffffffffffffc003ff8
+ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000
+00003fffff80000000000003fffffffffffffffffffffc007ff8
+ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000
+00007fffff80000000000007fffffffffffffffffffffc007ff8
+ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000
+0000ffffff0000000000000ffffffffffffffffffffffc007ff8
+fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000
+0001ffffff0000000000001ffffffffffffffffffffffc007ff8
+fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000
+0003fffffe0000000000001ffffffffffffffffffffff800fff8
+fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000
+0007fffffe0000000000003ffffffffffffffffffffff800fff8
+fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000
+001ffffffc0000000000007ffffffffffffffffffffff800fff8
+fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000
+003ffffffc000000000000fffffffffffffffffffffff800fff8
+ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000
+00fffffff8000000000003fffffffffffffffffffffff001fff8
+ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000
+03fffffff8000000000003fffffffffffffffffffffff001fff8
+ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000
+07fffffff0000000000007fffffffffffffffffffffff001fff8
+ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000
+3ffffffff000000000000ffffffffffffffffffffffff003fff8
+ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f
+fffffffff000000000003ffffffffffffffffffffffff003fff8
+ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffff800000000007ffffffffffffffffffffffff003fff8
+fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffff80000000000ffffffffffffffffffffffffe003fff8
+fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffc0000000003ffffffffffffffffffffffffe007fff8
+fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffe0000000007ffffffffffffffffffffffffe007fff8
+fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffe000000000fffffffffffffffffffffffffe00ffff8
+fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff000000001fffffffffffffffffffffffffe00ffff8
+ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff
+ffffffffff800000007fffffffffffffffffffffffffc00ffff8
+ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff
+ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8
+ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff
+ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8
+ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff
+fffffffffff800001fffffffffffffffffffffffffffc01ffff8
+ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff
+fffffffffffe00007fffffffffffffffffffffffffffc01ffff8
+ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff
+ffffffffffff8003ffffffffffffffffffffffffffff801ffff8
+ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff803ffff8
+fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff803ffff8
+fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff803ffff8
+fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff007ffff8
+fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff007ffff8
+fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff007ffff8
+fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffe00fffff8
+ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffe00fffff8
+ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffe00fffff8
+ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffe00fffff8
+ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffe01fffff8
+ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffc01fffff8
+ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffc01fffff8
+ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffc01fffff8
+fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffc03fffff8
+fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffff803fffff8
+fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffff803fffff8
+fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffff007fffff8
+fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffff007fffff8
+fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffff007fffff8
+ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
+ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
+ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
+ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffe01ffffff8
+ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
+ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
+ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffc03ffffff8
+fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff803ffffff8
+fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff803ffffff8
+fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff807ffffff8
+fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff807ffffff8
+fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff007ffffff8
+fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff00fffffff8
+fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff00fffffff8
+ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe01fffffff8
+ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe01fffffff8
+ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe01fffffff8
+ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe03fffffff8
+ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe03fffffff8
+ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffc07fffffff8
+ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffc07fffffff8
+fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff807fffffff8
+fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff807fffffff8
+fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff80ffffffff8
+fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff80ffffffff8
+fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff01ffffffff8
+fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff01ffffffff8
+fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff01ffffffff8
+fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffe01ffffffff8
+fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
+ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
+ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
+ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
+ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
+ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
+ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
+ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff80fffffffff8
+ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff81fffffffff8
+ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff81fffffffff8
+ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff01fffffffff8
+ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff03fffffffff8
+ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffe03fffffffff8
+fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffe03fffffffff8
+fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffe03fffffffff8
+fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffe07fffffffff8
+fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffc07fffffffff8
+fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffc07fffffffff8
+fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
+fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
+fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff80ffffffffff8
+fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff80ffffffffff8
+fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff00ffffffffff8
+fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff01ffffffffff8
+fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff01ffffffffff8
+fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffe01ffffffffff8
+ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffe03ffffffffff8
+ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff
+fffffffffffffffffffdffffffffffffffffffe03ffffffffff8
+ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff
+fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8
+ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff
+fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
+fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff
+fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
+fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff
+fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
+fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff
+ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8
+ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff
+ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
+ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
+ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
+ffffffffffffffffff03ffffffffffffffffff00fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
+ffffffffffffffffff03ffffffffffffffffff01fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
+ffffffffffffffffff07ffffffffffffffffff01fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
+fffffffffffffffffe07fffffffffffffffffe01fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
+fffffffffffffffffc07fffffffffffffffffe03fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
+fffffffffffffffffc07fffffffffffffffffc03fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
+fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
+fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
+fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
+fffffffffffffffff03ffffffffffffffffff807fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
+ffffffffffffffffe01ffffffffffffffffff807fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
+ffffffffffffffffe03ffffffffffffffffff807fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
+ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
+ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
+ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff
+ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
+ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
+fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
+fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
+fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff
+fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff
+fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff
+fffffffffffffff807ffffffffffffffffffc03ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffff807ffffffffffffffffff803ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffff00fffffffffffffffffff803ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffff00fffffffffffffffffff807ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffe01fffffffffffffffffff807ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffe03fffffffffffffffffff807ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffc03fffffffffffffffffff807ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff807fffffffffffffffffff00fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff807fffffffffffffffffff00fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffff00fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00fffffffffffffffffffe00fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffe01fffffffffffffffffffe01fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffe03fffffffffffffffffffe01fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffc03fffffffffffffffffffc01fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffc07fffffffffffffffffffc01fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffff807fffffffffffffffffffc03fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffff00ffffffffffffffffffffc03fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffff00ffffffffffffffffffff803fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffc03ffffffffffffffffffff807fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffc03ffffffffffffffffffff007fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff807ffffffffffffffffffff007fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff807ffffffffffffffffffff007fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00fffffffffffffffffffff007fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff
+fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
+fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
+fffffffffff803ffffffffffffffffffffc00ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff
+fffffffffff807ffffffffffffffffffffc00ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff
+fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff
+fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff
+ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
+ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
+ffffffffff801fffffffffffffffffffff801ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
+ffffffffff803fffffffffffffffffffff801ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff
+ffffffffff003fffffffffffffffffffff803ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff
+fffffffffe007fffffffffffffffffffff803ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff
+fffffffffc007fffffffffffffffffffff003ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff
+fffffffffc00ffffffffffffffffffffff003ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
+fffffffff800ffffffffffffffffffffff003ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
+fffffffff801ffffffffffffffffffffff003ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff
+fffffffff803ffffffffffffffffffffff007ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff
+fffffffff003fffffffffffffffffffffe007ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff
+ffffffffe007fffffffffffffffffffffe007ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff
+ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff
+ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
+ffffffff800ffffffffffffffffffffffe00fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
+ffffffff000ffffffffffffffffffffffe00fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff
+fffffffe001ffffffffffffffffffffffe00fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
+fffffffc003ffffffffffffffffffffffe00fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
+9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff
+0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
+07fffff0007ffffffffffffffffffffffc01fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
+07ffffe000fffffffffffffffffffffffc01fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8
+03ffffc000fffffffffffffffffffffffc01fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0
+03ffff8001fffffffffffffffffffffff801fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0
+01ffff0003fffffffffffffffffffffff803fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
+00fffe0003fffffffffffffffffffffff803fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
+00fffe0003fffffffffffffffffffffff803fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0
+003ffc0007fffffffffffffffffffffff003fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80
+001fe0001ffffffffffffffffffffffff003fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00
+000fc0001ffffffffffffffffffffffff007fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00
+000000001ffffffffffffffffffffffff007fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00
+000000003ffffffffffffffffffffffff007fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00
+000000003ffffffffffffffffffffffff007fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800
+000000007fffffffffffffffffffffffe007fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800
+000000007fffffffffffffffffffffffe007fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000
+00000001ffffffffffffffffffffffffe007fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000
+00000001ffffffffffffffffffffffffe007fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000
+00000001ffffffffffffffffffffffffe007fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000
+00000003ffffffffffffffffffffffffc00ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000
+00000003ffffffffffffffffffffffffc00ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000
+00000007ffffffffffffffffffffffffc00ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000
+0000000fffffffffffffffffffffffffc01ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000
+0000001fffffffffffffffffffffffffc01ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000
+0000001fffffffffffffffffffffffffc01ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000
+0000003fffffffffffffffffffffffffc01ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000
+0000007fffffffffffffffffffffffff801ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000
+0000007fffffffffffffffffffffffff801ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000
+000000ffffffffffffffffffffffffff801ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000
+000001ffffffffffffffffffffffffff801ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
+000001ffffffffffffffffffffffffff801ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
+000003ffffffffffffffffffffffffff801ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000
+000003ffffffffffffffffffffffffff801ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000
+000007ffffffffffffffffffffffffff803ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000
+00000fffffffffffffffffffffffffff003ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000
+00000fffffffffffffffffffffffffff803ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000
+00001fffffffffffffffffffffffffff803ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200
+00003fffffffffffffffffffffffffff007ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700
+00007fffffffffffffffffffffffffff00fffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80
+0000ffffffffffffffffffffffffffff00fffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80
+0001ffffffffffffffffffffffffffff00fffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0
+0001ffffffffffffffffffffffffffff00fffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0
+0003ffffffffffffffffffffffffffff01fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0
+0007ffffffffffffffffffffffffffff01fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0
+0007ffffffffffffffffffffffffffff01fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8
+001fffffffffffffffffffffffffffff07fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc
+007fffffffffffffffffffffffffffff07fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe
+00ffffffffffffffffffffffffffffff07fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff
+dfffffffffffffffffffffffffffffff0ffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff
+fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff
+fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff
+fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff
+fffffffffffffffffffffffffffffffe3ffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff
+ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff
+ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnusrefcard/gnusref.tex	Mon Aug 13 09:42:26 2007 +0200
@@ -0,0 +1,814 @@
+% -*- mode:LaTeX; eval:(setq LaTeX-version "2"); truncate-lines:t; -*-
+% include file for the Gnus refcard and booklet
+\def\version{5.4.56}
+\def\date{12 June 1997}
+\def\author{Vladimir Alexiev $<$vladimir@cs.ualberta.ca$>$}
+\raggedbottom\raggedright
+\newlength{\logowidth}\setlength{\logowidth}{6.861in}
+\newlength{\logoheight}\setlength{\logoheight}{7.013in}
+\newlength{\keycolwidth}
+\newenvironment{keys}[1]% #1 is the widest key
+  {\nopagebreak%\noindent%
+   \settowidth{\keycolwidth}{#1}%
+   \addtolength{\keycolwidth}{\tabcolsep}%
+   \addtolength{\keycolwidth}{-\columnwidth}%
+   \begin{tabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}%
+  {\end{tabular}\\}
+\catcode`\^=12 % allow ^ to be typed literally
+\catcode`\~=12 % allow ~ to be typed literally
+\newcommand{\B}[1]{{\bf#1})}    % bold l)etter
+
+\def\Title{
+\begin{center}
+{\bf\LARGE Gnus \version\ Reference \Guide\\}
+%{\normalsize \Guide\ version \refver}
+\end{center}
+}
+
+\newcommand\Logo[1]{\centerline{
+\makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight
+{\vfill\special{psfile=gnuslogo.#1}}\vspace{-\baselineskip}}}}
+
+\def\CopyRight{
+\begin{center}
+Copyright \copyright\ 1995 Free Software Foundation, Inc.\\*
+Copyright \copyright\ 1995-97 \author.\\*
+Created from the Gnus manual Copyright \copyright\ 1994-97 Lars Magne
+Ingebrigtsen.\\*
+and the Emacs Help Bindings feature (C-h b).\\*
+Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\*
+\end{center}
+
+Permission is granted to make and distribute copies of this reference
+\guide{} provided the copyright notice and this permission are preserved on
+all copies.  Please send corrections, additions and suggestions to the
+above email address. \Guide{} last edited on \date.
+}
+
+\def\Notes{\subsec{Notes}{\samepage
+Gnus is big. Currently it has some 633 interactive (user-callable)
+commands. Many of these commands have more than one binding. In order to save
+space, every function is listed only once in this \guide, under the ``more
+logical'' binding. Alternative bindings are given in parentheses at the
+beginning of the description. This \guide{} describes only key-bindings, you
+{\em should\/} at least browse the manual to discover many great features
+
+Many Gnus commands use the numeric prefix. Normally you enter a prefix by
+holding the Meta key and typing a number, but in most Gnus modes you don't
+need to use Meta since the digits are not self-inserting. The prefixed
+behavior of commands is given in [brackets]. Often the prefix is used to
+specify:
+
+\quad [distance] How many objects to move the point over.
+
+\quad [scope] How many objects to operate on (including the current one).
+
+\quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it
+determines how many objects to operate on (negative means backwards). Else if
+transient-mark-mode or zmacs-regions is set and the region is active, operate
+on the region. Else if there are some objects marked with the process mark \#,
+operated on them. Else operate only on the current object.
+
+\quad [level] A group subscribedness level. Only groups with a lower or
+equal level will be affected by the operation. If no prefix is given,
+`gnus-group-default-list-level' is used.  If
+`gnus-group-use-permanent-levels', then a prefix to the `g' and `l'
+commands will also set the default level.
+
+\quad [score] An article score. If no prefix is given,
+`gnus-summary-default-score' is used.
+
+\quad [GL rating] Give a GroupLens rating (1-5) to the current article before
+moving to another article. 
+
+%Some functions were not yet documented at the time of creating this
+%\guide and are clearly indicated as such.
+}}
+
+\def\GroupLevels{\subsec{Group Subscribedness Levels}{\samepage
+The table below assumes that you use the default Gnus levels.
+Fill your user-specific levels in the blank cells.\\*
+\begin{tabular}{|c|l|l|}
+\hline
+Level & Groups & Status \\
+\hline
+1 & mail groups                &              \\
+2 & mail groups                &              \\
+3 & default subscribed level   & subscribed   \\
+4 &                            &              \\
+5 & default list level         &              \\
+\hline
+6 & default unsubscribed level & unsubscribed \\
+7 &                            &              \\
+\hline             
+8 &                            & zombies      \\
+\hline             
+9 &                            & killed       \\
+\hline
+\end{tabular}
+}}
+
+\def\Marks{\subsec{Mark Indication Characters}{\samepage
+If a command directly sets a mark, it is shown in parentheses.\\*
+\newlength{\markcolwidth}
+\settowidth{\markcolwidth}{` '}% widest character
+\addtolength{\markcolwidth}{4\tabcolsep}
+\addtolength{\markcolwidth}{-\columnwidth}
+\newlength{\markdblcolwidth}
+\setlength{\markdblcolwidth}{\columnwidth}
+\addtolength{\markdblcolwidth}{-2\tabcolsep}
+\begin{tabular}{|c|p{-\markcolwidth}|}
+\hline
+\multicolumn{2}{|p{\markdblcolwidth}|}
+{{\bf ``Read'' Marks.}
+  All these marks appear in the first column of the summary line, and so
+  are mutually exclusive.}\\ 
+\hline
+` ' & (M-u, M SPC, M c) Not read.\\
+!   & (!, M t) Ticked (interesting).\\ %(M !)
+?   & (?, M ?) Dormant (only followups are interesting).\\
+E   & (E, M e) {\bf Expirable}. Only has effect in mail groups.\\ %(M x)
+\hline\hline
+\multicolumn{2}{|p{\markdblcolwidth}|}{The marks below mean that the article
+  is read (killed, uninteresting), and have more or less the same effect.
+  Some commands however explicitly differentiate between them (e.g.{} M
+  M-C-r, adaptive scoring).}\\
+\hline
+r   & (d, M d, M r) Deleted (marked as {\bf read}).\\
+C   & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\
+F   & (O s; G s b) SOUPed.\\
+G   & (S C, C) Canceled (only for your own articles).\\
+O   & {\bf Old} (marked read in a previous session).\\
+K   & (k, M k; C-k, M K) {\bf Killed}.\\
+M   & Marked by duplicate elimination.\\
+Q   & Divined through the building of sparse threads.\\
+R   & {\bf Read} (actually viewed).\\
+X   & Killed by a kill file.\\
+Y   & Killed due to low score.\\
+\hline
+%\multicolumn{2}{c}{\vspace{0.2ex}}\\
+\hline
+\multicolumn{2}{|p{\markdblcolwidth}|}
+{{\bf Other marks}}\\
+\hline
+\#  & (\#, M P p) Processable (will be affected by the next operation).\\ %(M \#)
+*   & (*) Persistent (or cached for some other reason).\\
+A   & {\bf Answered} (followed-up or replied).\\
+S   & (O {\bf x}) {\bf Saved}.\\
++   & Over default score.\\
+$-$ & Under default score.\\
+=   & Has children (thread underneath it). Add `\%e' to `gnus-summary-line-format'.\\
+\hline
+\end{tabular}
+}}
+
+\def\General{\sec{(H) General and Help Commands}{\samepage
+These commands work everywhere.
+\begin{keys}{C-c C-i}
+C-c C-i & Go to the Gnus on-line {\bf info}.\\
+C-c C-b & Send a Gnus {\bf bug} report.\\
+\end{keys}
+
+These commands work in Summary mode, and most also work in Group mode.\\*
+\begin{keys}{H d}
+H d     & (C-c C-d) {\bf Describe} this group. [Prefix: re-read the description
+from the server.]\\ 
+H f     & Try to fetch the {\bf FAQ} for this group using ange-ftp.\\
+H h     & Give a very short {\bf help} message.\\
+H i     & (C-c C-i) Go to the Gnus online {\bf info}.\\
+H v     & Display the Gnus {\bf version} number.\\
+\end{keys}}}
+
+\def\GroupMode{\sec{Group Mode}
+\begin{keys}{C-c M-C-x}
+RET     & (=) Select this group [Prefix: how many (read) articles to fetch.
+          Positive: newest articles, negative: oldest ones, C-u: ask number]. 
+          Also: fold/unfold a topic.\\ 
+SPC     & Select this group and display the first unread article [Same
+          prefix as above]. Also: fold/unfold a topic.\\ 
+M-RET   & Select this group quickly (no scoring, expunging, etc).\\
+M-SPC   & Select this group, and don't hide dormant articles.\\
+M-C-RET & Select this group ephemerally: no processing and no permanent effect.\\
+?       & Give a very short help message.\\
+$<$     & Go to the beginning of the Group buffer.\\
+$>$     & Go to the end of the Group buffer.\\
+,       & Jump to the lowest-level group with unread articles.\\
+.       & Jump to the first group with unread articles.\\
+^       & Enter the Server buffer mode.\\
+a       & Post an {\bf article} to a group.\\
+b       & Find {\bf bogus} groups and delete them.\\
+c       & Mark all unticked articles in this group as read ({\bf catch-up}).
+[p/p]\\ 
+g       & Check the server for new articles ({\bf get}). [level]\\
+j       & {\bf Jump} to a specified group (may even be killed).\\
+m       & {\bf Mail} a message to someone.\\
+n       & Go to the {\bf next} group with unread articles. [distance]\\
+p       & (DEL) Go to the {\bf previous} group with unread articles.
+[distance]\\ 
+q       & {\bf Quit} Gnus. M-x gnus-unload to remove it from memory.\\
+r       & {\bf Re-read} the init file `.gnus'.\\
+s       & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if
+`gnus-save-newsrc-file').\\ 
+t       & Toggle {\bf Topic} mode. A topic is a hierarchy of groups.\\
+z       & Suspend Gnus (kill all buffers except the Group buffer).\\
+B       & {\bf Browse} a foreign server (specify method and name).\\
+C       & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\
+F       & {\bf Find} new groups and process them. [Prefix: ask-server]\\
+N       & Go to the {\bf next} group. [distance]\\
+P       & Go to the {\bf previous} group. [distance]\\
+Q       & {\bf Quit} Gnus without saving any .newsrc files.\\
+R       & {\bf Restart} Gnus.\\
+V       & Display the Gnus {\bf version} number.\\
+W f     & {\bf Flush} the score caches of all groups.\\
+Z       & Clear the dribble buffer.\\
+C-c C-s & {\bf Sort} the groups according to `gnus-group-sort-function'.\\
+C-c C-x & Run all expirable articles in this group through the {\bf expiry} 
+process.\\
+C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\
+C-c M-g & Activate absolutely all groups.\\
+C-x C-t & {\bf Transpose} two groups.\\
+M-\&    & Execute a command on all process-marked groups.\\
+M-c     & {\bf Clear} this group's data (read and other marks). [p/p]
+Use M-x gnus-group-clear-data-on-native-groups to clear all data if you change
+servers and article numbers don't match. Or use
+M-x gnus-change-server to renumber the articles, but it is slow.\\
+\end{keys}
+\begin{keys}{C-c M-C-x}
+\newlength{\keywidth}\settowidth{\keywidth}{C-c M-C-x}%
+\makebox[\keywidth][l]%
+{M-d}   & {\bf Describe} {\em all\/} groups. [Prefix: re-read the description
+from the server]\\
+M-f     & Fetch this group's {\bf FAQ} (using ange-ftp).\\
+M-g     & Check the server for new articles in this group ({\bf get}). [p/p]\\
+M-n     & Go to the {\bf previous} unread group on the same or lower level.
+[distance]\\ 
+M-p     & Go to the {\bf next} unread group on the same or lower level.
+[distance]\\ 
+\end{keys}}
+
+\def\ListGroups{\subsec{(A) List Groups}{\samepage
+\begin{keys}{A m}
+A a     & (C-c C-a) List all groups whose names match a regexp ({\bf
+apropos}).\\ 
+A d     & List all groups whose names or {\bf descriptions} match a regexp.\\ 
+A k     & List all {\bf killed} groups. [Prefix: all groups but [un]subscribed]\\ % (C-c C-l)
+A l     & List unread groups on a specific {\bf level}. [Prefix: also read groups]\\
+A m     & List groups that {\bf match} a regexp and have unread articles.
+[level]\\ 
+A s     & (l) List {\bf subscribed} groups with unread articles. [level]\\
+A u     & (L) List all groups (including {\bf unsubscribed}). [level, default 7]\\ 
+A z     & List the {\bf zombie} groups.\\
+A A     & List all available {\bf active} groups on all servers (may be slow).\\
+A M     & List groups that {\bf match} a regexp.\\
+A T     & List all active groups arranged in {\bf topics}.\\
+\end{keys}}}
+
+\def\CreateGroups{\subsec{(G) Create/Edit Foreign Groups}{\samepage
+The select methods are indicated in parentheses.\\*
+\begin{keys}{G DEL}
+G DEL   & {\bf Delete} this group. [Prefix: delete {\bf all} articles too]\\
+G a     & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\
+G c     & {\bf Customize} this group's parameters.\\
+G d     & Make a {\bf directory} group (every file a posting with numeric name). (nndir)\\
+G e     & {\bf Edit} this group's select method.\\ % (M-e)
+G f     & Make a group based on a {\bf file}. (nndoc: mbox, babyl, digest,
+          mmdf, news, rnews, clari-briefs, rfc934, rfc822, forward) [Prefix: 
+          don't guess the type]\\
+G h     & Make the Gnus {\bf help} (documentation/tutorial) group. (nndoc)\\
+G k     & Make a {\bf kiboze} group (specify name, groups, regexps). (nnkiboze)\\
+G m     & {\bf Make} a new group (specify name, method, address).\\
+G p     & Edit this group/topic's {\bf parameters}.\\
+G r     & {\bf Rename} this group (only for mail groups).\\
+G v     & Add this group to a {\bf virtual} group. [p/p]\\
+G w     & Make a {\bf web}-based group. (nnweb: dejanews, altavista,
+          reference) [Prefix: permanent group]\\
+G D     & Enter a {\bf directory} as a temporary group. (nneething without
+recording read marks.)\\
+G E     & {\bf Edit} this group's info (select method, articles read, etc).\\
+G V     & Make an empty {\bf virtual} group. (nnvirtual)\\
+\end{keys}
+You can also create mail-groups and read your mail with Gnus (very useful
+if you are subscribed to any mailing lists), using one of the methods
+nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info
+(C-c C-i g Reading Mail RET).
+}}
+
+\def\SortGroups{\subsubsec{(G S) Sort Groups}{\samepage
+To sort by multiple criteria, first apply the less significant ones, last the
+most significant one.\\*
+\begin{keys}{G P \bf x}
+G S a     & Sort {\bf Alphabetically} by group name. [Prefix: reverse order]\\
+G S l     & Sort by {\bf level}. [Prefix: reverse order]\\
+G S m     & Sort by {\bf method} name. [Prefix: reverse order]\\
+G S r     & Sort by rank (level and score). [Prefix: reverse order]\\
+G S u     & Sort by number of {\bf unread} articles. [Prefix: reverse order]\\
+G S v     & Sort by group score ({\bf value}). [Prefix: reverse order]\\
+\end{keys}
+Here {\bf x} can be any one of a,l,m,r,u,v:\\*
+\begin{keys}{G P \bf x}
+G P \bf x & Sort only the groups selected by [p/p].\\
+T S \bf x & Sort only the current topic.\\
+\end{keys}
+}}
+
+\def\SOUP{\subsubsec{(G s) SOUP Commands}{\samepage
+SOUP is a protocol for putting many articles/replies in a packet, transferring
+them in bulk and reading/composing them off-line. Use the following commands to
+manipulate the packets, and use the nnsoup method to read.\\*
+\begin{keys}{G s w}
+G s b   & Pack all unread articles ({\bf brew} soup). [p/p]\\
+G s p   & {\bf Pack} all SOUP data files into a SOUP packet.\\
+G s r   & Pack all {\bf replies} into a replies packet.\\
+G s s   & {\bf Send} all replies you put in the replies packet.\\
+G s w   & {\bf Write} all SOUP data files.\\
+\end{keys}}}
+
+\def\MarkGroups{\subsec{(M) Mark Groups}{\samepage
+\begin{keys}{M m}
+M b     & Set the process mark on all groups in the {\bf buffer}.\\
+M r     & Mark all groups matching a {\bf regexp}.\\
+M m     & (\#) {\bf Mark} this group. [scope]\\
+M u     & (M-\#) {\bf Unmark} this group. [scope]\\ 
+M w     & Mark all groups in the current region.\\
+M U     & {\bf Unmark} all groups in the buffer.\\
+\end{keys}}}
+
+\def\Unsubscribe{\subsec{(S) (Un)subscribe, Kill and Yank Groups}{\samepage
+\begin{keys}{S C-k}
+S C-k   & {\bf Kill} all groups on a certain level.\\
+S k     & (C-k) {\bf Kill} this group/ topic (and all its groups).\\
+S l     & Set the {\bf level} of this group. [p/p]\\
+S s     & (U) Prompt for a group and toggle its {\bf subscription}.\\
+S t     & (u) {\bf Toggle} subscription to this group. [p/p]\\
+S w     & (C-w) Kill all groups in the region.\\
+S y     & (C-y) {\bf Yank} the last killed group/topic.\\
+S z     & Kill all {\bf zombie} groups.\\
+\end{keys}}}
+
+\def\GroupTopics{\subsec{(T) Group Topics}{\samepage
+Topics are hierarchical arrangements of groups with the purpose of easier
+reading and management.
+\begin{keys}{T TAB}
+T TAB   & Indent this topic to become a sub-topic of the previous one. 
+          [Prefix: un-dent]\\
+T DEL   & {\bf Delete} an empty topic.\\
+T \#    & Mark all groups in this topic with the process mark.\\
+T M-\#  & Unmark all groups in this topic with the process mark.\\
+T c     & {\bf Copy} this group to another topic. [p/p]\\
+T h     & Toggle the {\bf hiding} of empty topics.\\
+T m     & {\bf Move} this group to another topic. [p/p]\\
+T n     & Create a {\bf new} topic.\\
+T r     & {\bf Rename} a topic.\\
+T C     & {\bf Copy} all groups that match a regexp to a topic.\\
+T D     & {\bf Delete} this group from this topic. [p/p]\\
+T M     & {\bf Move} all groups that match a regexp to a topic.\\
+\end{keys}}}
+
+\def\SummaryMode{\sec{Summary Mode}{\samepage
+\begin{keys}{M-C-d}
+SPC     & Select an article, scroll it one page, move to the next one.\\  
+%(A SPC, A n)
+DEL     & (b) Scroll this article one page back.  [distance]\\ %(A DEL, A p)
+RET     & Scroll this article one line forward. [distance]\\
+=       & Expand the Summary window. [Prefix: shrink it to display the
+Article window]\\
+$<$     & (A $<$) Scroll to the beginning of this article.\\ %(A b)
+$>$     & (A $>$) Scroll to the end of this article.\\ %(A e)
+\&      & Execute a command on all articles matching a regexp. 
+[Prefix: move backwards.]\\
+k       & Give a GroupLens {\bf rating} (1-5) to this thread.\\ 
+r       & Give a GroupLens {\bf rating} (1-5) to this article.\\ 
+Y g     & Re{\bf generate} the summary buffer.\\
+Y c     & Pull all {\bf cached} articles into the summary.\\
+C-t     & Toggle {\bf truncation} of summary lines.\\
+C-d     & Un-{\bf digestify} this article into a separate group.\\ %(A D)
+M-C-d   & Un-{\bf digestify} all selected articles into one group. [p/p]\\
+M-\&    & Execute a command on all articles having the process mark.\\
+M-k     & Edit this group's {\bf kill} file.\\
+M-r     & Search through previous articles for a regexp.\\
+M-s     & {\bf Search} through subsequent articles for a regexp.\\
+M-K     & Edit the general {\bf kill} file.\\
+\end{keys}}}
+
+\def\SortSummary{\subsec{(C-c C-s) Sort the Summary}{\samepage
+In thread mode, these commands sort only the thread roots.\\*
+\begin{keys}{C-c C-s C-a}
+C-c C-s C-a & Sort the summary by {\bf author}.\\
+C-c C-s C-d & Sort the summary by {\bf date}.\\
+C-c C-s C-i & Sort the summary by article score.\\
+C-c C-s C-l & Sort the summary by number of {\bf lines}.\\
+C-c C-s C-n & Sort the summary by article {\bf number}.\\
+C-c C-s C-s & Sort the summary by {\bf subject}.\\
+\end{keys}}}
+
+\def\Article{\subsec{(A) Article Commands}{\samepage
+\begin{keys}{A m}
+A g  & (g) (Re){\bf get} this article. [Prefix: don't do any processing]\\ 
+A r  & (^) Go to the parent of this article ({\bf References} header).
+[Prefix: how many ancestors back; negative: only the $n$-th ancestor]\\ %(A ^)
+M-^  & Go to the article with a given Message-ID.\\
+A s  & (s) Perform an i{\bf search} in the article buffer.\\
+A P  & {\bf Print} the article as postscript.\\
+A R  & Fetch all ancestors ({\bf References}) of this article.\\
+\end{keys}}}
+
+\def\MailGroup{\subsec{(B) Mail-Group Commands}{\samepage
+These commands (except `B c') are only valid in a mail group.\\*
+\begin{keys}{B M-C-e}
+B DEL   & {\bf Delete} the mail article from disk. [p/p]\\
+B c     & {\bf Copy} this article from any group to a mail group. [p/p]\\
+B e     & {\bf Expire} all expirable articles in this group. [p/p]\\
+B i     & {\bf Import} any file into this mail group (give From and Subject).\\
+B m     & {\bf Move} the article from one mail group to another. [p/p]\\
+B p     & Check if a courtesy copy of a message was also {\bf posted}.\\
+B q     & {\bf Query} where would the article go if respooled.\\
+B r     & {\bf Respool} this mail article. [p/p]\\
+B w     & (e) Edit this mail article.\\
+B M-C-e & {\bf Expunge} (from disk) all expirable articles in this group. [p/p]\\ 
+B C     & {\bf Crosspost} this article to another group.\\
+\end{keys}}}
+
+\def\GotoArticle{\subsec{(G) Go To Article}{\samepage
+These commands select the target article. They do not understand the prefix.\\*
+\begin{keys}{G C-n}
+G b     & (,) Go to the {\bf best} article (the one with highest score). [GL rating]\\
+G f     & (.) Go to the {\bf first} unread article.\\
+G g     & Ask for an article number and then {\bf go to} to that summary
+line.\\ 
+G j     & (j) Ask for an article number and then {\bf jump} to that article.\\ 
+G l     & (l) Go to the {\bf last} article read.\\
+G o     & Pop an article off the summary history and go to it.\\
+G n     & (n) Go to the {\bf next} unread article. [GL rating]\\
+G p     & (p) Go to the {\bf previous} unread article.\\
+G N     & (N) Go to {\bf the} next article.\\
+G P     & (P) Go to the {\bf previous} article.\\
+G C-n   & (M-C-n) Go to the {\bf next} article with the same subject.\\
+G C-p   & (M-C-p) Go to the {\bf previous} article with the same subject.\\
+G M-n   & (M-n) Go to the {\bf next} summary line of an unread article.
+[distance]\\ 
+G M-p   & (M-p) Go to the {\bf previous} summary line of an unread article. 
+[distance]\\ 
+\end{keys}}}
+
+\def\MarkArticles{\subsec{(M) Mark Articles}{\samepage
+\begin{keys}{M M-C-r}
+d       & (M d, M r) Mark this article as {\bf read} ({\bf delete} it) 
+and move to the next one. [scope]\\ 
+D       & Mark this article as read and move to the previous one. [scope]\\
+u       & (!, M t) {\bf Tick} this article (mark it as interesting)
+and move to the next one. [scope]\\ %(M !)
+U       & Tick this article and move to the previous one. [scope]\\ 
+M-u     & (M SPC, M c) {\bf Clear} all marks from this article 
+and move to the next one. [scope]\\ 
+M-U     & Clear all marks from this article and move to the previous one.
+[scope]\\ 
+M ?     & (?) Mark this article as dormant (only followups are
+interesting). [scope]\\ 
+*       & Make this article persistent. [p/p]\\
+M-*     & Make this article non-persistent (and delete it). [p/p]\\
+M b     & Set a {\bf bookmark} in this article.\\
+M e     & (E) Mark this article as {\bf expirable}. [scope]\\ %(M x)
+M k     & (k) {\bf Kill} all articles with the same subject then select the
+next one.\\ 
+M B     & Remove the {\bf bookmark} from this article.\\
+M C     & {\bf Catch-up} (mark read) the articles that are not ticked.\\
+M D     & Show all {\bf dormant} articles (normally they are hidden unless they
+have any followups).\\
+M H     & Catch-up (mark read) this group to point ({\bf here}).\\
+M K     & (C-k) {\bf Kill} all articles with the same subject as this one.\\
+C-w     & Mark all articles between point and mark as read.\\
+M S     & (C-c M-C-s) {\bf Show} all expunged articles.\\
+M C-c   & {\bf Catch-up} all articles in this group.\\
+M M-r   & (x) Expunge all {\bf read} articles from this group.\\
+M M-D   & Hide all {\bf dormant} articles.\\
+M M-C-r & Expunge all articles having a given mark.\\
+\end{keys}}}
+
+\def\MarkScore{\subsubsec{(M V) Mark Based on Score (Value)}{\samepage
+\begin{keys}{M s m}
+M V c   & {\bf Clear} all marks from all high-scored articles. [score]\\
+M V k   & {\bf Kill} all low-scored articles. [score]\\
+M V m   & Mark all high-scored articles with a given {\bf mark}. [score]\\
+M V u   & Mark all high-scored articles as interesting (tick them). [score]\\
+\end{keys}}}
+
+\def\ProcessMark{\subsubsec{(M P) The Process Mark}{\samepage 
+These commands set and remove the process mark \#. You only need to use
+it if the set of articles you want to operate on is non-contiguous. Else
+use a numeric prefix.\\*
+\begin{keys}{M P R}
+M P a   & Mark {\bf all} articles (in series order).\\
+M P b   & Mark all articles in the order they appear in the {\bf buffer}.\\
+M P i   & {\bf Invert} all process marks.\\
+M P k   & Push all marks on a stack then {\bf kill} them.\\
+M P p   & (\#) Mark this article.\\  %(M \#)
+M P r   & Mark all articles in the {\bf region}.\\
+M P s   & Mark all articles in the current {\bf series}.\\
+M P t   & Mark all articles in this (sub){\bf thread}.\\
+M P u   & (M-\#) {\bf Unmark} this article.\\ %(M M-\#)
+M P v   & Mark all high-scored articles ({\bf value}). [score]\\
+M P w   & Push all marks on a stack.\\
+M P y   & {\bf Yank} and restore a mark set from the stack after `M P y', 
+`M P w' or an operation that cleared the marks.\\
+M P R   & Mark all articles matching a {\bf regexp}.\\
+M P S   & Mark all {\bf series} that already contain a marked article.\\
+M P T   & Unmark all articles in this (sub){\bf thread}.\\
+M P U   & {\bf Unmark} all articles.\\
+\end{keys}}}
+
+\def\OutputArticles{\subsec{(O) Output Articles}{\samepage
+\begin{keys}{O m}
+O b     & Save the article {\bf body} in a plain file. [p/p]\\
+O f     & Save this article in a plain {\bf file}. [p/p]\\
+O h     & Save this article in {\bf mh} folder format. [p/p]\\
+O m     & Save this article in {\bf mail} format. [p/p]\\
+O o     & (o, C-o) Save this article using the default article saver. [p/p]\\
+O p     & ($\mid$) Pipe this article to a shell command. [p/p]\\ 
+O r     & Save this article in {\bf rmail} format. [p/p]\\
+O s     & Add this article to a {\bf SOUP} packet. [p/p]\\
+O v     & Save this article in {\bf vm} format. [p/p]\\
+O F     & Save this article as plain {\bf file} and overwrite any existing file. [p/p]\\
+\end{keys}}}
+
+\def\Send{\subsec{(S) Post, Followup, Reply, Forward, Cancel}{\samepage
+These commands put you in a separate Message buffer. After editing the
+article, send it by pressing C-c C-c.  If you are in a foreign group and want
+to post the article using the foreign server, give a prefix to C-c C-c.
+Set `gnus-post-method' to `nngateway' if your server cannot post [temporarily]
+and you wan to post through a mail-to-news gateway.\\* 
+\begin{keys}{S O m}
+S b     & {\bf Both} post a followup to this article, and send a reply.\\
+S c     & (C) {\bf Cancel} this article (only works if it is your own).\\
+S f     & (f) Post a {\bf followup} to this article.\\
+S m     & (m) Send a {\bf mail} to someone.\\
+S n     & Followup in a {\bf newsgroup} to a message you got through mail.\\
+S o m   & (C-c C-f) Forward this article by {\bf mail} to a person. 
+[Prefix: include full headers]\\
+S o p   & Forward this article as a {\bf post} to a newsgroup.\\
+S p     & (a) {\bf Post} an article to this group.\\
+S r     & (r) Mail a {\bf reply} to the author of this article.\\
+S s     & {\bf Supersede} this article with a new one (only for own articles).\\ 
+S u     & {\bf Uuencode} a file, split it into series and post it.\\
+S w     & Mail a {\bf wide} reply to the author and the recipients of this
+article.\\
+S B     & {\bf Both} post a followup, send a reply, and include the
+original. [p/p]\\ 
+S D b   & Resend a {\bf bounced} mail after fixing the recipient address.
+[Prefix: display the headers of the message this one is a reply to]\\
+S D r   & {\bf Resend} this message to another of your addresses.\\
+S F     & (F) Post a {\bf followup} and include the original. [p/p]\\
+S N     & Followup in a {\bf newsgroup} to a mail message and include the
+original [p/p].\\ 
+S O m   & Digest these series and forward by {\bf mail}. [p/p]\\
+S O p   & Digest these series and forward as a {\bf post} to a newsgroup.
+[p/p]\\ 
+S R     & (R) Mail a {\bf reply} and include the original. [p/p]\\
+S W     & Mail a {\bf wide} reply and include the original. [p/p]\\
+S M-c   & Send a {\bf complaint} about excessive {\bf crossposting}. [p/p]\\
+\end{keys}
+If you want to cancel or supersede an article you just posted (before it
+has appeared on the server), go to the *sent \ldots* buffer, change
+`Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c.
+}}
+
+\def\Thread{\subsec{(T) Thread Commands}{\samepage
+\begin{keys}{T M-\#}
+T ^     & Make this article child of the previous or precess-marked one.\\
+T \#    & Mark this (sub)thread with the process mark.\\
+T M-\#  & Remove the process mark from this (sub)thread.\\
+T d     & Move {\bf down} this thread. [distance]\\
+T h     & {\bf Hide} this (sub)thread.\\
+T i     & {\bf Increase} the score of this thread.\\
+T k     & (M-C-k) {\bf Kill} the current (sub)thread. [Prefix:
+negative--tick, positive--unmark]\\
+T l     & (M-C-l) {\bf Lower} the score of this thread.\\
+T n     & (M-C-f) Go to the {\bf next} thread. [distance]\\
+T o     & Go to the {\bf top} of this thread.\\
+T p     & (M-C-b) Go to the {\bf previous} thread. [distance]\\
+T s     & {\bf Show} the thread hidden under this article.\\
+T t     & Re-{\bf thread} this thread.\\
+T u     & Move {\bf up} this thread. [distance]\\
+T H     & {\bf Hide} all threads.\\
+T S     & {\bf Show} all hidden threads.\\
+T T     & (M-C-t) {\bf Toggle} threading.\\
+\end{keys}}}
+
+\def\Score{\subsec{(V) Score (Value) Commands}{\samepage
+Read about Adaptive Scoring in the online info.\\*
+\begin{keys}{\bf A p m l}
+V a     & {\bf Add} a new score entry, specifying all elements.\\
+V c     & Select a new score file as {\bf current}.\\
+V e     & {\bf Edit} the current score file.\\
+V f     & Edit a score {\bf file} and make it the current one.\\
+V m     & {\bf Mark} all articles below a given score as read [score].\\
+V s     & {\bf Set} the score of this article.\\
+V t     & {\bf Trace} all score rules applied to this article.\\
+V x     & {\bf Expunge} all low-scored articles. [score]\\
+V F     & {\bf Flush} the score cache to put it in sync with files.\\
+V C     & {\bf Customize} the current score file using a user-friendly
+interface.\\ 
+V S     & {\bf Show} the score of this article.\\
+I C-i   & {\bf Increase} the score of this article.\\
+L C-l   & {\bf Lower} the score of this article.\\
+\bf A p m l& Make a scoring entry based on this article.\\
+\end{keys}
+
+The four letters stand for:\\*
+\quad \B{A}ction: I)ncrease, L)ower;\\*
+\quad \B{p}art: a)uthor (from), b)ody, d)ate, f)ollowups, h)ead (all headers),
+message-i)d, l)ines, s)ubject, t)hread (references), x)refs (cross-posting);\\*
+\quad \B{m}atch type:\\*
+\qquad string: e)xact, f)uzzy, r)egexp, s)ubstring\\*
+\qquad date: a)t, b)efore, n)this,\\*
+\qquad number: $<$, =, $>$;\\*
+\quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate.
+
+If you type the second/third letter in uppercase, the remaining letters are
+assumed to be s)ubstring and t)emporary.
+
+\quad Extra keys for manual editing of a score file:\\*
+\begin{keys}{C-c C-c}
+C-c C-c & Finish editing the score file.\\
+C-c C-d & Insert the current {\bf date} as number of days.\\
+C-c C-p & {\bf Pretty-print} the [adaptive] score file.\\
+\end{keys}}}
+
+\def\Wash{\subsec{(W) Wash the Article Buffer}{\samepage
+\begin{keys}{W C-c}
+W b     & Make Message-IDs, URLs, citations and signature to mouse-clickable 
+{\bf buttons}.\\  
+W c     & Remove extra {\bf CR}s (^M).\\
+W e     & Fontify {\bf emphasis}, e.g.{} *this* and \_that\_.\\
+W f     & Display any X-{\bf Face} headers.\\
+W l     & (w) Remove page breaks ({\bf^L}).\\
+W m     & Toggle {\bf MIME} processing before displaying.\\
+W o     & Treat {\bf overstrike} (a^Ha) or underline (a^H\_).\\
+W q     & Treat {\bf quoted}-printable (=0D etc).\\
+W r     & (C-c C-r) Caesar-{\bf rotate} (rot13 decode).\\
+W t     & (t) {\bf Toggle} the displaying of all headers.\\
+W v     & (v) Toggle permanent {\bf verbose} displaying of all headers.\\
+W w     & Do word {\bf wrap}. [Prefix: width to use for filling]\\
+W B     & Make headers to mouse-clickable {\bf buttons}.\\
+W E a   & Expunge {\bf all} unwanted blank lines.\\
+W E l   & Expunge {\bf leading} blank lines.\\
+W E m   & Expunge {\bf multiple} blanks lines and replace them with a single
+blank.\\
+W E s   & Expunge leading {\bf spaces} from every line.\\
+W E t   & Expunge {\bf trailing} blank lines.\\
+W T e   & Display the date as time {\bf elapsed} since sent.\\
+W T l   & Display the date in the {\bf local} timezone.\\
+W T o   & Display the {\bf original} date.\\
+W T s   & Display the date using `gnus-article-time-format'.\\
+W T u   & (W T z) Display the date as {\bf UTC} (aka GMT, Zulu).\\
+\end{keys}}}
+
+\def\Hide{\subsubsec{(W W) Hide Parts of the Article}{\samepage
+Without prefix, these commands toggle hiding; a positive prefix hides and a
+negative prefix unhides.\\*
+\begin{keys}{W W C}
+W W a   & Hide {\bf all} unwanted parts.\\
+W W c   & Hide {\bf cited} text.\\
+W W h   & Hide the {\bf headers}.\\
+W W s   & Hide the {\bf signature}.\\
+W W p   & Hide {\bf PGP} signatures.\\
+W W C   & Hide {\bf cited} text if the article is not a root of a thread.\\
+W W P   & Hide {\bf PEM} gruft.\\
+\end{keys}}}
+
+\def\Highlight{\subsubsec{(W H) Highlight Parts of the Article}{\samepage
+\begin{keys}{W H A}
+W H a   & Highlight {\bf all} parts.\\
+W H c   & Highlight {\bf cited} text.\\
+W H h   & Highlight the {\bf headers}.\\
+W H s   & Highlight the {\bf signature}.\\
+\end{keys}}}
+
+\def\Extract{\subsec{(X) Extract Series (Uudecode etc)}{\samepage
+Gnus recognizes if the current article is part of a series (multipart
+posting whose parts are identified by numbers in the subject, e.g.{}
+1/10\dots10/10). You can mark and process more than one series at a time. If
+the posting contains any archives, they are expanded and gathered in a new
+group.\\* 
+\begin{keys}{X p}
+X b     & Un-{\bf binhex} these series. [p/p]\\
+X o     & Simply {\bf output} these series (no decoding). [p/p]\\ 
+X p     & Unpack these {\bf postscript} series. [p/p]\\
+X s     & Un-{\bf shar} these series. [p/p]\\
+X u     & {\bf Uudecode} these series. [p/p]\\
+\end{keys}
+
+Each one of these commands has four variants:\\*
+\begin{keys}{X v \bf Z}
+X   \bf z & Decode these series. [p/p]\\
+X   \bf Z & Decode and save these series. [p/p]\\
+X v \bf z & Decode and view these series. [p/p]\\
+X v \bf Z & Decode, save and view these series. [p/p]\\
+\end{keys}
+where {\bf z} or {\bf Z} identifies the decoding method (b,o,p,s,u).
+
+An alternative binding for the most-often used of these commands is\\*
+\begin{keys}{C-c C-v C-v}
+C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\
+\end{keys}
+Use `M-x gnus-binary-mode' to do decoding automatically (then use `g' to see
+the original text of the article).
+}}
+
+\def\Exit{\subsec{(Z) Exit the Current Group}{\samepage
+\begin{keys}{Z G}
+Z c     & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\
+Z n     & Mark all articles as read and go to the {\bf next} group.\\
+Z s     & {\bf Save} this group's info in the dribble file. [Prefix: also save .newsrc]\\
+Z C     & Mark all articles as read ({\bf catch-up}) and exit.\\
+Z E     & (Q) {\bf Exit} without updating the group information.\\
+Z G     & (M-g) Check for new articles in this group ({\bf get}).\\
+Z N     & Exit and go to the {\bf next} group.\\
+Z P     & Exit and go to the {\bf previous} group.\\
+Z R     & Exit this group, then ({\bf reenter}) it.
+[Prefix: select all articles, read and unread.]\\
+Z Z     & (q, Z Q) Exit this group.\\
+\end{keys}}}
+
+\def\Limit{\subsec{(/) Limiting the Summary}{\samepage
+\begin{keys}{/ D}
+/ a  & Limit to a given {\bf author}.\\
+/ c  & Hide dormant articles that have no {\bf children} (follow-ups).\\
+/ d  & Hide all {\bf dormant} articles.\\
+/ m  & Limit to articles not having a given {\bf mark}.\\
+/ n  & Limit to the current article.\\
+/ s  & (/ /) Limit to a given {\bf subject}.\\
+/ t  & Limit by {\bf time} (older than a given number of days). [Prefix: newer]\\
+/ u  & (x) Limit to {\bf unread} articles. [Prefix: also remove ! and ? articles]\\
+/ v  & Limit to high-scored articles ({\bf value}). [score]\\
+/ w  & Pop and restore the previous limit from a stack. [Prefix: pop all limits]\\
+/ C  & {\bf Catch-up} all unread articles outside the limit. [Prefix: also ! and ? articles]\\
+/ D  & Show all {\bf dormant} articles.\\
+/ E  & (M S) {\bf Show} all {\bf expunged} articles.\\
+\end{keys}}}
+
+\def\PickAndRead{\subsec{Pick-and-Read Mode}{\samepage
+Use `M-x gnus-pick-mode' to first choose the articles you like and
+only read them after.\\*
+\begin{keys}{SPC}
+SPC  & Scroll the summary a page, if at the end start reading.\\
+RET  & Start reading. [Prefix: catch-up all non-picked articles]\\
+.    & Pick this article. [Prefix: pick the article with that number]\\
+r    & Pick all articles in the {\bf region}.\\
+R    & Unpick all articles in the {\bf region}.\\
+t    & Pick this {\bf thread}.\\
+u    & {\bf Unpick} this article.\\
+T    & Unpick this {\bf thread}.\\
+U    & {\bf Unpick} all articles.\\
+e    & Pick articles that match a regexp.\\
+b    & Pick all articles in the {\bf buffer}.\\
+B    & Unpick all articles in the {\bf buffer}.\\
+\end{keys}}}
+
+\def\ArticleMode{\sec{Article Mode}{\samepage
+Most keys in Summary mode also work in Article mode (of course, the normal
+navigation keys operate on the Article buffer). Additional keys:\\*
+\begin{keys}{C-c C-m}
+RET     & (middle mouse button) Activate the button at point to follow
+an URL or Message-ID, hide citation/signature, etc.\\
+TAB     & Move point to the next button.\\
+M-TAB   & Move point to the previous button.\\
+?       & Give a brief help message.\\
+h       & (s) Go to the {\bf header} line of the article in the {\bf
+summary} buffer.\\
+C-c ^   & (r) Get the article with Message-ID near point ({\bf refer}).\\
+C-c C-m & {\bf Mail} reply to the address near point. [Prefix: cite the
+article]\\ 
+\end{keys}}}
+
+\def\ServerMode{\sec{Server Mode}{\samepage
+To enter this mode, press `^' while in Group mode.\\*
+\begin{keys}{SPC}
+SPC     & (RET) Browse this server.\\
+a       & {\bf Add} a new server.\\
+c       & {\bf Copy} this server.\\
+e       & {\bf Edit} a server.\\
+g       & Ask the server to re-{\bf generate} all its data structures.\\
+k       & {\bf Kill} this server. [scope]\\
+l       & {\bf List} all servers.\\
+q       & Return to the group buffer ({\bf quit}).\\
+s       & Ask the server to {\bf scan} for new messages.\\
+y       & {\bf Yank} the previously killed server.\\
+C       & {\bf Close} the connection to this server.\\
+O       & (Re-){\bf Open} a connection to this server.\\
+D       & Mark this server as unavailable ({\bf deny} it).\\
+R       & {\bf Reset} all unavailability (denial) marks.\\
+M-c     & {\bf Close} the connections to all servers.\\
+M-o     & (Re-){\bf Open} connections to all servers.\\
+\end{keys}}}
+
+\def\BrowseServer{\sec{Browse Server Mode}{\samepage
+To enter this mode, press `B' in Group mode.\\*
+\begin{keys}{RET}
+RET     & Enter the current group.\\
+SPC     & Enter the current group and display the first article.\\
+?       & Give a very short help message.\\
+n       & Go to the {\bf next} group. [distance]\\
+p       & Go to the {\bf previous} group. [distance]\\
+q       & (l) {\bf Quit} browse mode.\\
+u       & {\bf [Un]Subscribe} to the current group. [scope]\\
+\end{keys}}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnusrefcard/makelogo	Mon Aug 13 09:42:26 2007 +0200
@@ -0,0 +1,35 @@
+#!/bin/csh -f
+# Copies gnuslogo.ps to gnuslogo.tmp and fixes the image 
+# by the scale specified in $1.tex
+
+echo Scaling-down gnuslogo.ps to gnuslogo.$1
+set bb = `grep "^%%BoundingBox:" gnuslogo.ps`
+if ($bb[2] != 0 || $bb[3] != 0) then
+  echo Please make gnuslogo.ps have zero-based coordinates
+  exit 1
+endif
+set logowidth  = $bb[4]
+set logoheight = $bb[5]
+set logoscale = \
+ `grep "\\def\\logoscale{" $1.tex |sed -e "s/\\def\\logoscale{\([^}]*\)}/\1/"`
+# check if a program is present
+alias executable '(\!* </dev/null >&/dev/null)'
+executable calc 0
+if ($status != 1) then  # calc is demented and returns 2 on success
+  # -p is "precision"
+  set newwidth  = `calc -p1 $logowidth  \* $logoscale`
+  set newheight = `calc -p1 $logoheight \* $logoscale`
+else if ( { executable dc } ) then
+  # the k command of dc doesn't seem to have much of an effect
+  set newwidth  = `echo 0 k $logowidth  $logoscale \* p | dc`
+  set newheight = `echo 0 k $logoheight $logoscale \* p | dc`
+else if ( { executable bc } ) then
+  # nor does the scale variable of bc. This will lead to fractional numbers
+  # in the %%BoundingBox statement of the EPS file.
+  # Let's hope your dvips doesn't have a problem with it.
+  set newwidth  = `echo "scale=0; $logowidth  * $logoscale" | bc`
+  set newheight = `echo "scale=0; $logoheight * $logoscale" | bc`
+endif
+sed -e"/%%BoundingBox/{s/$logowidth/$newwidth/;s/$logoheight/$newheight/;}"\
+    -e"/scale/{s/$logowidth.0/$newwidth/;s/$logoheight.0/$newheight/;}"\
+    gnuslogo.ps >! gnuslogo.$1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnusrefcard/quickref.tex	Mon Aug 13 09:42:26 2007 +0200
@@ -0,0 +1,409 @@
+% Gnus quick refcard
+\def\logoscale{0.11}
+\def\version{5.4.56}
+\def\date{12 June 1997}
+\def\author{Vladimir Alexiev $<$vladimir@cs.ualberta.ca$>$}
+\raggedbottom%\raggedright
+\newlength{\logowidth}\setlength{\logowidth}{6.861in}
+\newlength{\logoheight}\setlength{\logoheight}{7.013in}
+\newlength{\keycolwidth}\newlength{\descrcolwidth}
+\newenvironment{keys}[1]% #1 is the widest key
+  {\nopagebreak\noindent%
+   \settowidth{\keycolwidth}{#1}%
+   \setlength{\descrcolwidth}{\columnwidth}
+   \addtolength{\descrcolwidth}{-\tabcolsep}%
+   \addtolength{\descrcolwidth}{-\keycolwidth}%
+   \begin{tabular}%
+     {@{}l@{\hspace{\tabcolsep}}p{\descrcolwidth}@{}}}%
+  {\end{tabular}}
+\catcode`\^=12 % allow ^ to be typed literally
+\newcommand{\B}[1]{{\bf#1})}    % bold l)etter
+\setlength{\fboxsep}{0pt}
+
+\def\Title{\parbox{0.6\columnwidth}{\centering\bf\LARGE%
+ Gnus \version\\Quick Refcard}}
+
+\newcommand\Logo[1]{
+\makebox[\logoscale\logowidth]{\parbox{1ex}{\vbox to \logoscale\logoheight
+{\vfill\special{psfile=gnuslogo.#1}}}}}
+
+\def\CopyRight{\begin{center}\tiny
+Copyright \copyright\ 1995 Free Software Foundation, Inc.\\*
+Copyright \copyright\ 1995 \author.\\*
+Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne
+Ingebrigtsen.\\*
+and the Emacs Help Bindings feature (C-h b).\\*
+Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\*
+Quick refcard last edited on \date.
+\end{center}}
+
+\def\Notes{
+\sec{Notes}
+{\samepage
+%Many Gnus commands are affected by the numeric prefix. Normally you enter a
+%prefix by holding the Meta key and typing a number, but in most Gnus modes
+%you don't need to use Meta since the digits are not self-inserting.
+%
+The prefixed behavior of commands is given in [brackets]. Often the prefix
+is used to specify:\par
+ [distance] How many objects to move the point over.\par
+ [scope] How many objects to operate on (including the current one).\par
+ [p/p] The ``Process/Prefix Convention'': If a prefix is given then it
+determines how many objects to operate on (negative means backwards). Else if
+transient-mark-mode or zmacs-regions is set and the region is active, operate
+on the region. Else if there are some objects marked with the process mark \#,
+operated on them. Else operate only on the current object.
+ [level] A group subscribedness level. Only groups with a lower or
+equal level will be affected by the operation. If no prefix is given,
+`gnus-group-default-list-level' is used.  If
+`gnus-group-use-permanent-levels', then a prefix to the `g' and `l'
+commands will also set the default level.\par
+ [score] An article score. If no prefix is given,
+`gnus-summary-default-score' is used.\\
+
+\begin{keys}{C-c C-i}
+C-c C-i & Go to the Gnus online {\bf info}.\\
+C-c C-b & Send a Gnus {\bf bug} report.\\
+\end{keys}
+}}
+
+\def\GroupMode{
+\sec{Group Mode}
+\begin{keys}{C-c C-a}
+RET     & (=) Select this group. [Prefix: how many (read) articles to fetch.
+Positive: newest articles, negative: oldest ones.]\\
+SPC     & Select this group and display the first unread article. [Same
+prefix as above.]\\
+?       & Give a very short help message.\\
+$<$     & Go to the beginning of the Group buffer.\\
+$>$     & Go to the end of the Group buffer.\\
+,       & Jump to the lowest-level group with unread articles.\\
+.       & Jump to the first group with unread articles.\\
+\#      & (M m) Set the process mark on this group. [scope]\\
+%^       & Enter the Server buffer mode.\\
+a       & Post an {\bf article} to a group.\\
+%b       & Find {\bf bogus} groups and delete them.\\
+c       & Mark all unticked articles in this group as read ({\bf catch-up}).
+[p/p]\\
+g       & Check the server for new articles ({\bf get}). [level]\\
+j       & {\bf Jump} to a group.\\
+l       & (A s) {\bf List} groups with unread articles. [level]\\
+m       & {\bf Mail} a message to someone.\\
+n       & Go to the {\bf next} group with unread articles. [distance]\\
+p       & (DEL) Go to the {\bf previous} group with unread articles.
+[distance]\\
+q       & {\bf Quit} Gnus.\\
+%r       & Read the init file ({\bf reset}).\\
+s       & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if
+`gnus-save-newsrc-file').\\
+u & (S t) Toggle subscription to this group ({\bf unsibscribe}). [p/p]\\
+%z       & Suspend (kill all buffers of) Gnus.\\
+%B       & {\bf Browse} a foreign server.\\
+C       & Mark all articles in this group as read ({\bf catch-up}). [p/p]\\
+%F       & {\bf Find} new groups and process them.\\
+L       & (A u) {\bf List} all groups. [If no prefix is given, level 7 is the
+default]\\
+%N       & Go to the {\bf next} group. [distance]\\
+%P       & Go to the {\bf previous} group. [distance]\\
+Q       & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\
+%R       & {\bf Restart} Gnus.\\
+U & (S s) Prompt for a group and toggle its subscription.\\
+%V       & Display the Gnus {\bf version} number.\\
+%Z       & Clear the dribble buffer.\\
+C-c C-a & (A a) List all groups whose names match a regexp ({\bf apropos}).\\
+C-c C-d & Show the {\bf description} of this group. [Prefix: re-read it
+from the server.]\\
+C-c C-l & (A k) {\bf List} all killed groups.\\
+C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level
+(depending on `gnus-group-sort-function').\\
+%C-c C-x & Run all expirable articles in this group through the {\bf expiry}
+%process.\\
+%C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\
+C-k & (S k) {\bf Kill} this group.\\
+C-w & (S w) Kill all groups in the region.\\
+C-y & (S y) {\bf Yank} the last killed group.\\
+C-x C-t & {\bf Transpose} two groups.\\
+%M-\# & (M u) Remove the process mark from this group. [scope]\\
+%M-d     & {\bf Describe} ALL groups. [Prefix: re-read the description from the
+%server.]\\
+M-f     & Fetch this group's {\bf FAQ} (using ange-ftp).\\
+M-g     & Check the server for new articles in this group ({\bf get}). [p/p]\\
+%M-n     & Go to the {\bf next} unread group on the same or lower level.
+%[distance]\\
+%M-p     & Go to the {\bf previous} unread group on the same or lower
+%level. [distance]\\
+%A d     & List all groups whose names or {\bf descriptions} match a regexp.\\
+%A m     & List groups that {\bf match} a regexp and have unread articles.
+%[level]\\
+%A M     & List groups that {\bf match} a regexp.\\
+A z     & List the {\bf zombie} groups.\\
+%G a     & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\
+%G d     & Make a {\bf directory} group (every file must be a posting and files
+%must have numeric names). (nndir)\\
+%M-e & (G e) {\bf Edit} this group's select method.\\
+%G f     & Make a group based on a {\bf file}. (nndoc)\\
+G h     & Make the Gnus {\bf help} (documentation) group.\\
+%G k     & Make a {\bf kiboze} group. (nnkiboze)\\
+%G m     & {\bf Make} a new group.\\
+%G p     & Edit this group's {\bf parameters}.\\
+%G v     & Add this group to a {\bf virtual} group. [p/p]\\
+%G D     & Enter a {\bf directory} as a (temporary) group. (nneething without
+%recording articles read.)\\
+%G E     & {\bf Edit} this group's info (select method, articles read, etc).\\
+%G V     & Make a new empty {\bf virtual} group. (nnvirtual)\\
+%M w     & Mark all groups in the current region.\\
+%S l     & Set the {\bf level} of this group. [p/p]\\
+%S z     & Kill all {\bf zombie} groups.\\
+\end{keys}
+}
+
+\def\SummaryMode{
+\sec{Summary Mode}  % {Summary and Article Modes}
+\begin{keys}{C-c C-v}
+SPC     & (A SPC, A n) Select an article, scroll it one page, move to the
+next one.\\
+DEL     & (A DEL, A p, b) Scroll this article one page back. [distance]\\
+RET     & Scroll this article one line forward. [distance]\\
+=       & Expand the Summary window. [Prefix: shrink it to display the
+Article window]\\
+^     & (A ^, A r) Go to the parent of this article (the References header).\\
+$<$     & (A $<$, A b) Scroll to the beginning of this article.\\
+$>$     & (A $>$, A e) Scroll to the end of this article.\\
+, & (G b) Go to the best article (the one with highest score).\\
+. & (G f) Go to the first unread article.\\
+!       & (u, M !, M t) Tick this article (mark it as interesting) and move
+to the next one. [scope]\\
+?       & (M ?) Mark this article as dormant (only followups are
+interesting). [scope]\\
+\# & (M P p, M \#) Mark this article with the process mark.\\
+$\mid$ & (O p) Pipe this article to a shell command. [p/p]\\
+\&      & Execute a command on all articles matching a regexp.
+[Prefix: move backwards.]\\
+a & (S p) Post an {\bf article} to this group.\\
+c & (Z c) Mark all unticked articles as read and go to the next group
+({\bf catch-up}).\\
+d       & (M d, M r) Mark this article as read and move to the next one.
+[scope]\\
+e & (B w) {\bf Edit} this article (only in a mail group).\\
+f & (S f) Post a {\bf followup} to this article.\\
+g & (A g) (Re)fetch this article ({\bf get}). [Prefix: just show the
+article.]\\
+j       & (G g) Ask for an article number and then {\bf jump} that summary
+line.\\
+k & (M k) {\bf Kill} all articles with the same subject then select the next
+one.\\
+l & (G l) Go to the {\bf last} article read.\\
+m & (S m) Send a {\bf mail} to some other person.\\
+n & (G n) Go to the {\bf next} unread article.\\
+o & (C-o, O o) Save this article using the default article saver ({\bf
+  output}). [p/p]\\
+p       & Go to the {\bf previous} unread article.\\
+q & (Z Z, Z Q) {\bf Quit} this group.\\
+r & (S r) Mail a {\bf reply} to the author of this article.\\
+s & (A s) Perform an i{\bf search} in the article buffer.\\
+t & (W t) {\bf Toggle} the displaying of all headers.\\
+%v       & Toggle permanent {\bf verbose} displaying of all headers.\\
+w & (W l) Remove page breaks ({\bf ^L}) from the article.\\
+x & (M M-r) {\bf Expunge} all read articles from this group.\\
+C & (S c) {\bf Cancel} this article (only works if it is your own).\\
+D       & Mark this article as read and move to the previous one. [scope]\\
+F & (S F) Post a {\bf followup} and include the original. [p/p]\\
+Q & (Z E) {\bf Quit} without updating the group information.\\
+R & (S R) Mail a {\bf reply} and include the original. [p/p]\\
+U       & Tick this article and move to the previous one. [scope]\\
+%N & (G N) Go to the {\bf next} article.\\
+%P & (G P) Go to the {\bf previous} article.\\
+%C-d & (A D) Un{\bf digestify} this article into a separate group.\\
+C-k & (M K) {\bf Kill} all articles with the same subject as this one.\\
+C-t     & {\bf Toggle} truncation of summary lines.\\
+C-w     & Mark all articles between point and mark as read.\\
+M-^     & Fetch the article with a given Message-ID.\\
+M-\# & (M P u, M M-\#) Unmark this article.\\
+M-\&    & Execute a command on all articles having the process mark.\\
+M-g & (Z G) Check for new articles in this group ({\bf get}).\\
+M-k     & Edit this group's {\bf kill} file.\\
+%M-n     & (G M-n) Go to the {\bf next} summary line of an unread article.
+%[distance]\\
+%M-p     & (G M-p) Go to the {\bf previous} summary line of an unread article.
+%[distance]\\
+M-r     & Search through all previous articles for a regexp.\\
+M-s     & {\bf Search} through all subsequent articles for a regexp.\\
+M-u     & (M SPC, M c) Clear all marks from this article and move to the next
+one ({\bf unmark}). [scope]\\
+M-K     & Edit the general {\bf kill} file.\\
+M-U     & Clear all marks from this article and move to the previous one
+({\bf unmark}). [scope]\\
+M-C-b & (T p) Go to the previous thread ({\bf backward}). [distance]\\
+M-C-f & (T n) Go to the next thread ({\bf forward}). [distance]\\
+M-C-k & (T k) {\bf Kill} the current (sub)thread. [Negative prefix:
+tick it, positive prefix: unmark it.]\\
+%M-C-l & (T l) {\bf Lower} the score of this thread.\\
+%M-C-n & (G C-n) Go to {\bf the} next article with the same subject.\\
+%M-C-p & (G C-p) Go to the {\bf previous} article with the same subject.\\
+M-C-t & (T T) {\bf Toggle} threading.\\
+C-c C-f & (S o m) {\bf Forward} this article by mail to a person.\\
+\newlength{\foo}\settowidth{\foo}{C-c C-v}%
+\makebox[\foo][l]{C-c C-v C-v}&\rule{4ex}{0pt}
+  (X v u) Uudecode and view these series. [p/p]\\
+C-c C-r & (W r) Do a Caesar {\bf rotate} (rot13) on the article.\\
+%C-c C-s C-a & Sort the summary by {\bf author}.\\
+%C-c C-s C-d & Sort the summary by {\bf date}.\\
+%C-c C-s C-i & Sort the summary by article score.\\
+%C-c C-s C-n & Sort the summary by article {\bf number}.\\
+%C-c C-s C-s & Sort the summary by {\bf subject}.\\
+%C-c M-C-s & (M S) {\bf Show} all expunged articles.\\
+B DEL   & {\bf Delete} the mail article from disk (!). [p/p]\\
+B c     & {\bf Copy} this article from any group to a mail group. [p/p]\\
+%B e     & {\bf Expire} all expirable articles in this group. [p/p]\\
+%B i     & {\bf Import} a random file into this group.\\
+B m     & {\bf Move} the article from one mail group to another. [p/p]\\
+%B q     & {\bf Query} where will the article go during fancy splitting\\
+%B r     & {\bf Respool} this mail article. [p/p]\\
+%B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this
+%group %(!). [p/p]\\
+%G p     & {\bf Pop} an article off the summary history and go to it.\\
+%H d     & (C-c C-d) {\bf Describe} this group. [Prefix: re-read the
+%description from the server.]\\
+%H f     & Try to fetch the {\bf FAQ} for this group using ange-ftp.\\
+%H h     & Give a very short {\bf help} message.\\
+%H i     & (C-c C-i) Go to the Gnus online {\bf info}.\\
+%H v     & Display the Gnus {\bf version} number.\\
+%M b     & Set a {\bf bookmark} in this article.\\
+%E       & (M e, M x) Mark this article as {\bf expirable}. [scope]\\
+%M B     & Remove the {\bf bookmark} from this article.\\
+%M C     & {\bf Catch-Up} the articles that are not ticked.\\
+%M D     & Show all {\bf dormant} articles (normally they are hidden unless
+%they have any followups).\\
+M H     & Catch-Up (mark read) this group to point ({\bf here}).\\
+%M C-c   & {\bf Catch-Up} all articles in this group.\\
+%M M-D   & Hide all {\bf dormant} articles.\\
+%M M-C-r & Expunge all articles having a given mark.\\
+%M V c   & {\bf Clear} all marks from all high-scored articles. [score]\\
+%M V k   & {\bf Kill} all low-scored articles. [score]\\
+%M V m   & {\bf Mark} all high-scored articles with a given mark. [score]\\
+%M V u   & Mark all high-scored articles as interesting (tick them). [score]\\
+%M P a   & Mark {\bf all} articles (in series order).\\
+%M P r   & Mark all articles in the {\bf region}.\\
+%M P s   & Mark all articles in the current {\bf series}.\\
+%M P t   & Mark all articles in this (sub){\bf thread}.\\
+%M P R   & Mark all articles matching a {\bf regexp}.\\
+%M P S   & Mark all {\bf series} that already contain a marked article.\\
+%M P U   & {\bf Unmark} all articles.\\
+O \bf z  & Save this article in {\bf file}, {\bf mh} folder, {\bf mail},
+{\bf rmail}, {\bf vm} format. [p/p]\\
+%O f     & Save this article in plain {\bf file} format. [p/p]\\
+%O h     & Save this article in {\bf mh} folder format. [p/p]\\
+%O m     & Save this article in {\bf mail} format. [p/p]\\
+%O r     & Save this article in {\bf rmail} format. [p/p]\\
+%O v     & Save this article in {\bf vm} format. [p/p]\\
+S b     & {\bf Both} post a followup to this article, and send a reply.\\
+%S o p   & Forward this article as a {\bf post} to a newsgroup.\\
+S s     & {\bf Supersede} this article with a new one (only for own
+articles).\\
+%S u     & {\bf Uuencode} a file and post it as a series.\\
+S B     & {\bf Both} post a followup, send a reply, and include the
+original. [p/p]\\
+%S O m   & Digest these series and forward by {\bf mail}. [p/p]\\
+%S O p   & Digest these series and forward as a {\bf post} to a newsgroup.
+%[p/p]\\
+%T \#    & Mark this thread with the process mark.\\
+%T d     & Move to the next article in this thread ({\bf down}). [distance]\\
+T h     & {\bf Hide} this (sub)thread.\\
+%T i     & {\bf Increase} the score of this thread.\\
+T s     & {\bf Show} the thread hidden under this article.\\
+%T u     & Move to the previous article in this {\bf thread ({\bf up}).
+%[distance]\\
+%T H     & {\bf Hide} all threads.\\
+%T S     & {\bf Show} all hidden threads.\\
+%V a     & {\bf Add} a new score entry, specifying all elements.\\
+%V c     & Specify a new score file as {\bf current}.\\
+%V e     & {\bf Edit} the current score alist.\\
+%V f     & Edit a score {\bf file} and make it the current one.\\
+%V m     & {\bf Mark} all articles below a given score as read.\\
+%V s     & {\bf Set} the score of this article.\\
+%V t     & Display all score rules applied to this article ({\bf trace}).\\
+%V x     & {\bf Expunge} all low-scored articles. [score]\\
+%V C     & {\bf Customize} the current score file through a user-friendly
+%interface.\\
+%V S     & Display the {\bf score} of this article.\\
+W b     & Make Message-IDs and URLs in the article to mouse-clickable {\bf
+  buttons}.\\
+%W c     & Remove extra {\bf CRs} (^M) from the article.\\
+%W f     & Look for and display any X-{\bf Face} headers.\\
+%W m     & Toggle {\bf MIME} processing.\\
+%W o     & Treat {\bf overstrike} or underline (^H\_) in the article.\\
+%W q     & Treat {\bf quoted}-printable in the article.\\
+W w     & Do {\bf word} wrap in the article.\\
+W T e   & Convert the article timestamp to time {\bf elapsed} since sent.\\
+W T l   & Convert the article timestamp to the {\bf local} timezone.\\
+W T u   & (W T z) Convert the article timestamp to {\bf UTC} ({\bf Zulu},
+GMT).\\
+W W a   & Hide unwanted parts of the article (citation, headers, signature).\\
+%W W c   & Hide article {\bf citation}.\\
+%W W h   & Hide article {\bf headers}.\\
+%W W s   & Hide article {\bf signature}.\\
+%W W C-c & Hide article {\bf citation} using a more intelligent algorithm.\\
+W H a   & Highlight {\bf all} parts of the article (citation, headers,
+signature).\\
+%W H c   & Highlight article {\bf citation}.\\
+%W H h   & Highlight article {\bf headers}.\\
+%W H s   & Highlight article {\bf signature}.\\
+%X b     & Un-{\bf binhex} these series. [p/p]\\
+%X o     & Simply {\bf output} these series (no decoding). [p/p]\\
+%X p     & Un{\bf pack} these {\bf postscript} series. [p/p]\\
+%X s     & Un-{\bf shar} these series. [p/p]\\
+%X u     & {\bf Uudecode} these series. [p/p]\\
+%X   \bf z & Decode these series. [p/p]\\
+%X   \bf Z & Decode and save these series. [p/p]\\
+%X v \bf z & Decode and view these series. [p/p]\\
+%X v \bf Z & Decode, save and view these series. [p/p]\\
+%Z n     & Mark all articles as read and go to the {\bf next} group.\\
+%Z C     & Mark all articles as read ({\bf catch-up}) and exit.\\
+%Z N     & Exit and go to the {\bf next} group.\\
+%Z P     & Exit and go to the {\bf previous} group.\\
+%Z R     & Exit this group, and then enter it again ({\bf reenter}). [Prefix:
+%select all articles, read and unread.]\\
+\end{keys}
+}
+
+\def\ArticleMode{
+\sec{Article Mode}
+{\samepage
+All keys for Summary mode also work in Article mode.
+Additional keys:
+
+\begin{keys}{C-c C-m}
+RET     & (middle mouse button) Activate the button at point to follow
+an URL or Message-ID.\\
+TAB     & Move the point to the next button.\\
+h       & (s) Go to the {\bf header} line of the article in the {\bf
+summary} buffer.\\
+C-c ^   & Get the article with the Message-ID near point.\\
+C-c C-m & {\bf Mail} reply to the address near point (prefix: include the
+original).\\
+\end{keys}
+}}
+
+\def\sec{\subsubsection*}
+\catcode`\^=7 % restore ^
+
+\documentstyle{article}
+\textwidth 7.26in \textheight 10in \topmargin -1.0in
+% the same settings work for A4, although there is a bit of space at the
+% top and bottom of the page.
+\oddsidemargin -0.5in \evensidemargin -0.5in
+\begin{document}
+\twocolumn\scriptsize\pagestyle{empty}
+
+{\centering\Logo{quickref}\qquad\qquad\Title}
+
+\vspace*{\fill}
+\Notes
+\GroupMode
+\ArticleMode
+\vspace*{\fill}
+\CopyRight
+\pagebreak
+
+\SummaryMode
+\end{document}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnusrefcard/refcard.tex	Mon Aug 13 09:42:26 2007 +0200
@@ -0,0 +1,83 @@
+% Reference Card for (ding) Gnus, 3 twocolumn pages.
+% To be processed with latex 2.09
+\def\Guide{Card}\def\guide{card}
+\def\logoscale{0.25}
+\def\sec{\section*}
+\def\subsec{\subsection*}
+\def\subsubsec{\subsubsection*}
+\documentstyle{article}
+\textwidth 7.26in \textheight 10.3in \topmargin -1.2in
+% the same settings work for A4, although there is a bit of space at the
+% top and bottom of the page.
+\oddsidemargin -0.5in \evensidemargin -0.5in
+\begin{document}
+\twocolumn\footnotesize\pagestyle{empty}
+\input{gnusref}
+
+\vspace*{\fill}
+\Title
+\vspace*{2ex}
+\Logo{refcard}
+\vspace*{\fill}
+\Marks
+\GroupLevels
+\pagebreak
+
+\Notes
+\General
+\ArticleMode
+\vspace*{\fill}
+\CopyRight
+\pagebreak
+
+\GroupMode
+\SOUP
+\pagebreak
+
+\ListGroups
+\CreateGroups
+\SortGroups
+\MarkGroups
+\pagebreak
+
+\Unsubscribe
+\GroupTopics
+\vspace*{\fill}
+\SummaryMode
+\SortSummary
+\Article
+\pagebreak
+
+\MailGroup
+\GotoArticle
+\Score
+\pagebreak
+
+\MarkArticles
+%\vspace*{-0.5ex}
+\MarkScore
+%\vspace*{-0.5ex}
+\ProcessMark
+%\vspace*{-0.5ex}
+\OutputArticles
+\pagebreak
+
+\Send
+%\vspace*{-1.1ex}
+\Thread
+%\vspace*{-1.1ex}
+\Exit
+\pagebreak
+
+\Wash
+\Hide
+\Highlight
+\Extract
+\pagebreak
+
+\Limit
+\PickAndRead
+\ServerMode
+\BrowseServer
+
+\end{document}
--- a/etc/mule/FAQ-Mule	Mon Aug 13 09:41:47 2007 +0200
+++ b/etc/mule/FAQ-Mule	Mon Aug 13 09:42:26 2007 +0200
@@ -1873,7 +1873,7 @@
      the following two lines in your .emacs.
 
      (load "quail/latin")
-     (quail-use-package "german")
+     (quail-use-package "quail-german")
 
   2) If you want to use the azerty layout for French, include the
      following two lines in your .emacs.
--- a/lib-src/ChangeLog	Mon Aug 13 09:41:47 2007 +0200
+++ b/lib-src/ChangeLog	Mon Aug 13 09:42:26 2007 +0200
@@ -1,3 +1,9 @@
+1997-06-13  Steven L Baur  <steve@altair.xemacs.org>
+
+	* update-elc.sh (mule_p): Ignore lisp/language when building
+	non-Mule.
+	(ignore_pattern): Ignore Languages we don't support yet.
+
 1997-06-02  Steven L Baur  <steve@altair.xemacs.org>
 
 	* update-elc.sh (ignore_dirs): Handle ported Quail (LEIM).
--- a/lib-src/update-elc.sh	Mon Aug 13 09:41:47 2007 +0200
+++ b/lib-src/update-elc.sh	Mon Aug 13 09:42:26 2007 +0200
@@ -76,7 +76,7 @@
 mule_p="`$EMACS -batch -no-site-file -eval \"$lisp_prog\"`"
 if test "$mule_p" = nil ; then
   echo No
-  ignore_dirs="$ignore_dirs its egg mule leim"
+  ignore_dirs="$ignore_dirs its egg mule language leim"
 else
   echo Yes
 fi
@@ -137,6 +137,20 @@
 \!/site-init.el$!d
 \!/version.el$!d
 \!/sunpro/sunpro-load.el$!d
+\!/language/devanagari.el$!d
+\!/language/ethiopic.el$!d
+\!/language/indian.el$!d
+\!/language/lao-util.el$!d
+\!/language/lao.el$!d
+\!/language/tibetan.el$!d
+\!/language/vietnamese.el$!d
+\!/leim/quail/devanagari.el$!d
+\!/leim/quail/ethiopic.el$!d
+\!/leim/quail/japanese.el$!d
+\!/leim/quail/lao.el$!d
+\!/leim/quail/lrt.el$!d
+\!/leim/quail/thai.el$!d
+\!/leim/quail/viqr.el$!d
 '
 
 echo "Compiling files without .elc..."
--- a/lisp/ChangeLog	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/ChangeLog	Mon Aug 13 09:42:26 2007 +0200
@@ -1,3 +1,81 @@
+1997-06-14  Steven L Baur  <steve@altair.xemacs.org>
+
+	* bytecomp/bytecomp.el (byte-compile-file): Suppress unavoidable
+	Ebola notices.
+
+1997-06-13  Steven L Baur  <steve@altair.xemacs.org>
+
+	* bytecomp/bytecomp.el (batch-byte-compile): Suppress unavoidable
+	Ebola notices.
+	(batch-byte-recompile-directory): Ditto.
+
+	* utils/lib-complete.el (read-library): Look for .el.gz if not
+	using Mule.
+	(get-library-path): Ditto.
+	Suggested by Jonathan Doughty <jwd@mitre.org>
+
+	* packages/add-log.el: Restore backwards compatible date behavior
+	as an option.
+	Eliminate XEmacs specific autoloads.
+	From Hrvoje Niksic <hniksic@srce.hr>
+	
+	* efs/dired.el (dired-save-excursion): Ebola cleanup.
+
+	* packages/hyper-apropos.el: Massive cleanup, Customize.
+	From Hrvoje Niksic <hniksic@srce.hr> 
+
+Fri Jun 13 13:20:39 1997  Kyle Jones  <kyle_jones@wonderworks.com>
+
+	* prim/syntax.el (symbol-near-point):
+	  Check for bobp and avoid (char-syntax (char-before)) if 
+	  there.
+
+1997-06-13  Steven L Baur  <steve@altair.xemacs.org>
+
+	* prim/rect.el (operate-on-rectangle): Correct boundary error.
+	From Bob Weiner <weiner@altrasoft.com>
+
+1997-06-12  Steven L Baur  <steve@altair.xemacs.org>
+
+	* packages/ispell.el (ispell-command-loop): De-Ebolify.
+
+	* x11/x-iso8859-1.el: Added Grave keysym.
+	From Heiko Muenkel <muenkel@tnt.uni-hannover.de>
+
+	* modes/make-mode.el (makefile-browse): Shouldn't be interactive.
+	From Hrvoje Niksic <hniksic@srce.hr>
+
+	* prim/files.el (interpreter-mode-alist): ksh-mode is obsoleted by 
+	sh-script.
+	From Hrvoje Niksic <hniksic@srce.hr>
+
+1997-06-11  Hrvoje Niksic  <hniksic@srce.hr>
+
+	* prim/subr.el (with-current-buffer): New macro.
+	(with-temp-file): Ditto.
+
+	* bytecomp/byte-optimize.el (byte-optimize-form-code-walker): Test 
+	for `save-current-buffer'.
+
+	* bytecomp/bytecomp.el: Recognize `save-current-buffer'.
+
+	* edebug/edebug.el: Register with-current-buffer and others.
+
+	* modes/lisp-mode.el: Added specs for save-current-buffer,
+ 	with-output-to-string, with-current-buffer, with-temp-file and
+ 	with-output-to-temp-buffer.
+
+1997-06-13  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* gnus/smiley.el (smiley-deformed-regexp-alist): Modify regexp for
+	horizontal smiley faces.
+	(smiley-nosey-regexp-alist): Add horizontal smiley faces.
+
+1997-06-13  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* leim/quail.el (quail-get-translation): Don't use
+	`string-to-vector' for XEmacs.
+
 1997-06-11  Steven L Baur  <steve@altair.xemacs.org>
 
 	* prim/help.el (function-called-at-point): Use char-(after|before)
--- a/lisp/bytecomp/byte-optimize.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/bytecomp/byte-optimize.el	Mon Aug 13 09:42:26 2007 +0200
@@ -433,7 +433,7 @@
 	       (cons (byte-optimize-form (nth 2 form) for-effect)
 		     (byte-optimize-body (cdr (cdr (cdr form))) t)))))
 	  
-	  ((memq fn '(save-excursion save-restriction))
+	  ((memq fn '(save-excursion save-restriction save-current-buffer))
 	   ;; those subrs which have an implicit progn; it's not quite good
 	   ;; enough to treat these like normal function calls.
 	   ;; This can turn (save-excursion ...) into (save-excursion) which
--- a/lisp/bytecomp/bytecomp.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/bytecomp/bytecomp.el	Mon Aug 13 09:42:26 2007 +0200
@@ -577,7 +577,9 @@
 (byte-defop 111  1 byte-bobp)
 (byte-defop 112  1 byte-current-buffer)
 (byte-defop 113  0 byte-set-buffer)
-(byte-defop 114  1 byte-read-char-OBSOLETE) ;obsolete as of v19
+(byte-defop 114  0 byte-save-current-buffer
+  "To make a binding to record the current buffer.")
+;;(byte-defop 114  1 byte-read-char-OBSOLETE) ;obsolete as of v19
 (byte-defop 115 -1 byte-memq) ; new as of v20
 (byte-defop 116  1 byte-interactive-p)
 
@@ -1477,6 +1479,7 @@
       (message "Compiling %s..." filename))
   (let (;;(byte-compile-current-file (file-name-nondirectory filename))
 	(byte-compile-current-file filename)
+	(debug-issue-ebola-notices 0) ; Hack -slb
 	target-file input-buffer output-buffer
 	byte-compile-dest-file)
     (setq target-file (byte-compile-dest-file filename))
@@ -3527,6 +3530,7 @@
 (byte-defop-compiler-1 unwind-protect)
 (byte-defop-compiler-1 condition-case)
 (byte-defop-compiler-1 save-excursion)
+(byte-defop-compiler-1 save-current-buffer)
 (byte-defop-compiler-1 save-restriction)
 (byte-defop-compiler-1 save-window-excursion)
 (byte-defop-compiler-1 with-output-to-temp-buffer)
@@ -3614,6 +3618,11 @@
   (byte-compile-body-do-effect (cdr form))
   (byte-compile-out 'byte-unbind 1))
 
+(defun byte-compile-save-current-buffer (form)
+  (byte-compile-out 'byte-save-current-buffer 0)
+  (byte-compile-body-do-effect (cdr form))
+  (byte-compile-out 'byte-unbind 1))
+
 (defun byte-compile-save-window-excursion (form)
   (byte-compile-push-constant
    (byte-compile-top-level-body (cdr form) for-effect))
@@ -3957,7 +3966,8 @@
   (defvar command-line-args-left)	;Avoid 'free variable' warning
   (if (not noninteractive)
       (error "`batch-byte-compile' is to be used only with -batch"))
-  (let ((error nil))
+  (let ((error nil)
+	(debug-issue-ebola-notices 0)) ; Hack -slb
     (while command-line-args-left
       (if (file-directory-p (expand-file-name (car command-line-args-left)))
 	  (let ((files (directory-files (car command-line-args-left)))
@@ -4011,7 +4021,8 @@
       (error "batch-byte-recompile-directory is to be used only with -batch"))
   (or command-line-args-left
       (setq command-line-args-left '(".")))
-  (let ((byte-recompile-directory-ignore-errors-p t))
+  (let ((byte-recompile-directory-ignore-errors-p t)
+	(debug-issue-ebola-notices 0))
     (while command-line-args-left
       (byte-recompile-directory (car command-line-args-left))
       (setq command-line-args-left (cdr command-line-args-left))))
--- a/lisp/custom/ChangeLog	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/custom/ChangeLog	Mon Aug 13 09:42:26 2007 +0200
@@ -1,6 +1,133 @@
-1997-06-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-	* wid-edit.el: Add widget `coding-system' for mule.
+Sat Jun 14 21:31:09 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.9916 released.
+
+Sat Jun 14 18:24:36 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* wid-edit.el (widget-tabable-at): New function.
+	(widget-move): Use it.
+	* wid-edit.el (widget-after-change): Reimplemented :secret.
+
+	* wid-edit.el (widget-field-add-space): New option.
+	(widget-specify-field): Use it.
+	(widget-field-end): Ditto.
+
+	* Version 1.9915 released.
+
+Sat Jun 14 12:12:38 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* wid-edit.el (widget-leave-text): New function.
+	(widget-convert-text): Use it.
+	(documentation-link): New widget.
+	(widget-documentation-link-action): New function.
+	(widget-documentation-links): New option.
+	(widget-documentation-link-regexp): New option.
+	(widget-documentation-link-p): New option.
+	(widget-documentation-link-type): New option.
+	(widget-documentation-link-add): New function.
+	(widget-documentation-string-value-create): Use it.
+
+	* all: Synched with FSF.
+
+Fri Jun 13 20:25:55 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.9914 released.
+
+1997-06-10  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+        * wid-edit.el: Add widget `coding-system' for mule.
+
+Fri Jun 13 14:28:41 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* wid-edit.el (widget-convert-text): New function.
+	(widget-convert-button): Ditto.
+
+	* custom.texi: Use ../info/custom as file name.
+	(Declaring Variables): Reformulation.
+	Ispelled.
+	* widget.texi: Use ../info/widget as file name.
+	Ispelled.
+	
+Thu Jun 12 19:22:22 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.9913 released.
+
+Thu Jun 12 12:15:33 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* wid-edit.el (widget-field-buffer): Don't assume an overlay
+	exists. 
+	(widget-field-start): Ditto.
+	(widget-field-end): Ditto.
+
+	* cus-face.el (custom-face-attributes-get): Protect against
+	missing w3 font functions.
+
+	* Version 1.9912 released.
+
+Thu Jun 12 12:14:30 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (custom-magic-faces): New group.
+	Added magic faces.
+	
+Wed Jun 11 20:15:33 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.9911 released.
+
+Wed Jun 11 14:35:58 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (custom-buffer): New group.
+	(custom-menu): New group
+	Updated options.
+	* wid-edit.el (widget-faces): New group.
+	Updated all faces.
+
+	* wid-edit.el (widget-map-buttons): New function.
+	Written by William M. Perry  <wmperry@aventail.com>.
+
+	* Version 1.9910 released.
+
+Wed Jun 11 13:35:16 1997  Simon Marshall  <simon@gnu.ai.mit.edu>
+
+	* cus-edit.el (custom-buffer-sort-predicate):
+	(custom-menu-sort-predicate): Default to ignore.  Rewrite :type form.
+	(custom-buffer-order-predicate):
+	(custom-menu-order-predicate): New variables.
+	(custom-buffer-sort-alphabetically):
+	(custom-menu-sort-alphabetically): Functions deleted.
+	(custom-sort-items-alphabetically): New function.  Like deleted
+	functions, except that A and B must be the same custom type.
+	(custom-sort-groups-first):
+	(custom-sort-groups-last): New functions.  Like deleted functions,
+	except that only A and B custom types are compared. 
+	(custom-group-value-create):
+	(custom-menu-create): Also sort members using custom-*-order-predicate.
+	But sort the copy of the stored sequence to prevent changing the stored
+	value, and don't store the sorted copy.
+
+Wed Jun 11 11:10:18 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.9909 released.
+
+Wed Jun 11 10:13:05 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* wid-edit.el (widget-specify-inactive): Don't set `mouse-face'.
+	(widget-setup): Don't use markers.
+
+Tue Jun 10 13:55:38 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* wid-edit.el (widget-default-format-handler): Cleanup.
+	(widget-documentation-string-value-create): Also use documentation
+ 	properties on single line documentation strings.
+
+Mon Jun  9 06:21:49 1997  William M. Perry  <wmperry@aventail.com>
+
+	* wid-browse.el (widget-minor-mode): Fixed mistake in
+	  widget-minor-mode - it had semantics of non-interactive calling
+	  reveresed.
+
+Wed Jun  4 13:44:33 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* all: Synched with FSF.
 
 Wed Jun 04 13:24:36 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
 
--- a/lisp/custom/cus-edit.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/custom/cus-edit.el	Mon Aug 13 09:42:26 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, faces
-;; Version: 1.9908
+;; Version: 1.9916
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;; This file is part of GNU Emacs.
@@ -246,6 +246,16 @@
   :group 'customize
   :group 'faces)
 
+(defgroup custom-buffer nil
+  "Control the customize buffers."
+  :prefix "custom-"
+  :group 'customize)
+
+(defgroup custom-menu nil
+  "Control how the customize menus."
+  :prefix "custom-"
+  :group 'customize)
+
 (defgroup abbrev-mode nil
   "Word abbreviations mode."
   :group 'abbrev)
@@ -367,7 +377,7 @@
 	 val)
      (setq val (completing-read 
 		(if (symbolp v)
-		    (format "Customize variable: (default %s) " v)
+		    (format "Customize option: (default %s) " v)
 		  "Customize variable: ")
 		obarray (lambda (symbol)
 			  (and (boundp symbol)
@@ -401,7 +411,7 @@
 
 (defcustom custom-unlispify-menu-entries t
   "Display menu entries as words instead of symbols if non nil."
-  :group 'customize
+  :group 'custom-menu
   :type 'boolean)
 
 (defun custom-unlispify-menu-entry (symbol &optional no-suffix)
@@ -440,7 +450,7 @@
 
 (defcustom custom-unlispify-tag-names t
   "Display tag names as words instead of symbols if non nil."
-  :group 'customize
+  :group 'custom-buffer
   :type 'boolean)
 
 (defun custom-unlispify-tag-name (symbol)
@@ -518,49 +528,59 @@
 
 ;;; Sorting.
 
-(defcustom custom-buffer-sort-predicate 'custom-buffer-sort-alphabetically
+(defcustom custom-buffer-sort-predicate 'ignore
+  "Function used for sorting group members in buffers.
+The value should be useful as a predicate for `sort'.  
+The list to be sorted is the value of the groups `custom-group' property."
+  :type '(radio (const :tag "Unsorted" ignore)
+		(const :tag "Alphabetic" custom-sort-items-alphabetically)
+		(function :tag "Other"))
+  :group 'custom-buffer)
+
+(defcustom custom-buffer-order-predicate 'custom-sort-groups-last
   "Function used for sorting group members in buffers.
 The value should be useful as a predicate for `sort'.  
 The list to be sorted is the value of the groups `custom-group' property."
-  :type '(radio (function-item custom-buffer-sort-alphabetically)
+  :type '(radio (const :tag "Groups first" custom-sort-groups-first)
+		(const :tag "Groups last" custom-sort-groups-last)
 		(function :tag "Other"))
-  :group 'customize)
+  :group 'custom-buffer)
 
-(defun custom-buffer-sort-alphabetically (a b)
-  "Return t iff is A should be before B.
-A and B should be members of a `custom-group' property. 
-The members are sorted alphabetically, except that all groups are
-sorted after all non-groups."
-  (cond ((and (eq (nth 1 a) 'custom-group) 
-	      (not (eq (nth 1 b) 'custom-group)))
-	 nil)
-	((and (eq (nth 1 b) 'custom-group) 
-	      (not (eq (nth 1 a) 'custom-group)))
-	 t)
-	(t
-	 (string-lessp (symbol-name (nth 0 a)) (symbol-name (nth 0 b))))))
+(defcustom custom-menu-sort-predicate 'ignore
+  "Function used for sorting group members in menus.
+The value should be useful as a predicate for `sort'.  
+The list to be sorted is the value of the groups `custom-group' property."
+  :type '(radio (const :tag "Unsorted" ignore)
+		(const :tag "Alphabetic" custom-sort-items-alphabetically)
+		(function :tag "Other"))
+  :group 'custom-menu)
 
-(defcustom custom-menu-sort-predicate 'custom-menu-sort-alphabetically
+(defcustom custom-menu-order-predicate 'custom-sort-groups-first
   "Function used for sorting group members in menus.
 The value should be useful as a predicate for `sort'.  
 The list to be sorted is the value of the groups `custom-group' property."
-  :type '(radio (function-item custom-menu-sort-alphabetically)
+  :type '(radio (const :tag "Groups first" custom-sort-groups-first)
+		(const :tag "Groups last" custom-sort-groups-last)
 		(function :tag "Other"))
-  :group 'customize)
+  :group 'custom-menu)
+
+(defun custom-sort-items-alphabetically (a b)
+  "Return t iff A is alphabetically before B and the same custom type.
+A and B should be members of a `custom-group' property."
+  (and (eq (nth 1 a) (nth 1 b))
+       (string-lessp (symbol-name (nth 0 a)) (symbol-name (nth 0 b)))))
 
-(defun custom-menu-sort-alphabetically (a b)
-  "Return t iff is A should be before B.
-A and B should be members of a `custom-group' property. 
-The members are sorted alphabetically, except that all groups are
-sorted before all non-groups."
-  (cond ((and (eq (nth 1 a) 'custom-group) 
-	      (not (eq (nth 1 b) 'custom-group)))
-	 t)
-	((and (eq (nth 1 b) 'custom-group) 
-	      (not (eq (nth 1 a) 'custom-group)))
-	 nil)
-	(t
-	 (string-lessp (symbol-name (nth 0 a)) (symbol-name (nth 0 b))))))
+(defun custom-sort-groups-first (a b)
+  "Return t iff A a custom group and B is a not.
+A and B should be members of a `custom-group' property."
+  (and (eq (nth 1 a) 'custom-group)
+       (not (eq (nth 1 b) 'custom-group))))
+
+(defun custom-sort-groups-last (a b)
+  "Return t iff B a custom group and A is a not.
+A and B should be members of a `custom-group' property."
+  (and (eq (nth 1 b) 'custom-group)
+       (not (eq (nth 1 a) 'custom-group))))
 
 ;;; Custom Mode Commands.
 
@@ -897,7 +917,7 @@
   "If non-nil, only show a single reset button in customize buffers.
 This button will have a menu with all three reset operations."
   :type 'boolean
-  :group 'customize)
+  :group 'custom-buffer)
 
 (defun custom-buffer-create-internal (options)
   (message "Creating customization buffer...")
@@ -1017,38 +1037,49 @@
 
 ;;; The `custom-magic' Widget.
 
+(defgroup custom-magic-faces nil
+  "Faces used by the magic button."
+  :group 'custom-faces
+  :group 'custom-buffer)
+
 (defface custom-invalid-face '((((class color))
 				(:foreground "yellow" :background "red"))
 			       (t
 				(:bold t :italic t :underline t)))
-  "Face used when the customize item is invalid.")
+  "Face used when the customize item is invalid."
+  :group 'custom-magic-faces)
 
 (defface custom-rogue-face '((((class color))
 			      (:foreground "pink" :background "black"))
 			     (t
 			      (:underline t)))
-  "Face used when the customize item is not defined for customization.")
+  "Face used when the customize item is not defined for customization."
+  :group 'custom-magic-faces)
 
 (defface custom-modified-face '((((class color)) 
 				 (:foreground "white" :background "blue"))
 				(t
 				 (:italic t :bold)))
-  "Face used when the customize item has been modified.")
+  "Face used when the customize item has been modified."
+  :group 'custom-magic-faces)
 
 (defface custom-set-face '((((class color)) 
 				(:foreground "blue" :background "white"))
 			       (t
 				(:italic t)))
-  "Face used when the customize item has been set.")
+  "Face used when the customize item has been set."
+  :group 'custom-magic-faces)
 
 (defface custom-changed-face '((((class color)) 
 				(:foreground "white" :background "blue"))
 			       (t
 				(:italic t)))
-  "Face used when the customize item has been changed.")
+  "Face used when the customize item has been changed."
+  :group 'custom-magic-faces)
 
 (defface custom-saved-face '((t (:underline t)))
-  "Face used when the customize item has been saved.")
+  "Face used when the customize item has been saved."
+  :group 'custom-magic-faces)
 
 (defconst custom-magic-alist '((nil "#" underline "\
 uninitialized, you should not see this.")
@@ -1123,7 +1154,7 @@
   :type '(choice (const :tag "no" nil)
 		 (const short)
 		 (const long))
-  :group 'customize)
+  :group 'custom-buffer)
 
 (defcustom custom-magic-show-hidden '(option face)
   "Control whether the state button is shown for hidden items.
@@ -1131,12 +1162,12 @@
 button should be visible.  Possible categories are `group', `option',
 and `face'."
   :type '(set (const group) (const option) (const face))
-  :group 'customize)
+  :group 'custom-buffer)
 
 (defcustom custom-magic-show-button nil
   "Show a magic button indicating the state of each customization option."
   :type 'boolean
-  :group 'customize)
+  :group 'custom-buffer)
 
 (define-widget 'custom-magic 'default
   "Show and manipulate state for a customization option."
@@ -2176,8 +2207,9 @@
       (custom-load-widget widget)
       (let* ((level (widget-get widget :custom-level))
 	     (symbol (widget-value widget))
-	     (members (sort (get symbol 'custom-group) 
-			    custom-buffer-sort-predicate))
+	     (members (sort (sort (copy-sequence (get symbol 'custom-group))
+				  custom-buffer-sort-predicate)
+			    custom-buffer-order-predicate))
 	     (prefixes (widget-get widget :custom-prefixes))
 	     (custom-prefix-list (custom-prefix-add symbol prefixes))
 	     (length (length members))
@@ -2199,7 +2231,6 @@
 				   (unless (eq (preceding-char) ?\n)
 				     (widget-insert "\n"))))
 			       members)))
-	(put symbol 'custom-group members)
 	(message "Creating group magic...")
 	(mapcar 'custom-magic-reset children)
 	(message "Creating group state...")
@@ -2465,7 +2496,7 @@
 (defcustom custom-menu-nesting 2
   "Maximum nesting in custom menus."
   :type 'integer
-  :group 'customize)
+  :group 'custom-menu)
 
 (defun custom-face-menu-create (widget symbol)
   "Ignoring WIDGET, create a menu entry for customization face SYMBOL."
@@ -2518,9 +2549,9 @@
 	     (< (length (get symbol 'custom-group)) widget-menu-max-size))
 	(let ((custom-prefix-list (custom-prefix-add symbol
 						     custom-prefix-list))
-	      (members (sort (get symbol 'custom-group)
-			     custom-menu-sort-predicate)))
-	  (put symbol 'custom-group members)
+	      (members (sort (sort (copy-sequence (get symbol 'custom-group))
+				   custom-menu-sort-predicate)
+			     custom-menu-order-predicate)))
 	  (custom-load-symbol symbol)
 	  `(,(custom-unlispify-menu-entry symbol t)
 	    ,item
@@ -2579,7 +2610,7 @@
 (defcustom custom-mode-hook nil
   "Hook called when entering custom-mode."
   :type 'hook
-  :group 'customize)
+  :group 'custom-buffer )
 
 (defun custom-mode ()
   "Major mode for editing customization buffers.
--- a/lisp/custom/cus-face.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/custom/cus-face.el	Mon Aug 13 09:42:26 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, faces
-;; Version: 1.9908
+;; Version: 1.9916
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;;; Commentary:
@@ -332,11 +332,14 @@
       (setq att (car atts)
 	    atts (cdr atts)
 	    get (nth 3 att))
-      (when get 
-	(let ((answer (funcall get face frame)))
-	  (unless (equal answer (funcall get 'default frame))
-	    (when (widget-apply (nth 1 att) :match answer)
-	      (setq result (cons (nth 0 att) (cons answer result))))))))
+      (condition-case nil
+	  ;; This may fail if w3 doesn't exists.
+	  (when get 
+	    (let ((answer (funcall get face frame)))
+	      (unless (equal answer (funcall get 'default frame))
+		(when (widget-apply (nth 1 att) :match answer)
+		  (setq result (cons (nth 0 att) (cons answer result)))))))
+	(error nil)))
     result))
 
 (defun custom-set-face-bold (face value &optional frame)
--- a/lisp/custom/custom.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/custom/custom.el	Mon Aug 13 09:42:26 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, faces
-;; Version: 1.9908
+;; Version: 1.9916
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;; This file is part of GNU Emacs.
--- a/lisp/custom/wid-browse.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/custom/wid-browse.el	Mon Aug 13 09:42:26 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: extensions
-;; Version: 1.9908
+;; Version: 1.9916
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;; This file is part of GNU Emacs.
@@ -282,7 +282,7 @@
   (interactive "P")
   (cond ((null arg)
 	 (setq widget-minor-mode (not widget-minor-mode)))
-	((<= 0 arg)
+	((<= arg 0)
 	 (setq widget-minor-mode nil))
 	(t
 	 (setq widget-minor-mode t)))
--- a/lisp/custom/wid-edit.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/custom/wid-edit.el	Mon Aug 13 09:42:26 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: extensions
-;; Version: 1.9908
+;; Version: 1.9916
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;; This file is part of GNU Emacs.
@@ -123,17 +123,36 @@
 		   "http://www.dina.kvl.dk/~abraham/custom/")
   :prefix "widget-"
   :group 'extensions
-  :group 'faces
   :group 'hypermedia)
 
+(defgroup widget-documentation nil
+  "Options controling the display of documentation strings."
+  :group 'widgets)
+
+(defgroup widget-faces nil
+  "Faces used by the widget library."
+  :group 'widgets
+  :group 'faces)
+
+(defface widget-documentation-face '((((class color)
+				       (background dark))
+				      (:foreground "lime green"))
+				     (((class color)
+				       (background light))
+				      (:foreground "dark green"))
+				     (t nil))
+  "Face used for documentation text."
+  :group 'widget-documentation
+  :group 'widget-faces)
+
 (defface widget-button-face '((t (:bold t)))
   "Face used for widget buttons."
-  :group 'widgets)
+  :group 'widget-faces)
 
 (defcustom widget-mouse-face 'highlight
   "Face used for widget buttons when the mouse is above them."
   :type 'face
-  :group 'widgets)
+  :group 'widget-faces)
 
 (defface widget-field-face '((((class grayscale color)
 			       (background light))
@@ -144,7 +163,7 @@
 			     (t 
 			      (:italic t)))
   "Face used for editable fields."
-  :group 'widgets)
+  :group 'widget-faces)
 
 ;;; Utility functions.
 ;;
@@ -253,6 +272,19 @@
 				     'start-open nil
 				     'end-open nil)))
 
+(defcustom widget-field-add-space 
+  (or (< emacs-major-version 20)
+      (and (eq emacs-major-version 20)
+	   (< emacs-minor-version 3))
+      (not (string-match "XEmacs" emacs-version)))
+  "Non-nil means add extra space at the end of editable text fields.
+
+This is needed on all versions of Emacs, and on XEmacs before 20.3.  
+If you don't add the space, it will become impossible to edit a zero
+size field."
+  :type 'boolean
+  :group 'widgets)
+
 (defun widget-specify-field (widget from to)
   "Specify editable button for WIDGET between FROM and TO."
   (put-text-property from to 'read-only nil)
@@ -261,7 +293,8 @@
   ;; at the end of the overlay.
   (save-excursion
     (goto-char to)
-    (insert-and-inherit " ")
+    (when widget-field-add-space
+      (insert-and-inherit " "))
     (setq to (point)))
   (add-text-properties (1- to) to ;to (1+ to) 
   		       '(front-sticky nil start-open t read-only to))
@@ -315,7 +348,6 @@
       (add-text-properties from to (list 'start-open t
 					 'end-open t
 					 'face face)))))
-
 (defun widget-specify-doc (widget from to)
   ;; Specify documentation for WIDGET between FROM and TO.
   (add-text-properties from to (list 'widget-doc widget
@@ -347,14 +379,15 @@
 				(t 
 				 (:italic t)))
   "Face used for inactive widgets."
-  :group 'widgets)
+  :group 'widget-faces)
 
 (defun widget-specify-inactive (widget from to)
   "Make WIDGET inactive for user modifications."
   (unless (widget-get widget :inactive)
     (let ((overlay (make-overlay from to nil t nil)))
       (overlay-put overlay 'face 'widget-inactive-face)
-      (overlay-put overlay 'mouse-face 'widget-inactive-face)
+      ;; This is disabled, as it makes the mouse cursor change shape.
+      ;; (overlay-put overlay 'mouse-face 'widget-inactive-face)
       (overlay-put overlay 'evaporate t)
       (overlay-put overlay 'priority 100)
       (overlay-put overlay (if (string-match "XEmacs" emacs-version)
@@ -474,6 +507,26 @@
 	  (throw 'child child)))
       nil)))
 
+(defun widget-map-buttons (function &optional buffer maparg)
+  "Map FUNCTION over the buttons in BUFFER.
+FUNCTION is called with the arguments WIDGET and MAPARG.
+
+If FUNCTION returns non-nil, the walk is cancelled.
+
+The arguments MAPARG, and BUFFER default to nil and (current-buffer),
+respectively."
+  (let ((cur (point-min))
+	(widget nil)
+	(parent nil)
+	(overlays (if buffer
+		      (save-excursion (set-buffer buffer) (overlay-lists))
+		    (overlay-lists))))
+    (setq overlays (append (car overlays) (cdr overlays)))
+    (while (setq cur (pop overlays))
+      (setq widget (overlay-get cur 'button))
+      (if (and widget (funcall function widget maparg))
+	  (setq overlays nil)))))
+
 ;;; Glyphs.
 
 (defcustom widget-glyph-directory (concat data-directory "custom/")
@@ -720,6 +773,48 @@
     (apply 'insert args)
     (widget-specify-text from (point))))
 
+(defun widget-convert-text (type from to
+				 &optional button-from button-to
+				 &rest args)
+  "Return a widget of type TYPE with endpoint FROM TO.
+Optional ARGS are extra keyword arguments for TYPE.
+and TO will be used as the widgets end points. If optional arguments
+BUTTON-FROM and BUTTON-TO are given, these will be used as the widgets
+button end points.
+Optional ARGS are extra keyword arguments for TYPE."
+  (let ((widget (apply 'widget-convert type :delete 'widget-leave-text args))
+	(from (copy-marker from))
+	(to (copy-marker to)))
+    (widget-specify-text from to)
+    (set-marker-insertion-type from t)
+    (set-marker-insertion-type to nil)
+    (widget-put widget :from from)
+    (widget-put widget :to to)
+    (when button-from
+      (widget-specify-button widget button-from button-to))
+    widget))
+
+(defun widget-convert-button (type from to &rest args)
+  "Return a widget of type TYPE with endpoint FROM TO.
+Optional ARGS are extra keyword arguments for TYPE.
+No text will be inserted to the buffer, instead the text between FROM
+and TO will be used as the widgets end points, as well as the widgets
+button end points."
+  (apply 'widget-convert-text type from to from to args))
+
+(defun widget-leave-text (widget)
+  "Remove markers and overlays from WIDGET and its children."
+  (let ((from (widget-get widget :from))
+	(to (widget-get widget :to))
+	(button (widget-get widget :button-overlay))
+	(field (widget-get widget :field-overlay))
+	(children (widget-get widget :children)))
+    (set-marker from nil)
+    (set-marker to nil)
+    (delete-overlay button)
+    (delete-overlay field)
+    (mapcar 'widget-leave-text children)))
+
 ;;; Keymap and Commands.
 
 (defvar widget-keymap nil
@@ -783,7 +878,7 @@
     (t
      (:bold t :underline t)))
   "Face used for pressed buttons."
-  :group 'widgets)
+  :group 'widget-faces)
 
 (defun widget-button-click (event)
   "Invoke button below mouse pointer."
@@ -892,14 +987,29 @@
 	(when (commandp command)
 	  (call-interactively command))))))
 
+(defun widget-tabable-at (&optional pos)
+  "Return the tabable widget at POS, or nil.
+POS defaults to the value of (point)."
+  (unless pos
+    (setq pos (point)))
+  (let ((widget (or (get-char-property (point) 'button)
+		    (get-char-property (point) 'field))))
+    (if widget
+	(let ((order (widget-get widget :tab-order)))
+	  (if order
+	      (if (>= order 0)
+		  widget
+		nil)
+	    widget))
+      nil)))
+
 (defun widget-move (arg)
   "Move point to the ARG next field or button.
 ARG may be negative to move backward."
   (or (bobp) (> arg 0) (backward-char))
   (let ((pos (point))
 	(number arg)
-	(old (or (get-char-property (point) 'button)
-		 (get-char-property (point) 'field)))
+	(old (widget-tabable-at))
 	new)
     ;; Forward.
     (while (> arg 0)
@@ -909,13 +1019,10 @@
       (and (eq pos (point))
 	   (eq arg number)
 	   (error "No buttons or fields found"))
-      (let ((new (or (get-char-property (point) 'button)
-		     (get-char-property (point) 'field))))
+      (let ((new (widget-tabable-at)))
 	(when new
 	  (unless (eq new old)
-	    (unless (and (widget-get new :tab-order)
-			 (< (widget-get new :tab-order) 0))
-	      (setq arg (1- arg)))
+	    (setq arg (1- arg))
 	    (setq old new)))))
     ;; Backward.
     (while (< arg 0)
@@ -925,16 +1032,13 @@
       (and (eq pos (point))
 	   (eq arg number)
 	   (error "No buttons or fields found"))
-      (let ((new (or (get-char-property (point) 'button)
-		     (get-char-property (point) 'field))))
+      (let ((new (widget-tabable-at)))
 	(when new
 	  (unless (eq new old)
-	    (unless (and (widget-get new :tab-order)
-			 (< (widget-get new :tab-order) 0))
-	      (setq arg (1+ arg)))))))
-    (while  (or (get-char-property (point) 'button)
-		(get-char-property (point) 'field))
-      (backward-char))
+	    (setq arg (1+ arg))))))
+    (let ((new (widget-tabable-at)))
+      (while (eq (widget-tabable-at) new)
+	(backward-char)))
     (forward-char))
   (widget-echo-help (point))
   (run-hooks 'widget-move-hook))
@@ -1017,7 +1121,8 @@
 	    widget-field-list (cons field widget-field-list))
       (let ((from (car (widget-get field :field-overlay)))
 	    (to (cdr (widget-get field :field-overlay))))
-	(widget-specify-field field from to)
+	(widget-specify-field field 
+			      (marker-position from) (marker-position to))
 	(set-marker from nil)
 	(set-marker to nil))))
   (widget-clear-undo)
@@ -1037,16 +1142,21 @@
 
 (defun widget-field-buffer (widget)
   "Return the start of WIDGET's editing field."
-  (overlay-buffer (widget-get widget :field-overlay)))
+  (let ((overlay (widget-get widget :field-overlay)))
+    (and overlay (overlay-buffer overlay))))
 
 (defun widget-field-start (widget)
   "Return the start of WIDGET's editing field."
-  (overlay-start (widget-get widget :field-overlay)))
+  (let ((overlay (widget-get widget :field-overlay)))
+    (and overlay (overlay-start overlay))))
 
 (defun widget-field-end (widget)
   "Return the end of WIDGET's editing field."
-  ;; Don't subtract one if local-map works at the end of the overlay.
-  (1- (overlay-end (widget-get widget :field-overlay))))
+  (let ((overlay (widget-get widget :field-overlay)))
+    ;; Don't subtract one if local-map works at the end of the overlay.
+    (and overlay (if widget-field-add-space
+		     (1- (overlay-end overlay))
+		   (overlay-end overlay)))))
 
 (defun widget-field-find (pos)
   "Return the field at POS.
@@ -1072,7 +1182,8 @@
 	(when field
 	  (unless (eq field other)
 	    (debug "Change in different fields"))
-	  (let ((size (widget-get field :size)))
+	  (let ((size (widget-get field :size))
+		(secret (widget-get field :secret)))
 	    (when size 
 	      (let ((begin (widget-field-start field))
 		    (end (widget-field-end field)))
@@ -1093,7 +1204,20 @@
 			 (goto-char end)
 			 (while (and (eq (preceding-char) ?\ )
 				     (> (point) begin))
-			   (delete-backward-char 1))))))))
+			   (delete-backward-char 1)))))))
+	    (when secret
+	      (let ((begin (widget-field-start field))
+		    (end (widget-field-end field)))
+		(when size 
+		  (while (and (> end begin)
+			      (eq (char-after (1- end)) ?\ ))
+		    (setq end (1- end))))
+		(while (< begin end)
+		  (let ((old (char-after begin)))
+		    (unless (eq old secret)
+		      (subst-char-in-region begin (1+ begin) old secret)
+		      (put-text-property begin (1+ begin) 'secret old))
+		    (setq begin (1+ begin)))))))
 	  (widget-apply field :notify field)))
     (error (debug "After Change"))))
 
@@ -1253,32 +1377,34 @@
 
 (defun widget-default-format-handler (widget escape)
   ;; We recognize the %h escape by default.
-  (let* ((buttons (widget-get widget :buttons))
-	 (doc-property (widget-get widget :documentation-property))
-	 (doc-try (cond ((widget-get widget :doc))
-			((symbolp doc-property)
-			 (documentation-property (widget-get widget :value)
-						 doc-property))
-			(t
-			 (funcall doc-property (widget-get widget :value)))))
-	 (doc-text (and (stringp doc-try)
-			(> (length doc-try) 1)
-			doc-try)))
+  (let* ((buttons (widget-get widget :buttons)))
     (cond ((eq escape ?h)
-	   (when doc-text
-	     (and (eq (preceding-char) ?\n)
-		  (widget-get widget :indent)
-		  (insert-char ?  (widget-get widget :indent)))
-	     ;; The `*' in the beginning is redundant.
-	     (when (eq (aref doc-text  0) ?*)
-	       (setq doc-text (substring doc-text 1)))
-	     ;; Get rid of trailing newlines.
-	     (when (string-match "\n+\\'" doc-text)
-	       (setq doc-text (substring doc-text 0 (match-beginning 0))))
-	     (push (widget-create-child-and-convert
-		    widget 'documentation-string
-		    doc-text)
-		   buttons)))
+	   (let* ((doc-property (widget-get widget :documentation-property))
+		  (doc-try (cond ((widget-get widget :doc))
+				 ((symbolp doc-property)
+				  (documentation-property 
+				   (widget-get widget :value)
+				   doc-property))
+				 (t
+				  (funcall doc-property
+					   (widget-get widget :value)))))
+		  (doc-text (and (stringp doc-try)
+				 (> (length doc-try) 1)
+				 doc-try)))
+	     (when doc-text
+	       (and (eq (preceding-char) ?\n)
+		    (widget-get widget :indent)
+		    (insert-char ?  (widget-get widget :indent)))
+	       ;; The `*' in the beginning is redundant.
+	       (when (eq (aref doc-text  0) ?*)
+		 (setq doc-text (substring doc-text 1)))
+	       ;; Get rid of trailing newlines.
+	       (when (string-match "\n+\\'" doc-text)
+		 (setq doc-text (substring doc-text 0 (match-beginning 0))))
+	       (push (widget-create-child-and-convert
+		      widget 'documentation-string
+		      doc-text)
+		     buttons))))
 	  (t 
 	   (error "Unknown escape `%c'" escape)))
     (widget-put widget :buttons buttons)))
@@ -2466,18 +2592,61 @@
       (widget-glyph-insert widget off "right" "right-pushed")
       (insert "..."))))
 
+;;; The `documentation-link' Widget.
+
+(define-widget 'documentation-link 'link
+  "Link type used in documentation strings."
+  :action 'widget-documentation-link-action)
+
+(defun widget-documentation-link-action (widget &optional event)
+  "Run apropos on WIDGET's value.  Ignore optional argument EVENT."
+  (apropos (concat "\\`" (regexp-quote (widget-get widget :value)) "\\'")))
+
+(defcustom widget-documentation-links t
+  "Add hyperlinks to documentation strings when non-nil."
+  :type 'boolean
+  :group 'widget-documentation)
+
+(defcustom widget-documentation-link-regexp "`\\([^\n`' ]+\\)'"
+  "Regexp for matching potential links in documentation strings.
+The first group should be the link itself."
+  :type 'regexp
+  :group 'widget-documentation)
+
+(defcustom widget-documentation-link-p 'intern-soft
+  "Predicate used to test if a string is useful as a link.
+The value should be a function.  The function will be called one
+argument, a string, and should return non-nil if there should be a
+link for that string."
+  :type 'function
+  :options '(widget-documentation-link-p)
+  :group 'widget-documentation)
+
+(defcustom widget-documentation-link-type 'documentation-link
+  "Widget type used for links in documentation strings."
+  :type 'symbol
+  :group 'widget-documentation)
+
+(defun widget-documentation-link-add (widget from to)
+  (widget-specify-doc widget from to)
+  (when widget-documentation-links
+    (let ((regexp widget-documentation-link-regexp)
+	  (predicate widget-documentation-link-p)
+	  (type widget-documentation-link-type)
+	  (buttons (widget-get widget :buttons)))
+      (save-excursion
+	(goto-char (point-min))
+	(while (re-search-forward regexp to t)
+	  (let ((name (match-string 1))
+		(begin (match-beginning 0))
+		(end (match-end 0)))
+	    (when (funcall predicate name)
+	      (push (widget-convert-button type begin end :value name)
+		    buttons)))))
+      (widget-put widget :buttons buttons))))
+
 ;;; The `documentation-string' Widget.
 
-(defface widget-documentation-face '((((class color)
-				       (background dark))
-				      (:foreground "lime green"))
-				     (((class color)
-				       (background light))
-				      (:foreground "dark green"))
-				     (t nil))
-  "Face used for documentation text."
-  :group 'widgets)
-
 (define-widget 'documentation-string 'item
   "A documentation string."
   :format "%v"
@@ -2488,14 +2657,14 @@
 (defun widget-documentation-string-value-create (widget)
   ;; Insert documentation string.
   (let ((doc (widget-value widget))
-	(shown (widget-get (widget-get widget :parent) :documentation-shown)))
+	(shown (widget-get (widget-get widget :parent) :documentation-shown))
+	(start (point)))
     (if (string-match "\n" doc)
 	(let ((before (substring doc 0 (match-beginning 0)))
 	      (after (substring doc (match-beginning 0)))
-	      (start (point))
 	      buttons)
 	  (insert before " ")
-	  (widget-specify-doc widget start (point))
+	  (widget-documentation-link-add widget start (point))
 	  (push (widget-create-child-and-convert
 		 widget 'visibility
 		 :off nil
@@ -2505,9 +2674,10 @@
 	  (when shown
 	    (setq start (point))
 	    (insert after)
-	    (widget-specify-doc widget start (point)))
+	    (widget-documentation-link-add widget start (point)))
 	  (widget-put widget :buttons buttons))
-      (insert doc)))
+      (insert doc)
+      (widget-documentation-link-add widget start (point))))
   (insert "\n"))
 
 (defun widget-documentation-string-action (widget &rest ignore)
--- a/lisp/custom/widget-example.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/custom/widget-example.el	Mon Aug 13 09:42:26 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, extensions, faces, hypermedia
-;; Version: 1.9908
+;; Version: 1.9916
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 (require 'widget)
--- a/lisp/custom/widget.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/custom/widget.el	Mon Aug 13 09:42:26 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, extensions, faces, hypermedia
-;; Version: 1.9908
+;; Version: 1.9916
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;; This file is part of GNU Emacs.
--- a/lisp/edebug/edebug.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/edebug/edebug.el	Mon Aug 13 09:42:26 2007 +0200
@@ -29,7 +29,7 @@
 ;; LCD Archive Entry:
 ;; edebug|Daniel LaLiberte|liberte@cs.uiuc.edu
 ;; |A source level debugger for Emacs Lisp.
-;; |$Date: 1997/04/24 03:59:43 $|$Revision: 1.5 $|~/modes/edebug.el|
+;; |$Date: 1997/06/14 20:30:57 $|$Revision: 1.6 $|~/modes/edebug.el|
 
 ;; This minor mode allows programmers to step through Emacs Lisp
 ;; source code while executing functions.  You can also set
@@ -87,7 +87,7 @@
 ;;; Code:
 
 (defconst edebug-version
-  (let ((raw-version "$Revision: 1.5 $"))
+  (let ((raw-version "$Revision: 1.6 $"))
     (substring raw-version (string-match "[0-9.]*" raw-version)
 	       (match-end 0))))
      
@@ -2164,6 +2164,14 @@
 (def-edebug-spec eval-when-compile t)
 (def-edebug-spec eval-and-compile t)
 
+(def-edebug-spec save-selected-window t)
+(def-edebug-spec save-current-buffer t)
+(def-edebug-spec save-match-data t)
+(def-edebug-spec with-output-to-string t)
+(def-edebug-spec with-current-buffer t)
+(def-edebug-spec with-temp-file t)
+(def-edebug-spec with-temp-buffer t)
+
 ;; Anything else?
 
 
--- a/lisp/efs/dired.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/efs/dired.el	Mon Aug 13 09:42:26 2007 +0200
@@ -739,7 +739,7 @@
 	   ;; the proper column.
 	   (goto-char (, temp-bolm))
 	   (and (not (, temp-fnlp))
-		(not (eq (following-char) 0)) (memq (following-char) '(?\n ?\r))
+		(memq (char-after (point)) '(?\n ?\r))
 		;; The line containing the point got deleted. Note that this
 		;; logic only works if we don't delete null lines, but we never
 		;; do.
--- a/lisp/gnus/ChangeLog	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/gnus/ChangeLog	Mon Aug 13 09:42:26 2007 +0200
@@ -1,3 +1,9 @@
+1997-06-13  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+	* smiley.el (smiley-deformed-regexp-alist): Modify regexp for
+	horizontal smiley faces.
+	(smiley-nosey-regexp-alist): Add horizontal smiley faces.
+
 1997-06-10  Steven L Baur  <steve@altair.xemacs.org>
 
 	* nntp.el (nntp-wait-for): Replace following-char with char-after.
--- a/lisp/gnus/smiley.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/gnus/smiley.el	Mon Aug 13 09:42:26 2007 +0200
@@ -53,12 +53,12 @@
 ;; two alists below.
 
 (defcustom smiley-deformed-regexp-alist
-  '(("\\(\\^_?\\^;;;\\)\\W" 1 "Face_ase3.xbm")
-    ("\\(\\^_?\\^;;\\)\\W" 1 "Face_ase2.xbm")
-    ("\\(\\^_?\\^;\\)\\W" 1 "Face_ase.xbm")
-    ("\\(\\^_?\\^\\)\\W" 1 "Face_smile.xbm")
-    ("\\(\\;_;\\)\\W" 1 "Face_weep.xbm")
-    ("\\(\\T_T\\)\\W" 1 "Face_weep.xbm")
+  '(("(?\\(\\^_?\\^;;;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase3.xbm")
+    ("(?\\(\\^_?\\^;;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase2.xbm")
+    ("(?\\(\\^_?\\^;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase.xbm")
+    ("(\\(\\^_?\\^\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_smile.xbm")
+    ("(\\(;_?;\\))" 1 "Face_weep.xbm")
+    ("(\\(T_?T\\))" 1 "Face_weep.xbm")
     ("\\(:-*[<«]+\\)\\W" 1 "FaceAngry.xpm")
     ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm")
     ("\\(:-*D\\)\\W" 1 "FaceGrinning.xpm")
@@ -81,7 +81,13 @@
   :group 'smiley)
 
 (defcustom smiley-nosey-regexp-alist
-  '(("\\(:-+[<«]+\\)\\W" 1 "FaceAngry.xpm")
+  '(("(?\\(\\^_?\\^;;;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase3.xbm")
+    ("(?\\(\\^_?\\^;;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase2.xbm")
+    ("(?\\(\\^_?\\^;\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_ase.xbm")
+    ("(\\(\\^_?\\^\\)\\()\\|\\W\\|[^\000-\177]\\)" 1 "Face_smile.xbm")
+    ("(\\(;_?;\\))" 1 "Face_weep.xbm")
+    ("(\\(T_?T\\))" 1 "Face_weep.xbm")
+    ("\\(:-+[<«]+\\)\\W" 1 "FaceAngry.xpm")
     ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm")
     ("\\(:-+D\\)\\W" 1 "FaceGrinning.xpm")
     ("\\(:-+[}»]+\\)\\W" 1 "FaceHappy.xpm")
--- a/lisp/modes/ada-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/ada-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -3308,8 +3308,6 @@
       ;; Casing
       (define-key ada-mode-map "\C-c\C-r" 'ada-adjust-case-region)
       (define-key ada-mode-map "\C-c\C-b" 'ada-adjust-case-buffer)
-;; GDF - don't rebind the DEL key
-;;      (define-key ada-mode-map "\177"     'backward-delete-char-untabify)
 
       ;; Use predefined function of emacs19 for comments (RE)
       (define-key ada-mode-map "\C-c;"    'comment-region)
--- a/lisp/modes/arc-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/arc-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -494,7 +494,8 @@
   (define-key archive-mode-map "\M-\C-?" 'archive-unmark-all-files)
   (define-key archive-mode-map "v" 'archive-view)
   (define-key archive-mode-map "x" 'archive-expunge)
-  (define-key archive-mode-map "\177" 'archive-unflag-backwards)
+  (define-key archive-mode-map 'backspace 'archive-unflag-backwards)
+  (define-key archive-mode-map 'delete 'archive-unflag-backwards)
   (define-key archive-mode-map "E" 'archive-extract-other-window)
   (define-key archive-mode-map "M" 'archive-chmod-entry)
   (define-key archive-mode-map "G" 'archive-chgrp-entry)
--- a/lisp/modes/cperl-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/cperl-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -32,7 +32,7 @@
 ;;; Corrections made by Ilya Zakharevich ilya@math.mps.ohio-state.edu
 ;;; XEmacs changes by Peter Arius arius@informatik.uni-erlangen.de
 
-;; $Id: cperl-mode.el,v 1.10 1997/06/11 19:25:59 steve Exp $
+;; $Id: cperl-mode.el,v 1.11 1997/06/14 20:31:09 steve Exp $
 
 ;;; To use this mode put the following into your .emacs file:
 
@@ -713,7 +713,8 @@
   (cperl-define-key "\e\C-q" 'cperl-indent-exp) ; Usually not bound
   ;;(cperl-define-key "\M-q" 'cperl-fill-paragraph)
   ;;(cperl-define-key "\e;" 'cperl-indent-for-comment)
-  (cperl-define-key 'delete 'cperl-electric-backspace)
+  (cperl-define-key 'backspace 'cperl-electric-backspace)
+  (cperl-define-key 'delete 'cperl-electric-delete)
   (cperl-define-key "\t" 'cperl-indent-command)
   ;; don't clobber the backspace binding:
   (cperl-define-key "\C-hf" 'cperl-info-on-command [(control h) f])
@@ -1548,7 +1549,23 @@
 
 (defun cperl-electric-backspace (arg)
   "Backspace-untabify, or remove the whitespace inserted by an electric key."
-  (interactive "*P")
+  (interactive "*p")
+  (if (and cperl-auto-newline 
+	   (memq last-command '(cperl-electric-semi 
+				cperl-electric-terminator
+				cperl-electric-lbrace))
+	   (memq (preceding-char) '(?  ?\t ?\n)))
+      (let (p)
+	(if (eq last-command 'cperl-electric-lbrace) 
+	    (skip-chars-forward " \t\n"))
+	(setq p (point))
+	(skip-chars-backward " \t\n")
+	(delete-region (point) p))
+    (backward-delete-char-untabify arg)))
+
+(defun cperl-electric-delete (arg)
+  "Backspace-untabify, or remove the whitespace inserted by an electric key."
+  (interactive "*p")
   (if (and cperl-auto-newline 
 	   (memq last-command '(cperl-electric-semi 
 				cperl-electric-terminator
@@ -1561,8 +1578,8 @@
 	(skip-chars-backward " \t\n")
 	(delete-region (point) p))
     (if (fboundp 'backward-or-forward-delete-char)
-	(backward-or-forward-delete-char (prefix-numeric-value arg))
-      (backward-delete-char-untabify (prefix-numeric-value arg)))))
+	(backward-or-forward-delete-char arg)
+      (backward-delete-char-untabify arg))))
 
 (defun cperl-inside-parens-p ()
   (condition-case ()
--- a/lisp/modes/icon.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/icon.el	Mon Aug 13 09:42:26 2007 +0200
@@ -46,8 +46,6 @@
   (define-key icon-mode-map "\e\C-a" 'beginning-of-icon-defun)
   (define-key icon-mode-map "\e\C-e" 'end-of-icon-defun)
   (define-key icon-mode-map "\e\C-q" 'indent-icon-exp)
-;; GDF - Don't rebind the DEL key
-;; (define-key icon-mode-map "\177" 'backward-delete-char-untabify)  
   (define-key icon-mode-map "\t" 'icon-indent-command))
 
 (defvar icon-mode-syntax-table nil
--- a/lisp/modes/ksh-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/ksh-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -24,7 +24,7 @@
 ;; LCD Archive Entry:
 ;; ksh-mode|Gary F. Ellison|Gary.F.Ellison@ATT.COM
 ;; |Mode for editing sh/ksh/bash scripts
-;; |$Date: 1997/05/23 01:36:24 $|$Revision: 1.3 $|~/modes/ksh-mode.el.Z|
+;; |$Date: 1997/06/14 20:31:11 $|$Revision: 1.4 $|~/modes/ksh-mode.el.Z|
 
 ;; Author: Gary F. Ellison <Gary.F.Ellison@ATT.COM>
 ;;                   AT&T  Laboratories
@@ -33,10 +33,10 @@
 ;;
 ;; Maintainer: Gary F. Ellison <Gary.F.Ellison@ATT.COM>
 ;; Created: Fri Jun 19
-;; $Revision: 1.3 $
+;; $Revision: 1.4 $
 ;; Keywords: shell, korn, bourne, sh, ksh, bash
 ;;
-;; Delta On   $Date: 1997/05/23 01:36:24 $
+;; Delta On   $Date: 1997/06/14 20:31:11 $
 ;; Last Modified By: Gary Ellison
 ;; Last Modified On: Mon Sep 11 12:26:47 1995
 ;; Update Count    : 35
@@ -231,7 +231,7 @@
 ;;    Conception of this mode.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defconst ksh-mode-version "$Revision: 1.3 $"
+(defconst ksh-mode-version "$Revision: 1.4 $"
   "*Version numbers of this version of ksh-mode")
 
 ;;
@@ -459,7 +459,6 @@
   (setq ksh-mode-map (make-sparse-keymap))
   (define-key ksh-mode-map "\t"    'ksh-indent-command)
 ;;  (define-key ksh-mode-map "\t"    'ksh-indent-line)
-;;  (define-key ksh-mode-map "\177"    'backward-delete-char-untabify)
   (define-key ksh-mode-map "\C-j"    'reindent-then-newline-and-indent)
   (define-key ksh-mode-map "\e\t"    'ksh-complete-symbol)
   (define-key ksh-mode-map "\C-c\t"    'ksh-completion-init-and-pickup)
@@ -468,7 +467,7 @@
 
 ;;;###autoload
 (defun ksh-mode ()
-  "ksh-mode $Revision: 1.3 $ - Major mode for editing (Bourne, Korn or Bourne again)
+  "ksh-mode $Revision: 1.4 $ - Major mode for editing (Bourne, Korn or Bourne again)
 shell scripts.
 Special key bindings and commands:
 \\{ksh-mode-map}
--- a/lisp/modes/lisp-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/lisp-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -202,9 +202,6 @@
    ;; XEmacs changes
    (set-keymap-name shared-lisp-mode-map 'shared-lisp-mode-map)
    (define-key shared-lisp-mode-map "\M-;" 'lisp-indent-for-comment)
-;; GDF - don't rebind the DEL key
-;;  (define-key shared-lisp-mode-map "\177" 'backward-delete-char-untabify)
-
    (define-key shared-lisp-mode-map "\e\C-q" 'indent-sexp))
 
 (defvar emacs-lisp-mode-map ()
@@ -713,6 +710,10 @@
 (put 'catch 'lisp-indent-function 1)
 (put 'condition-case 'lisp-indent-function 2)
 (put 'unwind-protect 'lisp-indent-function 1)
+(put 'save-current-buffer 'lisp-indent-function 0)
+(put 'with-current-buffer 'lisp-indent-function 1)
+(put 'with-temp-file 'lisp-indent-function 1)
+(put 'with-output-to-string 'lisp-indent-function 0)
 (put 'with-output-to-temp-buffer 'lisp-indent-function 1)
 
 (defun indent-sexp (&optional endpos)
--- a/lisp/modes/make-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/make-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -1140,7 +1140,6 @@
   (setq buffer-read-only t))
 
 (defun makefile-browse (targets macros)
-  (interactive)
   (if (zerop (+ (length targets) (length macros)))
       (progn
 	(beep)
--- a/lisp/modes/pascal.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/pascal.el	Mon Aug 13 09:42:26 2007 +0200
@@ -88,8 +88,6 @@
   (define-key pascal-mode-map "\t"       'electric-pascal-tab)
   (define-key pascal-mode-map "\M-\t"    'pascal-complete-word)
   (define-key pascal-mode-map "\M-?"     'pascal-show-completions)
-;; GDF - don't rebind the delete key.
-;;  (define-key pascal-mode-map "\177"     'backward-delete-char-untabify)
   (define-key pascal-mode-map "\M-\C-h"  'pascal-mark-defun)
   (define-key pascal-mode-map "\C-c\C-b" 'pascal-insert-block)
   (define-key pascal-mode-map "\M-*"     'pascal-star-comment)
--- a/lisp/modes/perl-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/perl-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -120,8 +120,6 @@
   (define-key perl-mode-map "\e\C-e" 'perl-end-of-function)
   (define-key perl-mode-map "\e\C-h" 'mark-perl-function)
   (define-key perl-mode-map "\e\C-q" 'indent-perl-exp)
-;; GDF - Don't rebind the delete key  
-;;  (define-key perl-mode-map "\177" 'backward-delete-char-untabify)
   (define-key perl-mode-map "\t" 'perl-indent-command))
 
 (autoload 'c-macro-expand "cmacexp"
--- a/lisp/modes/python-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/python-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -304,8 +304,7 @@
 	    ("\C-c\C-c"  . py-execute-buffer)
 	    ("\C-c|"	 . py-execute-region)
 	    ("\C-c!"	 . py-shell)
-;; GDF - Don't rebind the delete key	    
-;;	    ("\177"	 . py-delete-char)
+	    ('backspace	 . py-delete-char)
 	    ("\n"	 . py-newline-and-indent)
 	    ("\C-c:"	 . py-guess-indent-offset)
 	    ("\C-c\t"	 . py-indent-region)
--- a/lisp/modes/scheme.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/scheme.el	Mon Aug 13 09:42:26 2007 +0200
@@ -121,8 +121,6 @@
 
 (defun scheme-mode-commands (map)
   (define-key map "\t" 'scheme-indent-line)
-;; GDF - Don't rebind the delete key  
-;;  (define-key map "\177" 'backward-delete-char-untabify)
   (define-key map "\e\C-q" 'scheme-indent-sexp))
 
 (defvar scheme-mode-map nil)
--- a/lisp/modes/simula.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/simula.el	Mon Aug 13 09:42:26 2007 +0200
@@ -123,8 +123,6 @@
   (define-key simula-mode-map "\C-c\C-n"   'simula-next-statement)
   ;(define-key simula-mode-map "\C-c\C-g"   'simula-goto-definition)
   ;(define-key simula-mode-map "\C-c\C-h"   'simula-standard-help)
-;; GDF - Don't mess with DEL  
-;;  (define-key simula-mode-map "\177"       'backward-delete-char-untabify)
   (define-key simula-mode-map ":"          'simula-electric-label)
   (define-key simula-mode-map "\t"         'simula-indent-command))
 
--- a/lisp/modes/tcl.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/tcl.el	Mon Aug 13 09:42:26 2007 +0200
@@ -565,8 +565,6 @@
   ;; FIXME.
   (define-key tcl-mode-map "\e\C-h" 'tcl-mark-defun)
   (define-key tcl-mode-map "\e\C-q" 'indent-tcl-exp)
-;; GDF - Don't mess with the DEL key
-;;  (define-key tcl-mode-map "\177" 'backward-delete-char-untabify)
   (define-key tcl-mode-map "\t" 'tcl-indent-command)
   (define-key tcl-mode-map "\M-;" 'tcl-indent-for-comment)
   (define-key tcl-mode-map "\M-\C-x" 'tcl-eval-defun)
@@ -591,8 +589,6 @@
     'comint-dynamic-list-filename-completions)
   (define-key inferior-tcl-mode-map "\e\C-a" 'tcl-beginning-of-defun)
   (define-key inferior-tcl-mode-map "\e\C-e" 'tcl-end-of-defun)
-;; GDF - Don't mess with the DEL key
-;;  (define-key inferior-tcl-mode-map "\177" 'backward-delete-char-untabify)
   (define-key inferior-tcl-mode-map "\M-\C-x" 'tcl-eval-defun)
   (define-key inferior-tcl-mode-map "\C-c\C-b" 'tcl-submit-bug-report)
   (define-key inferior-tcl-mode-map "\C-c\C-i" 'tcl-help-on-word)
--- a/lisp/modes/verilog-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/verilog-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -1,6 +1,6 @@
 ;;; verilog-mode.el --- major mode for editing verilog source in Emacs
 ;;
-;; $Header: /afs/informatik.uni-tuebingen.de/local/web/xemacs/xemacs-cvs/XEmacs/xemacs/lisp/modes/Attic/verilog-mode.el,v 1.5 1997/05/29 23:49:56 steve Exp $
+;; $Header: /afs/informatik.uni-tuebingen.de/local/web/xemacs/xemacs-cvs/XEmacs/xemacs/lisp/modes/Attic/verilog-mode.el,v 1.6 1997/06/14 20:31:18 steve Exp $
 
 ;; Copyright (C) 1996 Free Software Foundation, Inc.
 
@@ -70,7 +70,7 @@
 (provide 'verilog-mode)
 
 ;; This variable will always hold the version number of the mode
-(defconst verilog-mode-version "$$Revision: 1.5 $$"
+(defconst verilog-mode-version "$$Revision: 1.6 $$"
   "Version of this verilog mode.")
 
 ;;
@@ -264,8 +264,6 @@
   (define-key verilog-mode-map "\M-\C-f"  'electric-verilog-forward-sexp)
   (define-key verilog-mode-map "\M-\r"    (function (lambda ()
 		      (interactive) (electric-verilog-terminate-line 1))))
-;; GDF - Leave the DEL key alone
-;;  (define-key verilog-mode-map "\177"     'backward-delete-char-untabify)
   (define-key verilog-mode-map "\M-\t"    'verilog-complete-word)
   (define-key verilog-mode-map "\M-?"     'verilog-show-completions)
   (define-key verilog-mode-map "\M-\C-h"  'verilog-mark-defun)
--- a/lisp/modes/vhdl-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/vhdl-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -7,8 +7,8 @@
 ;; Author:	  Rodney J. Whitby <rwhitby@asc.corp.mot.com>
 ;; Maintainer:	  Rodney J. Whitby <rwhitby@asc.corp.mot.com>
 ;; Created:	  June 1994, adapted from cc-mode.el 4.29 by Barry A. Warsaw.
-;; Version:	  $Revision: 1.4 $
-;; Last Modified: $Date: 1997/06/06 00:57:20 $
+;; Version:	  $Revision: 1.5 $
+;; Last Modified: $Date: 1997/06/14 20:31:18 $
 ;; Keywords:	  languages VHDL
 ;; Archive:	  ftp.eda.com.au:/pub/emacs/vhdl-mode.tar.gz
 
@@ -69,7 +69,7 @@
 ;; LCD Archive Entry:
 ;; vhdl-mode.el|Rodney J. Whitby|rwhitby@asc.corp.mot.com
 ;; |Major mode for editing VHDL code
-;; |$Date: 1997/06/06 00:57:20 $|$Revision: 1.4 $
+;; |$Date: 1997/06/14 20:31:18 $|$Revision: 1.5 $
 ;; |ftp.eda.com.au:/pub/emacs/vhdl-mode.tar.gz
 
 
@@ -347,8 +347,6 @@
   (define-key vhdl-mode-map "\M-\C-h"	'vhdl-mark-defun)
   (define-key vhdl-mode-map "\M-\C-q"	'vhdl-indent-sexp)
   (define-key vhdl-mode-map "\t"        'vhdl-indent-command)
-;; GDF - leave the DEL key alone!
-;;  (define-key vhdl-mode-map "\177"      'backward-delete-char-untabify)
   ;; these are new keybindings, with no counterpart to BOCM
   (define-key vhdl-mode-map "\C-c\C-b"  'vhdl-submit-bug-report)
   (define-key vhdl-mode-map "\C-c\C-c"  'comment-region)
@@ -540,7 +538,7 @@
 ;;;###autoload
 (defun vhdl-mode ()
   "Major mode for editing VHDL code.
-vhdl-mode $Revision: 1.4 $
+vhdl-mode $Revision: 1.5 $
 To submit a problem report, enter `\\[vhdl-submit-bug-report]' from a
 vhdl-mode buffer.  This automatically sets up a mail buffer with version
 information already added.  You just need to add a description of the
@@ -2594,7 +2592,7 @@
 
 ;; Defuns for submitting bug reports:
 
-(defconst vhdl-version "$Revision: 1.4 $"
+(defconst vhdl-version "$Revision: 1.5 $"
   "vhdl-mode version number.")
 (defconst vhdl-mode-help-address "rwhitby@asc.corp.mot.com"
   "Address accepting submission of bug reports.")
--- a/lisp/modes/vrml-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/modes/vrml-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -98,8 +98,6 @@
       (define-key vrml-mode-map "{" 'vrml-electric-brace)
       (define-key vrml-mode-map "}" 'vrml-electric-brace)
       (define-key vrml-mode-map "\e\C-q" 'indent-vrml-exp)
-;; GDF - why does EVERYONE want to rebind the DEL key?  *sigh*
-;;      (define-key vrml-mode-map "\177" 'backward-delete-char-untabify)
       (define-key vrml-mode-map "\t" 'vrml-indent-command)
       (define-key vrml-mode-map "\M-;" 'vrml-indent-for-comment)
       ))
--- a/lisp/packages/add-log.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/packages/add-log.el	Mon Aug 13 09:42:26 2007 +0200
@@ -32,18 +32,17 @@
 (defgroup change-log nil
   "Change log maintenance"
   :group 'tools
+  :group 'maint
   :prefix "change-log-"
   :prefix "add-log-")
 
 
-;;;###autoload
 (defcustom change-log-default-name nil
   "*Name of a change log file for \\[add-change-log-entry]."
   :type '(choice (const :tag "default" nil)
 		 string)
   :group 'change-log)
 
-;;;###autoload
 (defcustom add-log-current-defun-function nil
   "\
 *If non-nil, function to guess name of current function from surrounding text.
@@ -52,7 +51,6 @@
   :type 'boolean
   :group 'change-log)
 
-;;;###autoload
 (defcustom add-log-full-name nil
   "*Full name of user, for inclusion in ChangeLog daily headers.
 This defaults to the value returned by the `user-full-name' function."
@@ -60,11 +58,6 @@
 		 string)
   :group 'change-log)
 
-;; XEmacs;
-;; So that the dump-time value doesn't go into loaddefs.el with the autoload.
-(or add-log-full-name (setq add-log-full-name (user-full-name)))
-
-;;;###autoload
 (defcustom add-log-mailing-address nil
   "*Electronic mail address of user, for inclusion in ChangeLog daily headers.
 This defaults to the value of `user-mail-address'."
@@ -72,10 +65,16 @@
 		 string)
   :group 'change-log)
 
-;; XEmacs:
-;; So that the dump-time value doesn't go into loaddefs.el with the autoload.
-(or add-log-mailing-address
-    (setq add-log-mailing-address (user-mail-address)))
+(defcustom add-log-time-format 'iso8601-time-string
+  "*Function that defines the time format.
+For example, `iso8601-time-string' (time in international ISO 8601 format)
+and `current-time-string' are valid values."
+  :type '(radio (const :tag "International ISO 8601 format" iso8601-time-string)
+		(const :tag "Old format, as returned by `current-time-string'"
+		       current-time-string)
+		(function :tag "Other"))
+  :group 'change-log)
+
 
 (defvar change-log-font-lock-keywords
   '(;;
@@ -130,6 +129,20 @@
 		  (t "%c%02d"))
 	    sign hh mm ss)))
 
+(defun iso8601-time-string ()
+  (if change-log-time-zone-rule
+      (let ((tz (getenv "TZ"))
+	    (now (current-time)))
+	(unwind-protect
+	    (progn
+	      (set-time-zone-rule
+	       change-log-time-zone-rule)
+	      (concat
+	       (format-time-string "%Y-%m-%d " now)
+	       (iso8601-time-zone now)))
+	  (set-time-zone-rule tz)))
+    (format-time-string "%Y-%m-%d")))
+
 (defun change-log-name ()
   (or change-log-default-name
       (if (eq system-type 'vax-vms) 
@@ -211,6 +224,7 @@
   (set (make-local-variable 'change-log-default-name) file-name)
   file-name)
 
+
 ;;;###autoload
 (defun add-change-log-entry (&optional whoami file-name other-window new-entry)
   "Find change log file and add an entry for today.
@@ -259,18 +273,7 @@
 	(change-log-mode))
     (undo-boundary)
     (goto-char (point-min))
-    (let ((new-entry (concat (if change-log-time-zone-rule
-				 (let ((tz (getenv "TZ"))
-				       (now (current-time)))
-				   (unwind-protect
-				       (progn
-					 (set-time-zone-rule
-					  change-log-time-zone-rule)
-					 (concat
-					  (format-time-string "%Y-%m-%d " now)
-					  (iso8601-time-zone now)))
-				     (set-time-zone-rule tz)))
-			       (format-time-string "%Y-%m-%d"))
+    (let ((new-entry (concat (funcall add-log-time-format)
 			     "  " add-log-full-name
 			     "  <" add-log-mailing-address ">")))
       (if (looking-at (regexp-quote new-entry))
--- a/lisp/packages/bookmark.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/packages/bookmark.el	Mon Aug 13 09:42:26 2007 +0200
@@ -1443,7 +1443,8 @@
   (define-key bookmark-bmenu-mode-map " " 'next-line)
   (define-key bookmark-bmenu-mode-map "n" 'next-line)
   (define-key bookmark-bmenu-mode-map "p" 'previous-line)
-  (define-key bookmark-bmenu-mode-map "\177" 'bookmark-bmenu-backup-unmark)
+  (define-key bookmark-bmenu-mode-map 'backspace 'bookmark-bmenu-backup-unmark)
+  (define-key bookmark-bmenu-mode-map 'delete 'bookmark-bmenu-backup-unmark)
   (define-key bookmark-bmenu-mode-map "?" 'describe-mode)
   (define-key bookmark-bmenu-mode-map "u" 'bookmark-bmenu-unmark)
   (define-key bookmark-bmenu-mode-map "m" 'bookmark-bmenu-mark)
--- a/lisp/packages/buff-menu.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/packages/buff-menu.el	Mon Aug 13 09:42:26 2007 +0200
@@ -88,7 +88,8 @@
   (define-key Buffer-menu-mode-map " " 'next-line)
   (define-key Buffer-menu-mode-map "n" 'next-line)
   (define-key Buffer-menu-mode-map "p" 'previous-line)
-  (define-key Buffer-menu-mode-map "\177" 'Buffer-menu-backup-unmark)
+  (define-key Buffer-menu-mode-map 'backspace 'Buffer-menu-backup-unmark)
+  (define-key Buffer-menu-mode-map 'delete 'Buffer-menu-backup-unmark)
   (define-key Buffer-menu-mode-map "~" 'Buffer-menu-not-modified)
   (define-key Buffer-menu-mode-map "?" 'describe-mode)
   (define-key Buffer-menu-mode-map "u" 'Buffer-menu-unmark)
--- a/lisp/packages/chistory.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/packages/chistory.el	Mon Aug 13 09:42:26 2007 +0200
@@ -142,7 +142,8 @@
   (define-key command-history-map "x" 'command-history-repeat)
   (define-key command-history-map "\n" 'next-line)
   (define-key command-history-map "\r" 'next-line)
-  (define-key command-history-map "\177" 'previous-line))
+  (define-key command-history-map 'backspace 'previous-line)
+  (define-key command-history-map 'delete 'previous-line))
 
 (defun command-history-repeat ()
   "Repeat the command shown on the current line.
--- a/lisp/packages/diff.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/packages/diff.el	Mon Aug 13 09:42:26 2007 +0200
@@ -2,7 +2,7 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; File:         diff.el
-;; Version:      $Revision: 1.5 $
+;; Version:      $Revision: 1.6 $
 ;; Author:       This file is based on diff.el by
 ;;               sunpitt!wpmstr!fbresz@Sun.COM 1/27/89.
 ;;               It has been completely rewritten in July 1994 by
@@ -125,7 +125,8 @@
   (define-key diff-mode-map "w" 'diff-find-file-other-frame)
   (define-key diff-mode-map "\C-c\C-c" 'diff-find-file-other-window)
   (define-key diff-mode-map " " 'diff-advertised-scroll-up)
-  (define-key diff-mode-map "\177" 'diff-advertised-scroll-down)
+  (define-key diff-mode-map 'backspace 'diff-advertised-scroll-down)
+  (define-key diff-mode-map 'delete 'diff-advertised-scroll-down)
   (define-key diff-mode-map "\C-n" 'diff-next-line)
   (define-key diff-mode-map "\C-p" 'diff-previous-line)
   (define-key diff-mode-map "\M->" 'diff-end-of-buffer)
--- a/lisp/packages/hexl.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/packages/hexl.el	Mon Aug 13 09:42:26 2007 +0200
@@ -697,8 +697,10 @@
   (define-key hexl-mode-map [deletechar] 'undefined)
   (define-key hexl-mode-map [deleteline] 'undefined)
   (define-key hexl-mode-map [insertline] 'undefined)
+  (define-key hexl-mode-map [(shift backspace)] 'undefined)
   (define-key hexl-mode-map [(shift delete)] 'undefined)
-  (define-key hexl-mode-map "\177" 'undefined)
+  (define-key hexl-mode-map 'backspace 'undefined)
+  (define-key hexl-mode-map 'delete 'undefined)
 
   (define-key hexl-mode-map "\C-a" 'hexl-beginning-of-line)
   (define-key hexl-mode-map "\C-b" 'hexl-backward-char)
--- a/lisp/packages/hyper-apropos.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/packages/hyper-apropos.el	Mon Aug 13 09:42:26 2007 +0200
@@ -55,18 +55,20 @@
 ;; added support for function aliases, made programmer's apropos be the
 ;; default, various other hacking.
 ;; Massive changes by Christoph Wedler <wedler@fmi.uni-passau.de>
+;; Some changes for XEmacs 20.3 by hniksic
 
 ;;; Code:
 
-(or (fboundp 'pprint)
-    (progn (autoload 'pp "pp")
-	   (fset 'pprint 'pp)))
-;;(require 'tags "etags")
+(require 'pp)
 
 (defgroup hyper-apropos nil
   "Hypertext emacs lisp documentation interface."
   :prefix "hypropos-"
-  :group 'docs)
+  :group 'docs
+  :group 'lisp
+  :group 'tools
+  :group 'help
+  :group 'matching)
 
 ;;;###autoload
 (defcustom hypropos-show-brief-docs t
@@ -75,6 +77,15 @@
   :type 'boolean
   :group 'hyper-apropos)
 
+;; I changed this to true because I think it's more useful this way. --ben
+
+(defcustom hypropos-programming-apropos t
+  "*If non-nil, then `hyper-apropos' takes a bit longer and generates more
+output.  If nil, then only functions that are interactive and variables that
+are user variables are found by `hyper-apropos'."
+  :type 'boolean
+  :group 'hyper-apropos)
+
 (defcustom hypropos-shrink-window nil
   "*If non-nil, shrink *Hyper Help* buffer if possible."
   :type 'boolean
@@ -85,133 +96,105 @@
   :type 'boolean
   :group 'hyper-apropos)
 
-;; I changed this to true because I think it's more useful this way. --ben
+
+(defgroup hypropos-faces nil
+  "Faces defined by hyper-apropos."
+  :prefix "hypropos-"
+  :group 'hyper-apropos)
+
+
+(defface hypropos-documentation '((((class color) (background light))
+				   (:foreground "darkred"))
+				  (((class color) (background dark))
+				   (:foreground "gray90")))
+  "Hyper-apropos documentation."
+  :group 'hypropos-faces)
 
-(defcustom hypropos-programming-apropos t
-  "*If non-nil, then `hyper-apropos' takes a bit longer and generates more
-output.  If nil, then only functions that are interactive and variables that
-are user variables are found by `hyper-apropos'."
-  :type 'boolean
-  :group 'hyper-apropos)
+(defface hypropos-hyperlink '((((class color) (background light))
+			       (:foreground "blue4"))
+			      (((class color) (background dark))
+			       (:foreground "lightseagreen"))
+			      (t
+			       (:bold t)))
+  "Hyper-apropos hyperlinks."
+  :group 'hypropos-faces)
+
+(defface hypropos-major-heading '((t (:bold t)))
+  "Hyper-apropos major heading."
+  :group 'hypropos-faces)
+
+(defface hypropos-section-heading '((t (:bold t :italic t)))
+  "Hyper-apropos section heading."
+  :group 'hypropos-faces)
+
+(defface hypropos-heading '((t (:bold t)))
+  "Hyper-apropos heading."
+  :group 'hypropos-faces)
+
+(defface hypropos-warning '((t (:bold t :foreground "red")))
+  "Hyper-apropos warning."
+  :group 'hypropos-faces)
+
+
+;;; Internal variables below this point
 
 (defvar hypropos-ref-buffer)
 (defvar hypropos-prev-wconfig)
 
-;; #### - move this to subr.el
-(or (fboundp 'event-buffer)
-    (defun event-buffer (event)
-      "Returns the buffer associated with event, or nil."
-      (let ((win (event-window event)))
-	(and win (window-buffer win)))))
-
-(defmacro eval-in-buffer (buffer &rest forms)
-  "Evaluate FORMS in BUFFER."
-  (` (let ((_unwind_buf_ (current-buffer)))
-       (unwind-protect
-	   (progn (set-buffer (, buffer))
-		  (,@ forms))
-	 (set-buffer _unwind_buf_)))))
-(put 'eval-in-buffer 'lisp-indent-function 'defun)
-	 
-;; #### - move to faces.el
-(defmacro init-face (face &rest init-forms)
-  "Make a FACE if it doesn't already exist.  Then if it does not differ from
-the default face, execute INIT-FORMS to initialize the face.  While the
-init-forms are executing, the symbol `this' is bound to the face-object
-being initialized." 
-  (` (let ((this (make-face (, face))))	; harmless if the face is already there
-     (or (face-differs-from-default-p this)
-	 (, (cons 'progn init-forms))))))
-(put 'init-face 'lisp-indent-function 'defun)
-
-(init-face 'hyperlink
-  (copy-face 'bold this)
-  ;;(set-face-underline-p this nil) -- dog slow and ugly
-  (condition-case nil
-      (set-face-foreground this "blue")
-    (error nil)))
-(init-face 'documentation
-  (let* ((ff-instance (face-font-instance 'default))
-	(ff (and ff-instance (font-instance-name ff-instance))))
-    (cond ((and ff (string-match "courier" ff))
-	   ;; too wide unless you shrink it
-	   ;; (copy-face 'italic this) fugly.
-	   ;; (make-face-smaller this) fugly.
-	   ))
-    (condition-case nil
-	(set-face-foreground this "firebrick")
-      (error (copy-face 'italic this)))))
-
-;; mucking with the sizes of fonts (perhaps with the exception of courier or
-;; misc) is a generally losing thing to do.  Changing the size of 'clean'
-;; really loses, for instance...
-
-(init-face 'major-heading
-  (copy-face 'bold this)
-  (make-face-larger this)
-  (make-face-larger this))
-(init-face 'section-heading
-  (copy-face 'bold this)
-  (make-face-larger this))
-(init-face 'heading
-  (copy-face 'bold this))
-(init-face 'standout
-  (copy-face 'italic this))
-
-(init-face 'warning
-  (copy-face 'bold this)
-  (and (eq (device-type) 'x)
-       (eq (device-class) 'color)
-       (set-face-foreground this "red")))
-
-(defvar hypropos-help-map (let ((map (make-sparse-keymap)))
-			    (suppress-keymap map)
-			    (set-keymap-name map 'hypropos-help-map)
-			    ;; movement
-			    (define-key map " "     'scroll-up)
-			    (define-key map "b"     'scroll-down)
-			    (define-key map [delete] 'scroll-down)
-			    (define-key map [backspace] 'scroll-down)
-			    (define-key map "/"     'isearch-forward)
-			    (define-key map "?"     'isearch-backward)
-			    ;; follow links
-			    (define-key map "\r"    'hypropos-get-doc)
-			    (define-key map "s"     'hypropos-set-variable)
-			    (define-key map "t"     'hypropos-find-tag)
-			    (define-key map "l"     'hypropos-last-help)
-			    (define-key map [button2] 'hypropos-mouse-get-doc)
-			    (define-key map [button3] 'hypropos-popup-menu)
-			    ;; for the totally hardcore...
-			    (define-key map "D"     'hypropos-disassemble)
-			    ;; administrativa
-			    (define-key map "a"     'hyper-apropos)
-			    (define-key map "n"     'hyper-apropos)
-			    (define-key map "q"     'hypropos-quit)
-			    map
-			    )
+(defvar hypropos-help-map
+  (let ((map (make-sparse-keymap)))
+    (suppress-keymap map)
+    (set-keymap-name map 'hypropos-help-map)
+    ;; movement
+    (define-key map " "     'scroll-up)
+    (define-key map "b"     'scroll-down)
+    (define-key map [delete] 'scroll-down)
+    (define-key map [backspace] 'scroll-down)
+    (define-key map "/"     'isearch-forward)
+    (define-key map "?"     'isearch-backward)
+    ;; follow links
+    (define-key map [return] 'hypropos-get-doc)
+    (define-key map "s"     'hypropos-set-variable)
+    (define-key map "t"     'hypropos-find-tag)
+    (define-key map "l"     'hypropos-last-help)
+    (define-key map "c"     'hypropos-customize-variable)
+    (define-key map [button2] 'hypropos-mouse-get-doc)
+    (define-key map [button3] 'hypropos-popup-menu)
+    ;; for the totally hardcore...
+    (define-key map "D"     'hypropos-disassemble)
+    ;; administrativa
+    (define-key map "a"     'hyper-apropos)
+    (define-key map "n"     'hyper-apropos)
+    (define-key map "q"     'hypropos-quit)
+    map)
   "Keybindings for both the *Hyper Help* buffer and the *Hyper Apropos* buffer")
 
-(defvar hypropos-map (let ((map (make-sparse-keymap)))
-		       (set-keymap-name map 'hypropos-map)
-		       (set-keymap-parents map (list hypropos-help-map))
-		       ;; slightly different scrolling...
-		       (define-key map " "     'hypropos-scroll-up)
-		       (define-key map "b"     'hypropos-scroll-down)
-		       (define-key map [delete] 'hypropos-scroll-down)
-		       (define-key map [backspace] 'hypropos-scroll-down)
-		       ;; act on the current line...
-		       (define-key map "w"     'hypropos-where-is)
-		       (define-key map "i"     'hypropos-invoke-fn)
-		       (define-key map "s"     'hypropos-set-variable)
-		       ;; more administrativa...
-		       (define-key map "P"     'hypropos-toggle-programming-flag)
-		       (define-key map "k"     'hypropos-add-keyword)
-		       (define-key map "e"     'hypropos-eliminate-keyword)
-		       map
-		       )
+(defvar hypropos-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-name map 'hypropos-map)
+    (set-keymap-parents map (list hypropos-help-map))
+    ;; slightly different scrolling...
+    (define-key map " "     'hypropos-scroll-up)
+    (define-key map "b"     'hypropos-scroll-down)
+    (define-key map [delete] 'hypropos-scroll-down)
+    (define-key map [backspace] 'hypropos-scroll-down)
+    ;; act on the current line...
+    (define-key map "w"     'hypropos-where-is)
+    (define-key map "i"     'hypropos-invoke-fn)
+    (define-key map "s"     'hypropos-set-variable)
+    ;; more administrativa...
+    (define-key map "P"     'hypropos-toggle-programming-flag)
+    (define-key map "k"     'hypropos-add-keyword)
+    (define-key map "e"     'hypropos-eliminate-keyword)
+    map)
   "Keybindings for the *Hyper Apropos* buffer.
 This map inherits from `hypropos-help-map.'")
 
+;;(defvar hypropos-mousable-keymap
+;;  (let ((map (make-sparse-keymap)))
+;;    (define-key map [button2] 'hypropos-mouse-get-doc)
+;;    map))
+
 (defvar hyper-apropos-mode-hook nil
   "*User function run after hyper-apropos mode initialization.  Usage:
 \(setq hyper-apropos-mode-hook '(lambda () ... your init forms ...)).")
@@ -248,29 +231,32 @@
 	      (hypropos-toggle-programming-flag)
 	    (message "Using last search results"))
 	(error "Be more specific..."))
-    (let (flist vlist)
-      (set-buffer (get-buffer-create hypropos-apropos-buf))
-      (setq buffer-read-only nil)
-      (erase-buffer)
-      (if toggle-apropos
-	  (set (make-local-variable 'hypropos-programming-apropos)
-	       (not (default-value 'hypropos-programming-apropos))))
-      (if (not hypropos-programming-apropos)
-	  (setq flist (apropos-internal regexp 'commandp)
-		vlist (apropos-internal regexp 'user-variable-p))
-	;; #### - add obsolete functions/variables here...
-	;; #### - 'variables' may be unbound !!!
-	(setq flist (apropos-internal regexp 'fboundp)
-	      vlist (apropos-internal regexp 'boundp)))
-      (insert-face (format "Apropos search for: %S\n\n" regexp) 'major-heading)
-      (insert-face "* = command (M-x) or user-variable.\n" 'documentation)
-      (insert-face "a = autoloaded, b = byte-compiled, i = internal, l = lambda, m = macro.\n\n" 'documentation)
-      (insert-face "Functions and Macros:\n\n" 'major-heading)
+    (set-buffer (get-buffer-create hypropos-apropos-buf))
+    (setq buffer-read-only nil)
+    (erase-buffer)
+    (if toggle-apropos
+	(set (make-local-variable 'hypropos-programming-apropos)
+	     (not (default-value 'hypropos-programming-apropos))))
+    (let ((flist (apropos-internal regexp
+				   (if hypropos-programming-apropos
+				       #'fboundp
+				     #'commandp)))
+	  (vlist (apropos-internal regexp
+				   (if hypropos-programming-apropos
+				       #'boundp
+				     #'user-variable-p))))
+      (insert-face (format "Apropos search for: %S\n\n" regexp)
+		   'hypropos-major-heading)
+      (insert-face "* = command (M-x) or user-variable.\n"
+		   'hypropos-documentation)
+      (insert-face "\
+a = autoloaded, b = byte-compiled, i = internal, l = lambda, m = macro.\n\n"
+		   'hypropos-documentation)
+      (insert-face "Functions and Macros:\n\n" 'hypropos-major-heading)
       (hypropos-grok-functions flist)
-      (insert-face "\n\nVariables and Constants:\n\n" 'major-heading)
+      (insert-face "\n\nVariables and Constants:\n\n" 'hypropos-major-heading)
       (hypropos-grok-variables vlist)
-      (goto-char (point-min))
-      ))
+      (goto-char (point-min))))
   (switch-to-buffer hypropos-apropos-buf)
   (hyper-apropos-mode regexp))
 
@@ -283,8 +269,8 @@
   (hyper-apropos hypropos-last-regexp nil))
 
 (defun hypropos-grok-functions (fns)
-  (let (fn bind doc type)
-    (while (setq fn (car fns))
+  (let (bind doc type)
+    (dolist (fn fns)
       (setq bind (symbol-function fn)
 	    type (cond ((subrp bind) ?i)
 		       ((compiled-function-p bind) ?b)
@@ -293,36 +279,38 @@
 							     (lambda . ?l)
 							     (macro . ?m))))
 					 ??))
-		       (t ? )))
+		       (t ?\ )))
       (insert type (if (commandp fn) "* " "  "))
-      (insert-face (format "%-30S" fn) 'hyperlink)
+      (let ((e (insert-face (format "%S" fn) 'hypropos-hyperlink)))
+	(set-extent-property e 'mouse-face 'highlight))
+      (insert-char ?\  (let ((l (- 30 (length (format "%S" fn)))))
+			 (if (natnump l) l 0)))
       (and hypropos-show-brief-docs
 	   (setq doc (documentation fn))
 	   (insert-face (if doc
 			    (concat " - "
 				    (substring doc 0 (string-match "\n" doc)))
 			  " Not documented.")
-			'documentation))
-      (insert ?\n)
-      (setq fns (cdr fns))
-      )))
+			'hypropos-documentation))
+      (insert ?\n))))
 
 (defun hypropos-grok-variables (vars)
-  (let (var doc userp)
-    (while (setq var (car vars))
-      (setq userp (user-variable-p var)
-	    vars (cdr vars))
+  (let (doc userp)
+    (dolist (var vars)
+      (setq userp (user-variable-p var))
       (insert (if userp " * " "   "))
-      (insert-face (format "%-30S" var) 'hyperlink)
+      (let ((e (insert-face (format "%S" var) 'hypropos-hyperlink)))
+	(set-extent-property e 'mouse-face 'highlight))
+      (insert-char ?\  (let ((l (- 30 (length (format "%S" var)))))
+			 (if (natnump l) l 0)))
       (and hypropos-show-brief-docs
 	   (setq doc (documentation-property var 'variable-documentation))
 	   (insert-face (if doc
 			    (concat " - " (substring doc (if userp 1 0)
 						     (string-match "\n" doc)))
 			  " - Not documented.")
-			'documentation))
-      (insert ?\n)
-      )))
+			'hypropos-documentation))
+      (insert ?\n))))
 
 ;; ---------------------------------------------------------------------- ;;
 
@@ -361,7 +349,6 @@
 	modeline-buffer-identification
 	(list (cons modeline-buffer-id-left-extent "Hyper Apropos: ")
 	      (cons modeline-buffer-id-right-extent (concat "\"" regexp "\""))))
-  (setq mode-motion-hook 'mode-motion-highlight-line)
   (use-local-map hypropos-map)
   (run-hooks 'hyper-apropos-mode-hook))
 
@@ -547,29 +534,30 @@
       (display-buffer hypropos-help-buf))))
 
 (defun hypropos-insert-face (string &optional face)
-  "Insert STRING and fontify some parts with face `hyperlink'."
+  "Insert STRING and fontify some parts with face `hypropos-hyperlink'."
   (let ((beg (point)) end)
-    (insert-face string (or face 'documentation))
+    (insert-face string (or face 'hypropos-documentation))
     (setq end (point))
     (goto-char beg)
     (while (re-search-forward
 	    "`\\([-a-zA-Z0-9_][-a-zA-Z0-9_][-a-zA-Z0-9_.]+\\)'"
 	    end 'limit)
-      (set-extent-face (make-extent (match-beginning 1) (match-end 1))
-		       'hyperlink))
+      (let ((e (make-extent (match-beginning 1) (match-end 1))))
+	(set-extent-face e 'hypropos-hyperlink)
+	(set-extent-property e 'mouse-face 'highlight))
     (goto-char beg)
     (while (re-search-forward
 	    "M-x \\([-a-zA-Z0-9_][-a-zA-Z0-9_][-a-zA-Z0-9_.]+\\)"
 	    end 'limit)
-      (set-extent-face (make-extent (match-beginning 1) (match-end 1))
-		       'hyperlink))))
+      (let ((e (make-extent (match-beginning 1) (match-end 1))))
+	(set-extent-face e 'hypropos-hyperlink)
+	(set-extent-property e 'mouse-face 'highlight))))))
 
 (defun hypropos-insert-keybinding (keys string)
   (if keys
       (insert "  (" string " bound to \""
 	      (mapconcat 'key-description
-			 (sort keys #'(lambda (x y)
-					(< (length x) (length y))))
+			 (sort* keys #'< :key #'length)
 			 "\", \"")
 	      "\")\n")))
 
@@ -585,10 +573,10 @@
   (aset desc 0 (upcase (aref desc 0))) ; capitalize
   (goto-char (point-max))
   (newline 3) (delete-blank-lines) (newline 2)
-  (hypropos-insert-face desc 'section-heading))
+  (hypropos-insert-face desc 'hypropos-section-heading))
 
 (defun hypropos-insert-value (string symbol val)
-  (insert-face string 'heading)
+  (insert-face string 'hypropos-heading)
   (insert (if (symbol-value symbol)
 	      (if (or (null val) (eq val t) (integerp val))
 		  (prog1
@@ -665,7 +653,7 @@
 	  ;;(setq standard-output (current-buffer))
 	  (setq buffer-read-only nil)
 	  (erase-buffer)
-	  (insert-face (format "`%s'" symbol) 'major-heading)
+	  (insert-face (format "`%s'" symbol) 'hypropos-major-heading)
 	  (insert (format " (buffer: %s, mode: %s)\n"
 			  (buffer-name hypropos-ref-buffer)
 			  local)))
@@ -693,7 +681,10 @@
 					       (bytecode . "compiled Lisp ")
 					       (autoload . "autoloaded Lisp ")
 					       (lambda   . "Lisp "))))
-				  desc)
+				  desc
+				  (if (eq symtype 'autoload)
+				      (format ", (autoloaded from \"%s\")"
+				      (nth 1 newsym))))
 		     local (current-local-map)
 		     global (current-global-map)
 		     obsolete (get symbol 'byte-obsolete-info)
@@ -703,9 +694,6 @@
 		 (goto-char (point-max))
 		 (setq standard-output (current-buffer))
 		 (hypropos-insert-section-heading alias-desc desc)
-		 (and (eq symtype 'autoload)
-		      (insert (format ", (autoloaded from \"%s\")"
-				      (nth 1 newsym))))
 		 (insert ":\n")
 		 (if local
 		     (hypropos-insert-keybinding
@@ -721,9 +709,9 @@
 			      (if (stringp (car obsolete))
 				  (car obsolete)
 				(format "use `%s' instead." (car obsolete))))
-		      'warning))
+		      'hypropos-warning))
 		 (setq beg (point))
-		 (insert-face "arguments: " 'heading)
+		 (insert-face "arguments: " 'hypropos-heading)
 		 (cond ((eq symtype 'lambda)
 			(princ (or (nth 1 newsym) "()")))
 		       ((eq symtype 'bytecode)
@@ -738,7 +726,8 @@
 			(setq doc (substring doc 0 (match-beginning 0))))
 		       ((and (eq symtype 'subr)
 			     (string-match
-			      "[\n\t ]*([^\n\t )]+[\t ]*\\([^\n)]+\\)?)\\(:[\t ]*\\|\n?\\'\\)"
+			      "\
+\[\n\t ]*([^\n\t )]+[\t ]*\\([^\n)]+\\)?)\\(:[\t ]*\\|\n?\\'\\)"
 			      doc))
 			(insert "("
 				(if (match-end 1)
@@ -767,7 +756,9 @@
 				 (and (local-variable-p newsym
 							(current-buffer) t)
 				      'auto-local))
-		     desc (concat (if (user-variable-p newsym)
+		     desc (concat (and (get newsym 'custom-type)
+				       "customizable ")
+				  (if (user-variable-p newsym)
 				      "user variable"
 				    "variable")
 				  (cond ((eq symtype t) ", buffer-local")
@@ -792,6 +783,15 @@
 		 (goto-char (point-max))
 		 (setq standard-output (current-buffer))
 		 (hypropos-insert-section-heading alias-desc desc)
+		 (when (and (user-variable-p newsym)
+			    (get newsym 'custom-type))
+		   (let ((e (make-extent (point-at-bol) (point))))
+		     (set-extent-property e 'mouse-face 'highlight)
+		     (set-extent-property e 'help-echo
+					  (format "Customize %s" newsym))
+		     (set-extent-property
+		      e 'hypropos-custom
+		      `(lambda () (customize-variable (quote ,newsym))))))
 		 (insert ":\n\n")
 		 (setq beg (point))
 		 (if obsolete
@@ -800,7 +800,7 @@
 			      (if (stringp obsolete)
 				  obsolete
 				(format "use `%s' instead." obsolete)))
-		      'warning))
+		      'hypropos-warning))
 		 ;; generally, the value of the variable is short and the
 		 ;; documentation of the variable long, so it's desirable
 		 ;; to see all of the value and the start of the
@@ -811,12 +811,12 @@
 		 (if (and (or (null local-str) (< (length local-str) 69))
 			  (or (null global-str) (< (length global-str) 69)))
 					; 80 cols.  docstrings assume this.
-		     (progn (insert-face "value: " 'heading)
+		     (progn (insert-face "value: " 'hypropos-heading)
 			    (insert (or local-str "is void"))
 			    (if (eq symtype t)
 				(progn
 				  (insert "\n")
-				  (insert-face "default value: " 'heading)
+				  (insert-face "default value: " 'hypropos-heading)
 				  (insert (or global-str "is void"))))
 			    (insert "\n\n")
 			    (hypropos-insert-face doc))
@@ -831,7 +831,7 @@
 		   (if local-str
 		       (progn
 			 (newline 3) (delete-blank-lines) (newline 1)
-			 (insert-face "value: " 'heading)
+			 (insert-face "value: " 'hypropos-heading)
 			 (if hypropos-prettyprint-long-values
 			     (condition-case nil
 				 (let ((pp-print-readably nil)) (pprint local))
@@ -840,7 +840,7 @@
 		   (if global-str
 		       (progn
 			 (newline 3) (delete-blank-lines) (newline 1)
-			 (insert-face "default value: " 'heading)
+			 (insert-face "default value: " 'hypropos-heading)
 			 (if hypropos-prettyprint-long-values
 			     (condition-case nil
 				 (let ((pp-print-readably nil)) (pprint global))
@@ -875,23 +875,38 @@
 	       (save-excursion
 		 (set-buffer hypropos-help-buf)
 		 (setq standard-output (current-buffer))
-		 (hypropos-insert-section-heading "Face:\n\n  ")
-		 (insert-face "ABCDEFHIJKLMNOPQRSTUVWXYZ abcdefhijklmnopqrstuvwxyz 0123456789"
+		 (hypropos-insert-section-heading
+		  (concat "Face"
+			  (when (get symbol 'face-defface-spec)
+			    (let* ((str " (customizable)")
+				   (e (make-extent 1 (length str) str)))
+			      (set-extent-property e 'mouse-face 'highlight)
+			      (set-extent-property e 'help-echo
+						   (format "Customize %s" symbol))
+			      (set-extent-property e 'unique t)
+			      (set-extent-property e 'duplicable t)
+			      (set-extent-property
+			       e 'hypropos-custom
+			       `(lambda () (customize-face (quote ,symbol))))
+			      str))
+			  ":\n\n  "))
+		 (insert-face "\
+ABCDEFHIJKLMNOPQRSTUVWXYZ abcdefhijklmnopqrstuvwxyz 0123456789"
 			      'hypropos-temp-face)
 		 (newline 2)
-		 (insert-face "  Font: " 'heading)
+		 (insert-face "  Font: " 'hypropos-heading)
 		 (insert (format (if (numberp (car font)) "(%s)\n" "%s\n")
 				 (and (cdr font)
 				      (font-instance-name (cdr font)))))
-		 (insert-face "  Foreground: " 'heading)
+		 (insert-face "  Foreground: " 'hypropos-heading)
 		 (insert (format (if (numberp (car fore)) "(%s)\n" "%s\n")
 				 (and (cdr fore)
 				      (color-instance-name (cdr fore)))))
-		 (insert-face "  Background: " 'heading)
+		 (insert-face "  Background: " 'hypropos-heading)
 		 (insert (format (if (numberp (car back)) "(%s)\n" "%s\n")
 				 (and (cdr back)
 				      (color-instance-name (cdr back)))))
-		 (insert-face "  Underline: " 'heading)
+		 (insert-face "  Underline: " 'hypropos-heading)
 		 (insert (format (if (numberp (car undl)) "(%s)\n" "%s\n")
 				 (cdr undl)))
 		 (if doc
@@ -920,7 +935,7 @@
 		    (setq symtype (cdr symtype))
 		  (insert-face (concat "  " (symbol-name (car symtype))
 				       ": ")
-			       'heading)
+			       'hypropos-heading)
 		  (setq symtype (cdr symtype))
 		  (indent-to 32)
 		  (insert (prin1-to-string (car symtype)) "\n"))
@@ -944,54 +959,30 @@
 different variables and functions.  Common commands:
 
 \\{hypropos-help-map}"
-  (setq mode-motion-hook 'hypropos-highlight-lisp-symbol
-	buffer-read-only t
+  (setq buffer-read-only t
 	major-mode	     'hyper-help-mode
 	mode-name	     "Hyper-Help")
   (set-syntax-table emacs-lisp-mode-syntax-table)
+  (hypropos-highlightify)
   (use-local-map hypropos-help-map))
 
-(defun hypropos-highlight-lisp-symbol (event)
-  ;; mostly copied from mode-motion-highlight-internal
-  (let* ((window (event-window event))
-	 (buffer (and window (window-buffer window)))
-	 (point (and buffer (event-point event)))
-	 st en sym highlight-p)
-    (if buffer
-	(progn
-	  (set-buffer buffer)
-	  (if point
-	      (save-excursion
-		(goto-char point)
-		(setq st (save-excursion
-			   (skip-syntax-backward "w_")
-			   (skip-chars-forward "`")
-			   (point))
-		      en (save-excursion
-			   (goto-char st)
-			   (skip-syntax-forward "w_")
-			   (skip-chars-backward ".")
-			   (point))
-		      sym (and (not (eq st en))
-			       (intern-soft (buffer-substring st en)))
-		      highlight-p (and sym
-				       (or (boundp sym)
-					   (fboundp sym))))
-		(if highlight-p
-		    (if mode-motion-extent
-		      (set-extent-endpoints mode-motion-extent st en)
-		    (setq mode-motion-extent (make-extent st en))
-		    (set-extent-property mode-motion-extent 'highlight t))
-		  (and mode-motion-extent
-			 (progn (delete-extent mode-motion-extent)
-				(setq mode-motion-extent nil)))
-		  ))
-	    ;; not over text; zero the extent.
-	    (if (and mode-motion-extent (extent-buffer mode-motion-extent)
-		     (not (eq (extent-start-position mode-motion-extent)
-			      (extent-end-position mode-motion-extent))))
-		(set-extent-endpoints mode-motion-extent 1 1)))))))
+;; ---------------------------------------------------------------------- ;;
 
+(defun hypropos-highlightify ()
+  (save-excursion
+    (goto-char (point-min))
+    (let ((st (point-min))
+	  sym)
+      (while (not (eobp))
+	(if (zerop (skip-syntax-forward "w_"))
+	    (forward-char 1)
+	  (and (> (- (point) st) 3)
+	       (setq sym (intern-soft (buffer-substring st (point))))
+	       (or (boundp sym)
+		   (fboundp sym))
+	       (set-extent-property (make-extent st (point))
+				    'mouse-face 'highlight)))
+	(setq st (point))))))
 
 ;; ---------------------------------------------------------------------- ;;
 
@@ -1029,11 +1020,14 @@
   "Get the documentation for the symbol the mouse is on."
   (interactive "e")
   (mouse-set-point event)
-  (save-excursion
-    (let ((symbol (hypropos-this-symbol)))
-      (if symbol
-	  (hypropos-get-doc symbol)
-	(error "Click on a symbol")))))
+  (let ((e (extent-at (point) nil 'hypropos-custom)))
+    (if e
+	(funcall (extent-property e 'hypropos-custom))
+      (save-excursion
+	(let ((symbol (hypropos-this-symbol)))
+	  (if symbol
+	      (hypropos-get-doc symbol)
+	    (error "Click on a symbol")))))))
 
 ;; ---------------------------------------------------------------------- ;;
 
@@ -1157,6 +1151,11 @@
 			  str))
 	      (error nil)))))))
 
+(defun hypropos-customize-variable ()
+  (interactive)
+  (let ((var (hypropos-this-symbol)))
+    (customize-variable var)))
+
 ;; ---------------------------------------------------------------------- ;;
 
 (defun hypropos-find-tag (&optional tag-name)
@@ -1223,6 +1222,9 @@
 	 (notjunk (not (null sym)))
 	 (command-p (if (commandp sym) t))
 	 (variable-p (and sym (boundp sym)))
+	 (customizable-p (and variable-p
+			      (get sym 'custom-type)
+			      t))
 	 (function-p (fboundp sym))
 	 (apropos-p (eq 'hyper-apropos-mode
 			(save-excursion (set-buffer (event-buffer event))
@@ -1234,6 +1236,8 @@
 	   (list (concat "Hyper-Help: " name)
 	    (vector "Display documentation" 'hypropos-get-doc   notjunk)
 	    (vector "Set variable"	'hypropos-set-variable	variable-p)
+	    (vector "Customize variable" 'hypropos-customize-variable
+		    customizable-p)
 	    (vector "Show keys for"     'hypropos-where-is      command-p)
 	    (vector "Invoke command"	'hypropos-invoke-fn	command-p)
 	    (vector "Find tag"		'hypropos-find-tag	notjunk)
--- a/lisp/packages/info.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/packages/info.el	Mon Aug 13 09:42:26 2007 +0200
@@ -2077,10 +2077,9 @@
   (define-key Info-mode-map "\t" 'Info-next-reference)
   (define-key Info-mode-map "\e\t" 'Info-prev-reference)
   (define-key Info-mode-map "\r" 'Info-follow-nearest-node)
-  (define-key Info-mode-map "\177" 'Info-scroll-prev)
   ;; XEmacs addition
-  (define-key Info-mode-map [backspace] 'Info-scroll-prev)
-
+  (define-key Info-mode-map 'backspace 'Info-scroll-prev)
+  (define-key Info-mode-map 'delete 'Info-scroll-prev)
   (define-key Info-mode-map 'button2 'Info-follow-clicked-node)
   (define-key Info-mode-map 'button3 'Info-select-node-menu))
 
--- a/lisp/packages/ispell.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/packages/ispell.el	Mon Aug 13 09:42:26 2007 +0200
@@ -1066,13 +1066,15 @@
 		     max-lines))
 	;; not so good if there are over 20 or 30 options, but then, if
 	;; there are that many you don't want to scan them all anyway...
+	(when (integerp count)
+	  (setq count (int-char count)))
 	(while (memq count command-characters) ; skip command characters.
-	  (setq count (1+ count)
+	  (setq count (int-char (1+ count))
 		skipped (1+ skipped)))
 	(insert "(" count ") " (car choices) "  ")
 	(setq choices (cdr choices)
 	      count (1+ count)))
-      (setq count (- count ?0 skipped)))
+      (setq count (int-char (- count ?0 skipped))))
 
     ;; Assure word is visible
     (if (not (pos-visible-in-window-p end))
@@ -1124,7 +1126,7 @@
 				   (read-char-exclusive)
 				 (read-char))
 			  skipped 0)
-		    (if (or quit-flag (= char ?\C-g)) ; C-g is like typing X
+		    (if (or quit-flag (eq char ?\C-g)) ; C-g is like typing X
 			(setq char ?X
 			      quit-flag nil)))
 		  ;; Adjust num to array offset skipping command characters.
@@ -1136,36 +1138,36 @@
 		    (setq num (- char ?0 skipped)))
 
 		  (cond
-		   ((= char ? ) nil)	; accept word this time only
-		   ((= char ?i)		; accept and insert word into pers dict
+		   ((eq char ? ) nil)	; accept word this time only
+		   ((eq char ?i)	; accept and insert word into pers dict
 		    (process-send-string ispell-process (concat "*" word "\n"))
 		    (setq ispell-pdict-modified-p '(t)) ; dictionary modified!
 		    nil)
-		   ((or (= char ?a) (= char ?A)) ; accept word without insert
+		   ((or (eq char ?a) (eq char ?A)) ; accept word without insert
 		    (process-send-string ispell-process (concat "@" word "\n"))
 		    (if (null ispell-pdict-modified-p)
 			(setq ispell-pdict-modified-p
 			      (list ispell-pdict-modified-p)))
-		    (if (= char ?A) 0))	; return 0 for ispell-add buffer-local
-		   ((or (= char ?r) (= char ?R)) ; type in replacement
-		    (if (or (= char ?R) ispell-query-replace-choices)
+		    (if (eq char ?A) 0)) ; return 0 for ispell-add buffer-local
+		   ((or (eq char ?r) (eq char ?R)) ; type in replacement
+		    (if (or (eq char ?R) ispell-query-replace-choices)
 			(list (read-string "Query-replacement for: " word) t)
 		      (cons (read-string "Replacement for: " word) nil)))
-		   ((or (= char ??)
+		   ((or (eq char ??)
 			;; XEmacs change: help-char may not be an int.
 			(eq char (event-to-character
 				  (character-to-event help-char)))
-			(= char ?\C-h))
+			(eq char ?\C-h))
 		    (ispell-help)
 		    t)
 		   ;; Quit and move point back.
-		   ((= char ?x)
+		   ((eq char ?x)
 		    (ispell-pdict-save ispell-silently-savep)
 		    (message "Exited spell-checking")
 		    (setq ispell-quit t)
 		    nil)
 		   ;; Quit and preserve point.
-		   ((= char ?X)
+		   ((eq char ?X)
 		    (ispell-pdict-save ispell-silently-savep)
 		    (message "%s"
 		     (substitute-command-keys
@@ -1174,7 +1176,7 @@
 		    (setq ispell-quit (max (point-min)
 					   (- (point) (length word))))
 		    nil)
-		   ((= char ?q)
+		   ((eq char ?q)
 		    (if (y-or-n-p "Really kill Ispell process? ")
 			(progn
 			  (ispell-kill-ispell t) ; terminate process.
@@ -1182,7 +1184,7 @@
 						(point))
 				ispell-pdict-modified-p nil))
 		      t))		; continue if they don't quit.
-		   ((= char ?l)
+		   ((eq char ?l)
 		    (let ((new-word (read-string
 				     "Lookup string (`*' is wildcard): "
 				     word))
@@ -1212,7 +1214,7 @@
 					       new-line)
 					     max-lines))
 				(while (memq count command-characters)
-				  (setq count (1+ count)
+				  (setq count (int-char (1+ count))
 					skipped (1+ skipped)))
 				(insert "(" count ") " (car choices) "  ")
 				(setq choices (cdr choices)
@@ -1235,12 +1237,12 @@
 				  (setq line new-line)))
 			    (select-window (next-window)))))
 		    t)			; reselect from new choices
-		   ((= char ?u)
+		   ((eq char ?u)
 		    (process-send-string ispell-process
 					 (concat "*" (downcase word) "\n"))
 		    (setq ispell-pdict-modified-p '(t)) ; dictionary modified!
 		    nil)
-		   ((= char ?m)		; type in what to insert
+		   ((eq char ?m)	; type in what to insert
 		    (process-send-string
 		     ispell-process (concat "*" (read-string "Insert: " word)
 					    "\n"))
@@ -1250,11 +1252,11 @@
 		    (if ispell-query-replace-choices ; Query replace flag
 			(list (nth num miss) 'query-replace)
 		      (nth num miss)))
-		   ((= char ?\C-l)
+		   ((eq char ?\C-l)
 		    (redraw-display) t)
-		   ((= char ?\C-r)
+		   ((eq char ?\C-r)
 		    (save-window-excursion (recursive-edit)) t)
-		   ((= char ?\C-z)
+		   ((eq char ?\C-z)
 		    (funcall (key-binding "\C-z"))
 		    t)
 		   (t (ding) t))))))
--- a/lisp/packages/pending-del.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/packages/pending-del.el	Mon Aug 13 09:42:26 2007 +0200
@@ -75,6 +75,8 @@
 ;; Support the XEmacs 20.3 'delete functions
 
 (put 'backward-or-forward-delete-char 'pending-delete 'supersede)
+(put 'cperl-electric-backspace 'pending-delete 'supersede)
+(put 'cperl-electric-delete 'pending-delete 'supersede)
 
 ;; Don't delete for these.  They're more problematic than helpful.
 ;;
--- a/lisp/packages/tar-mode.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/packages/tar-mode.el	Mon Aug 13 09:42:26 2007 +0200
@@ -488,7 +488,8 @@
   (define-key tar-mode-map "u" 'tar-unflag)
   (define-key tar-mode-map "v" 'tar-view)
   (define-key tar-mode-map "x" 'tar-expunge)
-  (define-key tar-mode-map "\177" 'tar-unflag-backwards)
+  (define-key tar-mode-map 'backspace 'tar-unflag-backwards)
+  (define-key tar-mode-map 'delete 'tar-unflag-backwards)
   (define-key tar-mode-map "E" 'tar-extract-other-window)
   (define-key tar-mode-map "M" 'tar-chmod-entry)
   (define-key tar-mode-map "G" 'tar-chgrp-entry)
--- a/lisp/prim/auto-autoloads.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/prim/auto-autoloads.el	Mon Aug 13 09:42:26 2007 +0200
@@ -3918,7 +3918,7 @@
 ;;;### (autoloads (ksh-mode) "ksh-mode" "modes/ksh-mode.el")
 
 (autoload 'ksh-mode "ksh-mode" "\
-ksh-mode $Revision: 1.32 $ - Major mode for editing (Bourne, Korn or Bourne again)
+ksh-mode $Revision: 1.33 $ - Major mode for editing (Bourne, Korn or Bourne again)
 shell scripts.
 Special key bindings and commands:
 \\{ksh-mode-map}
@@ -5260,7 +5260,7 @@
 
 (autoload 'vhdl-mode "vhdl-mode" "\
 Major mode for editing VHDL code.
-vhdl-mode $Revision: 1.32 $
+vhdl-mode $Revision: 1.33 $
 To submit a problem report, enter `\\[vhdl-submit-bug-report]' from a
 vhdl-mode buffer.  This automatically sets up a mail buffer with version
 information already added.  You just need to add a description of the
@@ -5529,14 +5529,6 @@
 
 ;;;### (autoloads (add-log-current-defun change-log-mode add-change-log-entry-other-window add-change-log-entry find-change-log prompt-for-change-log-name) "add-log" "packages/add-log.el")
 
-(defcustom change-log-default-name nil "*Name of a change log file for \\[add-change-log-entry]." :type '(choice (const :tag "default" nil) string) :group 'change-log)
-
-(defcustom add-log-current-defun-function nil "*If non-nil, function to guess name of current function from surrounding text.\n\\[add-change-log-entry] calls this function (if nil, `add-log-current-defun'\ninstead) with no arguments.  It returns a string or nil if it cannot guess." :type 'boolean :group 'change-log)
-
-(defcustom add-log-full-name nil "*Full name of user, for inclusion in ChangeLog daily headers.\nThis defaults to the value returned by the `user-full-name' function." :type '(choice (const :tag "Default" nil) string) :group 'change-log)
-
-(defcustom add-log-mailing-address nil "*Electronic mail address of user, for inclusion in ChangeLog daily headers.\nThis defaults to the value of `user-mail-address'." :type '(choice (const :tag "Default" nil) string) :group 'change-log)
-
 (autoload 'prompt-for-change-log-name "add-log" "\
 Prompt for a change log name." nil nil)
 
--- a/lisp/prim/cus-load.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/prim/cus-load.el	Mon Aug 13 09:42:26 2007 +0200
@@ -6,6 +6,7 @@
 (put 'psgml-dtd 'custom-loads '("psgml"))
 (put 'copyright 'custom-loads '("upd-copyr"))
 (put 'gnus-score-expire 'custom-loads '("gnus-kill" "gnus-score"))
+(put 'custom-buffer 'custom-loads '("cus-edit"))
 (put 'gnus-score-kill 'custom-loads '("gnus-kill"))
 (put 'eldoc 'custom-loads '("eldoc"))
 (put 'prolog 'custom-loads '("prolog"))
@@ -56,7 +57,7 @@
 (put 'xrdb 'custom-loads '("xrdb-mode"))
 (put 'gnus-article-washing 'custom-loads '("gnus-xmas" "gnus-art"))
 (put 'ispell 'custom-loads '("ispell"))
-(put 'mail 'custom-loads '("gnus" "message" "mh-e" "mail-abbrevs" "feedmail" "metamail" "supercite" "highlight-headers" "smtpmail"))
+(put 'mail 'custom-loads '("gnus" "message" "mh-e" "mail-abbrevs" "feedmail" "metamail" "supercite" "highlight-headers" "ph" "smtpmail"))
 (put 'gnus-summary-exit 'custom-loads '("gnus-sum"))
 (put 'fortran-indent 'custom-loads '("fortran"))
 (put 'ps-print-face 'custom-loads '("ps-print"))
@@ -71,10 +72,11 @@
 (put 'gnus-summary 'custom-loads '("gnus-sum" "gnus"))
 (put 'message-headers 'custom-loads '("message"))
 (put 'ps-print-header 'custom-loads '("ps-print"))
+(put 'custom-menu 'custom-loads '("cus-edit"))
 (put 'docs 'custom-loads '("texinfo" "hyper-apropos" "makeinfo"))
 (put 'lisp-indent 'custom-loads '("cl-indent"))
 (put 'completion 'custom-loads '("completion"))
-(put 'tools 'custom-loads '("ediff" "make-mode" "add-log" "diff" "etags" "func-menu" "generic-sc" "rcompile"))
+(put 'tools 'custom-loads '("ediff" "make-mode" "add-log" "diff" "etags" "func-menu" "generic-sc" "hyper-apropos" "rcompile"))
 (put 'cc-comment 'custom-loads '("cc-mode"))
 (put 'url-cookie 'custom-loads '("url-cookie" "url-vars"))
 (put 'TeX-output 'custom-loads '("tex-buf" "tex"))
@@ -92,7 +94,7 @@
 (put 'hypermedia 'custom-loads '("wid-edit" "gopher" "metamail" "browse-url" "url-vars" "w3-cus"))
 (put 'save-place 'custom-loads '("saveplace"))
 (put 'w3-advanced 'custom-loads '("w3-cus"))
-(put 'lisp 'custom-loads '("edebug" "cl-indent" "elp"))
+(put 'lisp 'custom-loads '("edebug" "cl-indent" "hyper-apropos" "elp"))
 (put 'jka-compr 'custom-loads '("jka-compr"))
 (put 'rlogin 'custom-loads '("rlogin"))
 (put 'reftex 'custom-loads '("reftex"))
@@ -119,7 +121,7 @@
 (put 'f90 'custom-loads '("f90"))
 (put 'term 'custom-loads '("term"))
 (put 'gnus-extract 'custom-loads '("gnus" "gnus-uu"))
-(put 'help 'custom-loads '("help" "cus-edit" "info" "man"))
+(put 'help 'custom-loads '("help" "cus-edit" "hyper-apropos" "info" "man"))
 (put 'supercite 'custom-loads '("supercite"))
 (put 'generic-sc 'custom-loads '("generic-sc"))
 (put 'local 'custom-loads '("calendar" "gopher"))
@@ -139,12 +141,13 @@
 (put 'gnus-article 'custom-loads '("gnus-art" "gnus-cite"))
 (put 'AUC-TeX 'custom-loads '("tex"))
 (put 'TeX-command 'custom-loads '("tex"))
+(put 'widget-documentation 'custom-loads '("wid-edit"))
 (put 'TeX-command-name 'custom-loads '("tex"))
 (put 'edebug 'custom-loads '("edebug"))
 (put 'ps-print 'custom-loads '("ps-print"))
 (put 'TeX-commands 'custom-loads '("tex-buf"))
 (put 'cc-indent 'custom-loads '("cc-mode"))
-(put 'comm 'custom-loads '("ssl"))
+(put 'comm 'custom-loads '("ph" "ssl"))
 (put 'ediff-window 'custom-loads '())
 (put 'gnus 'custom-loads '("gnus-art" "gnus-async" "gnus-cache" "gnus-demon" "gnus-dup" "gnus-eform" "gnus-uu" "gnus-win" "gnus-xmas" "gnus" "nnmail"))
 (put 'ps-print-font 'custom-loads '("ps-print"))
@@ -223,11 +226,12 @@
 (put 'gnuserv 'custom-loads '("gnuserv"))
 (put 'ps-print-horizontal 'custom-loads '("ps-print"))
 (put 'gnus-windows 'custom-loads '("gnus-win"))
-(put 'maint 'custom-loads '("upd-copyr"))
+(put 'maint 'custom-loads '("add-log" "upd-copyr"))
 (put 'detached-minibuf 'custom-loads '("detached-minibuf"))
 (put 'message-mail 'custom-loads '("message"))
 (put 'ediff-mult 'custom-loads '("ediff-mult"))
 (put 'windows 'custom-loads '())
+(put 'widget-faces 'custom-loads '("wid-edit"))
 (put 'message-various 'custom-loads '("message"))
 (put 'resize-minibuffer 'custom-loads '("rsz-minibuf"))
 (put 'gnus-group-levels 'custom-loads '("gnus-group"))
@@ -236,6 +240,7 @@
 (put 'gnus-score-decay 'custom-loads '("gnus-score"))
 (put 'fill 'custom-loads '("filladapt"))
 (put 'edmacro 'custom-loads '("edmacro"))
+(put 'custom-magic-faces 'custom-loads '("cus-edit"))
 (put 'balloon-help 'custom-loads '("balloon-help"))
 (put 'gnus-extract-post 'custom-loads '("gnus-uu"))
 (put 'debug 'custom-loads '())
@@ -279,10 +284,12 @@
 (put 'url-file 'custom-loads '("url-cache" "url-vars"))
 (put 'alloc 'custom-loads '())
 (put 'isearch 'custom-loads '("isearch-mode"))
+(put 'ph 'custom-loads '("ph"))
 (put 'mh 'custom-loads '("mh-comp" "mh-e" "mh-utils"))
 (put 'gnus-score-files 'custom-loads '("gnus-score"))
 (put 'gopher 'custom-loads '("gopher"))
 (put 'modeline 'custom-loads '("modeline"))
+(put 'hypropos-faces 'custom-loads '("hyper-apropos"))
 (put 'makefile-mode 'custom-loads '("make-mode"))
 (put 'gnus-summary-marks 'custom-loads '("gnus-sum"))
 (put 'appt 'custom-loads '("appt"))
@@ -294,7 +301,7 @@
 (put 'w3-parsing 'custom-loads '("w3-cus"))
 (put 'message-buffers 'custom-loads '("message"))
 (put 'editing 'custom-loads '("simple" "cus-edit"))
-(put 'matching 'custom-loads '("simple" "isearch-mode" "whitespace-mode" "completion"))
+(put 'matching 'custom-loads '("simple" "isearch-mode" "whitespace-mode" "completion" "hyper-apropos"))
 (put 'ediff 'custom-loads '("ediff-diff" "ediff-merg" "ediff-mult" "ediff-ptch" "ediff-wind" "ediff"))
 (put 'gnus-article-mime 'custom-loads '("gnus-art" "gnus-sum"))
 (put 'i18n 'custom-loads '("cus-edit" "url-vars"))
--- a/lisp/prim/files.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/prim/files.el	Mon Aug 13 09:42:26 2007 +0200
@@ -1173,14 +1173,14 @@
 
 (defconst interpreter-mode-alist
   '(("^#!.*csh"	  . sh-mode)
-    ("^#!.*sh\\b" . ksh-mode)
+    ("^#!.*sh\\b" . sh-mode)
     ("^#!.*\\b\\(scope\\|wish\\|tcl\\|expect\\)" . tcl-mode)
     ("perl"   . perl-mode)
     ("python" . python-mode)
     ("awk\\b" . awk-mode)
     ("rexx"   . rexx-mode)
     ("scm"    . scheme-mode)
-    ("^:"     . ksh-mode))
+    ("^:"     . sh-mode))
   "Alist mapping interpreter names to major modes.
 This alist is used to guess the major mode of a file based on the
 contents of the first line.  This line often contains something like:
--- a/lisp/prim/rect.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/prim/rect.el	Mon Aug 13 09:42:26 2007 +0200
@@ -69,7 +69,8 @@
 	  (if (< begextra 0)
 	      (setq endextra (+ endextra begextra)
 		    begextra 0))
-          (apply function startpos begextra endextra extra-args))
+	  (if (< endextra 0) (setq endextra 0))
+	  (apply function startpos begextra endextra extra-args))
 	(forward-line 1)))
     (- endcol startcol)))
 
--- a/lisp/prim/subr.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/prim/subr.el	Mon Aug 13 09:42:26 2007 +0200
@@ -333,6 +333,33 @@
 	   (buffer-string)
 	 (erase-buffer)))))
 
+(defmacro with-current-buffer (buffer &rest body)
+  "Execute the forms in BODY with BUFFER as the current buffer.
+The value returned is the value of the last form in BODY.
+See also `with-temp-buffer'."
+  `(save-current-buffer
+    (set-buffer ,buffer)
+    ,@body))
+
+(defmacro with-temp-file (file &rest forms)
+  "Create a new buffer, evaluate FORMS there, and write the buffer to FILE.
+The value of the last form in FORMS is returned, like `progn'.
+See also `with-temp-buffer'."
+  (let ((temp-file (make-symbol "temp-file"))
+	(temp-buffer (make-symbol "temp-buffer")))
+    `(let ((,temp-file ,file)
+	   (,temp-buffer
+	    (get-buffer-create (generate-new-buffer-name " *temp file*"))))
+       (unwind-protect
+	   (prog1
+	       (with-current-buffer ,temp-buffer
+                  ,@forms)
+	     (with-current-buffer ,temp-buffer
+               (widen)
+	       (write-region (point-min) (point-max) ,temp-file nil 0)))
+	 (and (buffer-name ,temp-buffer)
+	      (kill-buffer ,temp-buffer))))))
+
 (defmacro with-temp-buffer (&rest forms)
   "Create a temporary buffer, and evaluate FORMS there like `progn'."
   (let ((temp-buffer (make-symbol "temp-buffer")))
@@ -524,16 +551,6 @@
   (interactive)
   nil)
 
-(defmacro save-current-buffer (&rest forms)
-  "Restore the current buffer setting after executing FORMS.
-Does not restore the values of point and mark.
-See also: `save-excursion'."
-  ;; by Stig@hackvan.com
-  (` (let ((_cur_buf_ (current-buffer)))
-       (unwind-protect
-	   (progn (,@ forms))
-	 (set-buffer _cur_buf_)))))
-
 (defmacro eval-in-buffer (buffer &rest forms)
   "Evaluate FORMS in BUFFER.
 See also: `save-current-buffer' and `save-excursion'."
--- a/lisp/prim/syntax.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/prim/syntax.el	Mon Aug 13 09:42:26 2007 +0200
@@ -392,7 +392,7 @@
   (interactive)
   ;alg stolen from etag.el
   (save-excursion
-	(if (not (memq (char-syntax (char-before)) '(?w ?_)))
+	(if (or (bobp) (not (memq (char-syntax (char-before)) '(?w ?_))))
 	    (while (not (looking-at "\\sw\\|\\s_\\|\\'"))
 	      (forward-char 1)))
 	(while (looking-at "\\sw\\|\\s_")
--- a/lisp/psgml/ChangeLog	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/psgml/ChangeLog	Mon Aug 13 09:42:26 2007 +0200
@@ -1,3 +1,8 @@
+1997-06-14  Steven L Baur  <steve@altair.xemacs.org>
+
+	* psgml-parse.el (sgml-read-model): Ebola vaccine.
+	From Andrew J Cosgriff <Andrew.Cosgriff@cc.monash.edu.au>
+
 Wed Apr 23 11:28:10 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* psgml-charent.el (sgml-display-char-list-filename): Move
--- a/lisp/psgml/psgml-parse.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/psgml/psgml-parse.el	Mon Aug 13 09:42:26 2007 +0200
@@ -1,5 +1,5 @@
 ;;;; psgml-parse.el --- Parser for SGML-editing mode with parsing support
-;; $Id: psgml-parse.el,v 1.5 1997/03/16 03:05:41 steve Exp $
+;; $Id: psgml-parse.el,v 1.6 1997/06/14 20:31:36 steve Exp $
 
 ;; Copyright (C) 1994, 1995 Lennart Staflin
 
@@ -1035,7 +1035,7 @@
 	 (sgml-read-nodes (make-vector n nil)))
     (loop for i below n do (aset sgml-read-nodes i (sgml-make-state)))
     (loop for e across sgml-read-nodes do
-	  (cond ((eq 255 (sgml-read-peek))	; a and-node
+	  (cond ((eq ?\377 (sgml-read-peek))	; a and-node
 		 (sgml-read-octet)		; skip
 		 (setf (sgml-and-node-next e) (sgml-read-node-ref))
 		 (setf (sgml-and-node-dfas e) (sgml-read-model-seq)))
--- a/lisp/tm/tm-ew-e.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/tm/tm-ew-e.el	Mon Aug 13 09:42:26 2007 +0200
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc.
 
 ;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
-;; Version: $Revision: 1.3 $
+;; Version: $Revision: 1.4 $
 ;; Keywords: encoded-word, MIME, multilingual, header, mail, news
 
 ;; This file is part of tm (Tools for MIME).
@@ -35,7 +35,7 @@
 ;;;
 
 (defconst tm-ew-e/RCS-ID
-  "$Id: tm-ew-e.el,v 1.3 1997/06/11 19:26:16 steve Exp $")
+  "$Id: tm-ew-e.el,v 1.4 1997/06/14 20:31:38 steve Exp $")
 (defconst mime-eword/encoder-version (get-version-string tm-ew-e/RCS-ID))
 
 
--- a/lisp/utils/lib-complete.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/utils/lib-complete.el	Mon Aug 13 09:42:26 2007 +0200
@@ -36,7 +36,7 @@
 ;; Last Modified By: Heiko M|nkel <muenkel@tnt.uni-hannover.de>
 ;; Additional XEmacs integration By: Chuck Thompson <cthomp@cs.uiuc.edu>
 ;; Last Modified On: Thu Jul 1 14:23:00 1994
-;; RCS Info        : $Revision: 1.3 $ $Locker:  $
+;; RCS Info        : $Revision: 1.4 $ $Locker:  $
 ;; ========================================================================
 ;; NOTE: XEmacs must be redumped if this file is changed.
 ;;
@@ -252,7 +252,11 @@
 				   FILTER (or MUST-MATCH FULL) nil)))
     (cond 
      ((equal library "") DEFAULT)
-     (FULL (locate-file library read-library-internal-search-path ".el:.elc"))
+     (FULL (locate-file library read-library-internal-search-path
+			;; decompression doesn't work with Mule -slb
+			(if (featurep 'mule)
+			    ".el:.elc"
+			  ".el:.el.gz:.elc")))
      (t library))))
 
 ;; NOTE: as a special case, read-library may be used to read a filename
@@ -265,8 +269,11 @@
   "Front end to read-library"
   (read-library "Find Library file: " load-path nil t t
 		  (function (lambda (fn) 
-			      (cond 
-			       ((string-match "\\.el$" fn)
+			      (cond
+			       ;; decompression doesn't work with mule -slb
+			       ((string-match (if (featurep 'mule)
+						  "\\.el$"
+						"\\.el\\(\\.gz\\)?$") fn)
 				(substring fn 0 (match-beginning 0))))))
 		  ))
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/utils/ph.el	Mon Aug 13 09:42:26 2007 +0200
@@ -0,0 +1,897 @@
+;;; ph.el --- Client for the CCSO directory system (aka PH/QI)
+
+;; Copyright (C) 1997 Oscar Figueiredo
+
+;; Author: Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
+;; Maintainer: Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
+;; Created: May 1997
+;; Version: $Revision: 1.2 $
+;; Keywords: help
+
+;; This file is part of XEmacs
+
+;; XEmacs is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; XEmacs is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with XEmacs; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; LCD Archive Entry (not registered yet):
+;; ph|Oscar Figueiredo|Oscar.Figueiredo@di.epfl.ch|
+;; Client for the CCSO directory system (aka PH/QI)|
+;; 27-May-1997|Version $Revision: 1.2 $|ftp://(Not Available)
+
+;;    This package provides functions to query CCSO nameservers through an
+;;    interactive form or replace inline query strings in buffers with
+;;    appropriately formatted query results (especially used to expand email
+;;    addresses in message buffers). It also interfaces with the BBDB package
+;;    to let you register entries of the CCSO directory into your own database.
+;;    The CCSO white pages system was developped at UIUC and is in use in more
+;;    than 300 sites in the world. The distribution can be found at
+;;    ftp://uiarchive.cso.uiuc.edu/pub/packages/ph 
+;;    Traditionally the server is called QI while the client is called PH.
+
+;;; Installation:
+;;    This package uses the custom and widget libraries. If they are not already 
+;;    installed on your system get them from http://www.dina.kvl.dk/~abraham/custom/
+;;    Then uncomment and add the following to your .emacs file:
+;;      (require 'ph)
+;;      (eval-after-load "message"
+;;                       (define-key message-mode-map [(control ?c) (tab)] 'ph-expand-inline))
+;;      (eval-after-load "mail"
+;;                       (define-key mail-mode-map [(control ?c) (tab)] 'ph-expand-inline))
+
+;;    This package should run under XEmacs 19.15 or 20 as well as under Emacs 19.34 and above
+
+;;; Usage:
+;;    * Provided you did the installation as proposed in the above section, 
+;;      inline expansion will be available when you compose an email
+;;      message. Type the name of somebody recorded in your PH/QI server and hit
+;;      C-c TAB, this will overwrite the name with the corresponding email 
+;;      address
+;;    * M-x ph-customize to customize inline expansion and other features to
+;;      your needs.
+;;    * Look for the Ph submenu in the tools menu for more.
+
+;;; Code:
+
+(eval-when-compile
+  (require 'wid-edit))
+(require 'custom)
+(if (not (fboundp 'make-overlay))
+    (require 'overlay))
+(if (locate-library "timer")
+    (require 'timer))
+(autoload 'custom-menu-create "cus-edit")
+
+;;{{{      Package customization variables
+
+(defgroup ph nil 
+  "CCSO (PH/QI) directory system client"
+  :group 'mail
+  :group 'comm)
+
+(defcustom ph-server nil
+  "*The name or IP address of the CCSO (PH/QI) server.
+A port number may be specified by appending a colon and a
+number to the name of the server."
+  :type  '(string :tag "Server")
+  :group 'ph)
+
+(defcustom ph-strict-return-matches t
+  "*If non-nil, entries that do not contain all the requested return fields are ignored."
+  :type  'boolean
+  :group 'ph)
+
+(defcustom ph-default-return-fields nil
+  "*A list of the default fields to extract from CCSO entries.
+If it contains `all' then all available fields are returned.
+nil means return the default fields as configured in the server."
+  :type  '(repeat (symbol :tag "Field name"))
+  :group 'ph)
+
+(defcustom ph-multiple-match-handling-method 'select
+  "*What to do when multiple entries match a query for an inline expansion.
+Possible values are: 
+`first' (equivalent to nil) which means consider the first match.
+`select' pop-up a selection buffer
+`all' use all matches
+`abort' the operation is aborted, an error is signaled"
+  :type  '(choice :menu-tag "Method"
+		  (const :menu-tag "First"  first)
+		  (const :menu-tag "Select" select)
+		  (const :menu-tag "All"    all)
+		  (const :menu-tag "Abort"  abort)
+		  (const :menu-tag "None" nil))
+  :group 'ph)
+
+(defcustom ph-duplicate-fields-handling-method 'list
+  "*A method to handle entries containing duplicate fields.
+This is either an alist (FIELD . METHOD) or a symbol METHOD.
+The alist form of the variable associates a method to an individual field,
+the second form specifies a method applicable to all fields.
+Available methods are:
+`list' or nil lets the value of the field be a list of values
+`first' keeps the first value and discards the others,
+`concat' concatenates the values into a single multiline string,
+`duplicate' duplicates the entire entry into as many instances as 
+different values."
+  :type '(choice (const :menu-tag "List" list)
+		 (const :menu-tag "First" first)
+		 (const :menu-tag "Concat" concat)
+		 (const :menu-tag "Duplicate" duplicate)
+		 (repeat :menu-tag "Per Field Specification"
+			 :tag "Per Field Specification"
+			 (cons :tag "Field/Method"
+			       :value (nil . list)
+			       (symbol :tag "Field name")
+			       (choice :tag "Method"
+				       :menu-tag "Method"
+				       (const :menu-tag "List" list)
+				       (const :menu-tag "First" first)
+				       (const :menu-tag "Concat" concat)
+				       (const :menu-tag "Duplicate" duplicate)))))
+  :group 'ph
+)
+
+(defcustom ph-inline-query-format-list nil
+  "*Format of an inline expansion query.
+If the inline query string consists of several words, this list specifies 
+how these individual words are associated to CCSO database field names.
+If nil all the words will be mapped onto the default CCSO database key."
+  :type  '(repeat (symbol :tag "Field name"))
+  :group 'ph)
+
+(defcustom ph-expanding-overwrites-query t
+  "*If non nil, expanding a query overwrites the query string"
+  :type  'boolean
+  :group 'ph)
+
+(defcustom ph-inline-expansion-format '("%s" email)
+  "*A list specifying the format of the expansion of inline queries.
+This variable controls what ph-expand-inline actually inserts in the buffer.
+First element is a string passed to format. Remaining elements are symbols
+indicating CCSO database field names, corresponding field values are passed
+as additional arguments to format."
+  :type  '(list (string :tag "Format String")
+		(repeat :inline t
+			:tag "Field names"
+			(symbol :tag "")))
+  :group 'ph)
+
+(defcustom ph-form-fields '(name firstname email phone)
+  "*A list of fields presented in the query form."
+  :tag   "Default Fields in Query Forms"
+  :type  '(repeat (symbol :tag "Field name"))
+  :group 'ph)
+
+(defcustom ph-fieldname-formstring-alist '((url . "URL")
+					    (unix_gid . "Unix GID")
+					    (unix_uid . "Unix UID")
+					    (unit_code . "Unit Code")
+					    (department_code . "Department Code")
+					    (high_school . "High School")
+					    (home_phone . "Home Phone")
+					    (office_phone . "Office Phone")
+					    (callsign . "HAM Call Sign")
+					    (office_address . "Office Address")
+					    (office_location . "Office Location")
+					    (id . "ID")
+					    (email . "E-Mail")
+					    (firstname . "First Name"))
+  "*A mapping of CCSO database field names onto prompt strings used in query/response forms.
+Prompt strings for fields that are not in this are derived by capitalizing
+the field name."
+  :tag   "Mapping of Field Names onto Prompt Strings"
+  :type  '(repeat (cons :tag "Field"
+			(symbol :tag "Name")
+		        (string :tag "Prompt string")))
+  :group 'ph)
+
+(defcustom ph-bbdb-mapping-alist '((name . (firstname name))
+				    (email . net))
+  "*A mapping of CCSO database field names onto BBDB field names"
+  :tag "CCSO to BBDB Field Name Mapping"
+  :type '(repeat (cons :tag "Field Name"
+		       (symbol :tag "CCSO")
+		       (sexp :tag "BBDB")))
+  :group 'ph)
+
+(defcustom ph-options-file "~/.emacs"
+  "*A file where the servers hotlist is stored. 
+It should be loaded automatically at startup so ~/.emacs is a reasonable
+choice."
+  :type '(file :Tag "File Name:"))
+
+;;}}}
+
+
+;;{{{      Internal cooking
+
+(defconst ph-xemacs-p (string-match "XEmacs" emacs-version))
+(defconst ph-fsfemacs-p (not ph-xemacs-p))
+(defconst ph-xemacs-mule-p (and ph-xemacs-p
+				 (featurep 'mule)))
+(defconst ph-fsfemacs-mule-p (and ph-fsfemacs-p
+				   (featurep 'mule)))
+
+(defvar ph-server-hotlist nil)
+
+(defconst ph-default-server-port 105
+  "Default TCP port for CCSO directory services")
+
+(defvar ph-form-widget-list nil)
+(defvar ph-process-buffer nil)
+(defvar ph-read-point)
+
+(defun ph-display-records (records &optional raw-field-names)
+  "Display the record list RECORDS in a formatted buffer. 
+If RAW-FIELD-NAMES is non nil, no translation to form strings or 
+capitalization is done on field names."
+  (let ((buffer (get-buffer-create "*PH Query Results*"))
+	inhibit-read-only
+	precords
+	(width 0)
+	beg field-beg
+	field-name)
+    (switch-to-buffer buffer)    
+    (setq buffer-read-only t)
+    (setq inhibit-read-only t)
+    (erase-buffer)
+    (kill-all-local-variables)
+    (insert "PH Query Result\n")
+    (insert "===============\n\n\n")
+    (if (null records)
+	(insert "No match found.\n"
+		(if ph-strict-return-matches
+		    "Try setting ph-strict-return-matches to nil or change ph-default-return-fields."
+		  ""))
+      ;; Replace field names with prompt strings, compute prompt max width
+      (setq precords
+	    (mapcar 
+	     (function
+	      (lambda (record)
+		(mapcar 
+		 (function
+		  (lambda (field)
+		    (setq field-name (if raw-field-names
+					 (symbol-name (car field))
+				       (or (and (assq (car field) ph-fieldname-formstring-alist)
+						(cdr (assq (car field) ph-fieldname-formstring-alist)))
+					   (capitalize (symbol-name (car field))))))
+		    (if (> (length field-name) width)
+			(setq width (length field-name)))
+		    (cons field-name (cdr field))))
+		 record)))
+	     records))
+      (mapcar (function
+	       (lambda (record)
+		 (setq beg (point))
+		 ;; Actually insert the field/value pairs
+		 (mapcar (function
+			  (lambda (field)
+			    (setq field-beg (point))
+			    (insert (format (concat "%" width "s: ") (car field)))
+			    (put-text-property field-beg (point) 'face 'bold)
+			    (mapcar (function 
+				     (lambda (val)
+				       (indent-to (+ 2 width))
+				       (insert val "\n")))
+				    (if (stringp (cdr field))
+					(split-string (cdr field) "\n")
+				      (cdr field)))))
+			 record)
+		 ;; Store the record internal format in some convenient place
+		 (overlay-put (make-overlay beg (point))
+			      'ph-record
+			      (car records))
+		 (setq records (cdr records))
+		 (insert "\n")))
+	      precords))
+    (insert "\n")
+    (widget-create 'push-button
+		   :notify (lambda (&rest ignore)
+			     (ph-query-form))
+		   "New query")
+    (widget-insert " ")
+    (widget-create 'push-button
+		   :notify (lambda (&rest ignore)
+			     (kill-this-buffer))
+		   "Quit")
+    (use-local-map widget-keymap)
+    (widget-setup)      
+    )
+)
+
+(defun ph-process-form ()
+  "Process the form in current buffer and display the results"
+  (let (query-alist
+	value)
+    (if (not (and (boundp 'ph-form-widget-list)
+		  ph-form-widget-list))
+	(error "Not in a PH query form buffer")
+      (mapcar (function 
+	       (lambda (wid-field)
+		 (setq value (widget-value (cdr wid-field)))
+		 (if (not (string= value ""))
+		     (setq query-alist (cons (cons (car wid-field) value)
+					     query-alist)))))
+	      ph-form-widget-list)
+      (kill-buffer (current-buffer))
+      (ph-display-records (ph-query-internal query-alist))
+    )))
+			   
+					 
+(defun ph-query-internal (query &optional return-fields)
+  "Query the PH/QI server with QUERY.
+QUERY can be a string NAME or a list made of strings NAME 
+and/or cons cells (KEY . VALUE) where KEYs should be valid 
+CCSO database keys. NAME is equivalent to (DEFAULT . NAME) where 
+DEFAULT is the default key of the database) 
+RETURN-FIELDS is a list of database fields to return defaulting to 
+ph-default-return-fields."
+  (let (request)
+    (if (null return-fields)
+	(setq return-fields ph-default-return-fields))
+    (setq request 
+	  (concat "query "
+		  (if (stringp query)
+		      query
+		    (mapconcat (function (lambda (elt)
+					   (if (stringp elt) elt)
+					   (format "%s=%s" (car elt) (cdr elt))))
+			       query
+			       " "))
+		  (if return-fields
+		      (concat " return " (mapconcat 'symbol-name return-fields " ")))))
+    (and (> (length request) 6)
+	 (ph-do-request request)
+	 (ph-parse-query-result return-fields))))
+
+(defun ph-parse-query-result (&optional fields)
+  "Return a list of alists of key/values from the record in ph-process-buffer. 
+Fields not in FIELDS are discarded."
+  (let (record records
+	line-regexp
+	current-key key value
+	ignore)
+    (save-excursion
+      (message "Parsing results...")
+      (set-buffer ph-process-buffer)
+      (goto-char (point-min))
+      (while (re-search-forward "^\\(-[0-9]+\\):\\([0-9]+\\):" nil t)
+	(catch 'ignore
+	  (setq line-regexp (concat "^\\(-[0-9]+\\):" (match-string 2) ":[ \t]*\\([-a-zA-Z_]*\\)?:[ \t]*\\(.*\\)$"))
+	  (beginning-of-line)
+	  (setq record nil
+		ignore nil
+		current-key nil)
+	  (while (re-search-forward line-regexp nil t)
+	    (catch 'skip-line
+	      (if (string= "-508" (match-string 1))
+		  ;; A field is missing in this entry. Skip it or skip the
+		  ;; whole record (see ph-strict-return-matches)
+		  (if (not ph-strict-return-matches)
+		      (throw 'skip-line t)
+		    (while (re-search-forward line-regexp nil t))
+		    (setq ignore t)
+		    (throw 'ignore t)))
+	      (setq key   (and (not (string= (match-string 2) ""))
+			       (intern (match-string 2)))
+		    value (match-string 3))
+	      (if (and current-key
+		       (eq key current-key)) 
+		  (setq key nil)
+		(setq current-key key))
+	      (if (or (null fields)
+		      (memq 'all fields)
+		      (memq current-key fields))
+		  (if key
+		      (setq record (cons (cons key value) record))
+		    (setcdr (car record) (cons value (if (listp (cdar record))
+							 (cdar record)
+						       (cons (cdar record) nil)))))))))
+	(and (not ignore)
+	     (or (null fields)
+		 (memq 'all fields)
+		 (setq record (nreverse record)))
+	     (setq record (if (not (eq 'list ph-duplicate-fields-handling-method))
+			       (ph-filter-duplicate-fields record)
+			     (list record)))
+	     (setq records (append record records))))
+      )
+    (message "Done")
+    records)
+  )
+
+(defun ph-filter-duplicate-fields (record)
+  "Filter RECORD according to ph-duplicate-fields-handling-method."
+  (let ((rec record)
+	unique
+	duplicates
+	result)
+
+    ;; Search for multiple records
+    (while (and rec
+		(not (listp (cdar rec))))
+      (setq rec (cdr rec)))
+
+    (if (null (cdar rec))
+	(list record)			; No duplicate fields in this record
+      (mapcar (function 
+	       (lambda (field)
+		 (if (listp (cdr field))
+		     (setq duplicates (cons field duplicates))
+		   (setq unique (cons field unique)))))
+	      record)
+      (setq result (list unique))
+      (mapcar (function
+	       (lambda (field)
+		 (let ((method (if (consp ph-duplicate-fields-handling-method)
+				   (cdr (assq (car field) ph-duplicate-fields-handling-method))
+				 ph-duplicate-fields-handling-method)))
+		 (cond
+		  ((or (null method) (eq 'list method))
+		   (setq result 
+			 (ph-add-field-to-records field result)))
+		  ((eq 'first method)
+		   (setq result 
+			 (ph-add-field-to-records (cons (car field) (cadr field)) result)))
+		  ((eq 'concat method)
+		   (setq result 
+			 (ph-add-field-to-records (cons (car field)
+							 (mapconcat 
+							  'identity
+							  (cdr field)
+							  "\n")) result)))
+		  ((eq 'duplicate method)
+		   (setq result
+			 (ph-distribute-field-on-records field result)))))))
+	      duplicates)
+      result)))
+			    
+(defun ph-add-field-to-records (field records)
+  "Add FIELD to each individual record in RECORDS and return the resulting list."
+  (mapcar (function
+	   (lambda (r)
+	     (cons field r)))
+	  records))
+
+(defun ph-distribute-field-on-records (field records)
+  "Duplicate each individual record in RECORDS according to value of FIELD.
+Each copy is added a new field containing one of the values of FIELD."
+  (let (result
+	(values (cdr field)))
+    ;; Uniquify values first
+    (while values
+      (setcdr values (delete (car values) (cdr values)))
+      (setq values (cdr values)))
+    (mapcar (function
+	     (lambda (value)
+	       (let ((result-list (copy-sequence records)))
+		 (setq result-list (ph-add-field-to-records (cons (car field) value)
+							      result-list))
+		 (setq result (append result-list result))
+	       )))
+	    (cdr field))
+    result)
+)
+
+(defun ph-do-request (request)
+  "Send REQUEST to the server. Wait for response and return the buffer containing it."
+  (let (process
+	buffer)
+    (unwind-protect
+	(progn
+	  (message "Contacting server...")
+	  (setq process (ph-open-session))
+	  (if process
+	      (save-excursion 
+		(set-buffer (setq buffer (process-buffer process)))
+		(ph-send-command process request)
+		(message "Request sent, waiting for reply...")
+		(ph-read-response process))))
+      (if process
+	  (ph-close-session process)))
+    buffer))
+	      
+(defun ph-open-session (&optional server)
+  "Open a connection to the given CCSO SERVER.
+SERVER is either a string naming the server or a list (NAME PORT)."
+  (let (process
+	host
+	port)
+    (catch 'done
+      (if (null server)
+	  (setq server (or ph-server
+			   (call-interactively 'ph-set-server))))
+      (string-match "\\(.*\\)\\(:\\(.*\\)\\)?" server)
+      (setq host (match-string 1 server))
+      (setq port (or (match-string 3 server)
+		     ph-default-server-port))
+      (setq ph-process-buffer (get-buffer-create (format " *PH-%s*" host)))
+      (save-excursion
+	(set-buffer ph-process-buffer)
+	(erase-buffer)
+	(setq ph-read-point (point))
+	(and ph-xemacs-mule-p
+	     (set-buffer-file-coding-system 'binary t)))
+      (setq process (open-network-stream "ph" ph-process-buffer host port))
+      (if (null process)
+	  (throw 'done nil))
+      (process-kill-without-query process)
+      process)))
+
+
+(defun ph-close-session (process)
+  (save-excursion
+    (set-buffer (process-buffer process))
+    (ph-send-command process "quit")
+    (ph-read-response process)
+    (if (fboundp 'add-async-timeout)
+	(add-async-timeout 10 'delete-process process)
+      (run-at-time 2 nil 'delete-process process))))
+
+(defun ph-send-command (process command)
+  (goto-char (point-max))
+  (process-send-string process command)
+  (process-send-string process "\r\n")
+)
+
+(defun ph-read-response (process &optional return-response)
+  "Read a response from the PH/QI query process PROCESS.
+Returns nil if response starts with an error code. If the
+response is successful the return code or the reponse itself is returned
+depending on RETURN-RESPONSE"
+  (let ((case-fold-search nil)
+	return-code
+	match-end)
+    (goto-char ph-read-point)
+    ;; CCSO protocol : response complete if status >= 200
+    (while (not (re-search-forward "^\\(^[2-5].*\\):.*\n" nil t))
+      (accept-process-output process)
+      (goto-char ph-read-point))
+    (setq match-end (point))
+    (goto-char ph-read-point)
+    (if (and (setq return-code (match-string 1))
+	     (setq return-code (string-to-number return-code))
+	     (>= (abs return-code) 300))
+	(progn (setq ph-read-point match-end) nil)
+      (setq ph-read-point match-end)
+      (if return-response
+	  (buffer-substring (point) match-end)
+	return-code))))
+
+;;; FSF Emacs does not provide that one
+(if (not (fboundp 'split-string))
+    (defun split-string (string pattern)
+      "Return a list of substrings of STRING which are separated by PATTERN."
+      (let (parts (start 0))
+	(while (string-match pattern string start)
+	  (setq parts (cons (substring string start (match-beginning 0)) parts)
+		start (match-end 0)))
+	(nreverse (cons (substring string start) parts))
+	)))
+
+;;}}}				 
+
+;;{{{      High-level interfaces (interactive functions)
+
+(defun ph-customize ()
+  "Customize the PH package."
+  (interactive)
+  (customize 'ph))
+
+(defun ph-set-server (server)
+  "Set the server to SERVER."
+  (interactive "sNew PH/QI Server: ")
+  (setq ph-server server)
+  (message "Selected PH/QI server is now %s" server))
+
+(defun ph-get-email (name)
+  "Get the email field of NAME from the PH/QI directory server."
+  (interactive "sName: ")
+  (let ((email (cdaar (ph-query-internal name '(email)))))
+    (if (interactive-p)
+	(if email
+	    (message "%s" email)
+	  (message "No record matching %s" name)))
+    email))
+
+(defun ph-get-phone (name)
+  "Get the phone field of NAME from the PH/QI directory server."
+  (interactive "sName: ")
+  (let ((phone (cdaar (ph-query-internal name '(phone)))))
+    (if (interactive-p)
+	(if phone
+	    (message "%s" phone)
+	  (message "No record matching %s" name)))
+    phone))
+
+(defun ph-get-field-list ()
+  "Return a list of valid field names for current server.
+When called interactively the list is formatted in a dedicated buffer
+otherwise a list of symbols is returned."
+  (interactive)
+  (ph-do-request "fields")
+  (if (interactive-p)
+      (let ((ph-duplicate-fields-handling-method 'list))
+	(ph-display-records (ph-parse-query-result) t))
+    (mapcar 'caar 
+	    (ph-parse-query-result)))
+)
+
+(defun ph-expand-inline (&optional replace)
+  "Query the server and expand the query string before point.
+The query string consists of the buffer substring from the point back to
+the preceding comma, colon or beginning of line. If it consists of more than
+one word the variable ph-inline-query-format-list controls how these are mapped
+onto CCSO database field names.
+After querying the server for the given string, the expansion specified by 
+ph-inline-expansion-format is inserted in the buffer at point. If REPLACE is t 
+then this expansion replaces the name in the buffer.
+If ph-expanding-overwrites-query is t then the meaning of REPLACE is inverted."
+  (interactive)
+  (let* ((end (point))
+	 (beg (save-excursion
+		(if (re-search-backward "[:,][ \t]*" 
+					(save-excursion
+					  (beginning-of-line)
+					  (point))
+					'move)
+		    (goto-char (match-end 0)))
+		(point)))
+	 (words (buffer-substring beg end))
+	 query
+	 query-alist
+	 (query-format ph-inline-query-format-list)
+	 response
+	 response-strings
+	 key val cell)
+    
+    ;; Prepare the query
+    (if (or (not query-format)
+	    (not (string-match "[ \t]+" words)))
+	(setq query words)
+      (setq words (split-string words "[ \t]+"))
+      (while (and words query-format)
+	(setq query-alist (cons (cons (car query-format) (car words)) query-alist))
+	(setq words (cdr words)
+	      query-format (cdr query-format)))
+      (if words
+	  (setcdr (car query-alist)
+		  (concat (cdar query-alist) " "
+			  (mapconcat 'identity words " "))))
+      ;; Uniquify query-alist
+      (setq query-alist (nreverse query-alist))
+      (while query-alist
+	(setq key (caar query-alist)
+	      val (cdar query-alist)
+	      cell (assq key query))
+	(if cell
+	    (setcdr cell (concat val " " (cdr cell)))
+	  (setq query (cons (car query-alist) query))))
+      (setq query-alist (cdr query-alist)))
+
+    (setq response (ph-query-internal query (cdr ph-inline-expansion-format)))
+
+    (if (null response)
+	(error "No match found")
+
+      ;; Process response through ph-inline-expansion-format
+      (while response
+	(setq response-strings
+	      (cons (apply 'format 
+			   (car ph-inline-expansion-format)
+			   (mapcar (function 
+				    (lambda (field)
+				      (or (cdr (assq field (car response))) 
+					  "")))
+				   (cdr ph-inline-expansion-format)))
+		    response-strings))
+	(setq response (cdr response)))
+
+      (if (or
+	   (and replace (not ph-expanding-overwrites-query))
+	   (and (not replace) ph-expanding-overwrites-query))
+	  (delete-region beg end))
+      (cond 
+       ((or (= (length response-strings) 1)
+	    (null ph-multiple-match-handling-method)
+	    (eq ph-multiple-match-handling-method 'first))
+	(insert (car response-strings)))
+       ((eq ph-multiple-match-handling-method 'select)
+	(with-output-to-temp-buffer "*Completions*"
+	  (display-completion-list response-strings)))
+       ((eq ph-multiple-match-handling-method 'all)
+	(insert (mapconcat 'identity response-strings ", ")))
+       ((eq ph-multiple-match-handling-method 'abort)
+	(error "There is more than one match for the query"))
+       ))
+    )
+)
+
+(defun ph-query-form (&optional get-fields-from-server)
+  "*Display a form to query the CCSO PH/QI nameserver.
+If given a non-nil argument the function first queries the  server 
+for the existing fields and displays a corresponding form."
+  (interactive "P")
+  (let ((fields (or (and get-fields-from-server
+			 (ph-get-field-list))
+		    ph-form-fields))
+	(buffer (get-buffer-create "*PH/QI Query Form*"))
+	field-name
+	widget
+	(width 0)
+	inhibit-read-only
+	pt)
+    (switch-to-buffer buffer)
+    (setq inhibit-read-only t)
+    (erase-buffer)
+    (kill-all-local-variables)
+    (make-local-variable 'ph-form-widget-list)
+    (widget-insert "PH/QI Query Form\n")
+    (widget-insert "================\n\n")
+    (widget-insert "Current server is: " (or ph-server
+					     (call-interactively 'ph-set-server)) "\n")
+    ;; Loop over prompt strings to find the biggest one
+    (setq fields 
+	  (mapcar (function
+		   (lambda (field)
+		     (setq field-name (or (and (assq field ph-fieldname-formstring-alist)
+					       (cdr (assq field ph-fieldname-formstring-alist)))
+					  (capitalize (symbol-name field))))
+		     (if (> (length field-name) width)
+			 (setq width (length field-name)))
+		     (cons field field-name)))
+		  fields))
+    ;; Insert the first widget out of the mapcar to leave the cursor 
+    ;; in the first field 
+    (widget-insert "\n\n" (format (concat "%" width "s: ") (cdr (car fields))))
+    (setq pt (point))
+    (setq widget (widget-create 'editable-field :size 15))
+    (setq ph-form-widget-list (cons (cons (car (car fields)) widget)
+				     ph-form-widget-list))
+    (setq fields (cdr fields))
+    (mapcar (function
+	     (lambda (field)
+	       (widget-insert "\n\n" (format (concat "%" width "s: ") (cdr field)))
+	       (setq widget (widget-create 'editable-field
+					   :size 15))
+	       (setq ph-form-widget-list (cons (cons (car field) widget)
+						ph-form-widget-list))))
+	    fields)
+    (widget-insert "\n\n")
+    (widget-create 'push-button
+		   :notify (lambda (&rest ignore)
+			     (ph-process-form))
+		   "Query Server")
+    (widget-insert " ")
+    (widget-create 'push-button
+		   :notify (lambda (&rest ignore)
+			     (ph-query-form))
+		   "Reset Form")
+    (widget-insert " ")
+    (widget-create 'push-button
+		   :notify (lambda (&rest ignore)
+			     (kill-this-buffer))
+		   "Quit")
+    (goto-char (1+ pt)) ; 1+ for some extent boundary reason
+    (use-local-map widget-keymap)
+    (widget-setup))
+  )
+
+(defun ph-bookmark-server (server)
+  "Add SERVER to the servers' hotlist."
+  (interactive "sServer: ")
+  (if (member server ph-server-hotlist)
+      (error "%s is already in the hotlist" server)
+    (setq ph-server-hotlist (cons server ph-server-hotlist))
+    (ph-install-menu)
+    (ph-save-hotlist)))
+
+(defun ph-bookmark-current-server ()
+  "Add current server to the servers' hotlist."
+  (interactive)
+  (ph-bookmark-server ph-server))
+
+(defun ph-save-hotlist ()
+  "Save the servers hotlist to ph-options-file"
+  (save-excursion
+    (set-buffer (find-file-noselect ph-options-file))
+    ;; delete the previous setq
+    (catch 'found
+      (while t
+	(let ((sexp (condition-case nil
+			(read (current-buffer))
+		      (end-of-file (throw 'found nil)))))
+	  (if (and (listp sexp)
+		   (eq (car sexp)  'setq)
+		   (eq (cadr sexp) 'ph-server-hotlist))
+	      (progn
+		(delete-region (save-excursion
+				 (backward-sexp)
+				 (point))
+			       (point))
+		(throw 'found t))))))
+    (let ((standard-output (current-buffer)))
+      (if (not (bolp))
+	  (princ "\n"))
+      (princ "(setq ph-server-hotlist '")
+      (prin1 ph-server-hotlist)
+      (princ ")\n"))
+    (save-buffer))
+)
+
+;;}}}
+
+;;{{{      Menu interface
+
+(require 'easymenu)
+
+(defconst ph-tail-menu 
+  `(["---" nil nil]
+    ["Query Form" ph-query-form t]
+    ["Expand Inline" ph-expand-inline t]
+    ["---" nil nil]
+    ["Get Email" ph-get-email t]
+    ["Get Phone" ph-get-phone t]
+    ["List Valid Field Names" ph-get-field-list t]
+    ["---" nil nil]    
+    ,(cons "Customize" (cdr (custom-menu-create 'ph)))))
+
+(defconst ph-server-menu 
+  '(["---" ph-bookmark-server t]
+    ["Bookmark Current Server" ph-bookmark-current-server t]
+    ["New Server" ph-set-server t]))
+
+
+(defun ph-menu ()
+  (let (command)
+    (append '("Ph")
+	    (list
+	     (append '("Server")
+		     (mapcar (function 
+			      (lambda (server)
+				(setq command (intern (concat "ph-set-server-" server)))
+				(if (not (fboundp command))
+				    (fset command `(lambda ()
+						     (interactive)
+						     (setq ph-server ,server)
+						     (message "Selected PH/QI server is now %s" ,server))))
+				(vector server command t)))
+			     ph-server-hotlist)
+		     ph-server-menu))
+	    ph-tail-menu)))
+
+(defun ph-install-menu ()
+  (cond 
+   (ph-xemacs-p
+    (add-submenu '("Tools") (ph-menu)))
+   (ph-fsfemacs-p
+    (define-key 
+      global-map
+      [menu-bar tools ph] 
+      (cons "Ph"
+	    (easy-menu-create-keymaps "Ph" (cdr (ph-menu))))))
+   ))
+
+(ph-install-menu)
+  
+      
+;;}}}
+
+(provide 'ph)
+
+;;; ph.el ends here
--- a/lisp/version.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/version.el	Mon Aug 13 09:42:26 2007 +0200
@@ -25,11 +25,11 @@
 (defconst emacs-version "20.3"
   "Version numbers of this version of XEmacs.")
 
-(defconst xemacs-codename "Moscow"
+(defconst xemacs-codename "Oslo"
   "Release nickname, primarily useful for trial prereleases.
 Warning, this variable did not exist in XEmacs versions prior to 20.3")
 
-(defconst xemacs-betaname "(beta6)"
+(defconst xemacs-betaname "(beta7)"
   "Non-nil when this is a test (beta) version of XEmacs.
 Warning, this variable did not exist in XEmacs versions prior to 20.3")
 
--- a/lisp/x11/x-iso8859-1.el	Mon Aug 13 09:41:47 2007 +0200
+++ b/lisp/x11/x-iso8859-1.el	Mon Aug 13 09:42:26 2007 +0200
@@ -19,6 +19,7 @@
 ;; Boston, MA 02111-1307, USA.
 
 ;; created by jwz, 13-jun-92.
+;; changed by Heiko Muenkel, 12-jun-1997: Added a grave keysym.
 
 ;; Under X, when the user types a character that is ISO-8859/1 but not ASCII,
 ;; it comes in as a symbol instead of as a character code.  This keeps things
@@ -93,6 +94,7 @@
  ;; distributions.  If a vendor varies from this, adjustments will need
  ;; to be made...
 
+ (grave			?\140)
  (nobreakspace		?\240)
  (exclamdown		?\241)
  (cent			?\242)
@@ -116,9 +118,9 @@
  (acute			?\264)	; Why is there an acute keysym that is 
  (mu			?\265)	; distinct from apostrophe/quote, but 
  (paragraph		?\266)	; no grave keysym that is distinct from
- (periodcentered	?\267)	; backquote?
- (cedilla		?\270)
- (onesuperior		?\271)
+ (periodcentered	?\267)	; backquote? 
+ (cedilla		?\270)  ; I've added the grave keysym, because it's
+ (onesuperior		?\271)  ; used in x-compose (Heiko Muenkel).
  (masculine		?\272)
  (guillemotright	?\273)
  (onequarter		?\274)
--- a/man/custom.texi	Mon Aug 13 09:41:47 2007 +0200
+++ b/man/custom.texi	Mon Aug 13 09:42:26 2007 +0200
@@ -1,7 +1,7 @@
 \input texinfo.tex
 
 @c %**start of header
-@setfilename custom
+@setfilename ../info/custom
 @settitle The Customization Library
 @iftex
 @afourpaper
@@ -36,12 +36,12 @@
 Add @var{symbol} to that group. 
 @item :link
 @var{value} should be a widget type. 
-Add @var{value} to the extrenal links for this customization option.
+Add @var{value} to the external links for this customization option.
 Useful widget types include @code{custom-manual}, @code{info-link}, and
 @code{url-link}. 
 @item :load
-Add @var{value} to the files that should be loaded nefore displaying
-this customization option.  The value should be iether a string, which
+Add @var{value} to the files that should be loaded before displaying
+this customization option.  The value should be either a string, which
 should be a string which will be loaded with @code{load-library} unless
 present in @code{load-history}, or a symbol which will be loaded with
 @code{require}. 
@@ -143,7 +143,8 @@
 
 @item :require
 @var{value} should be a feature symbol.  Each feature will be required
-after initialization, of the the user have saved this option.
+when the `defcustom' is evaluated, or when Emacs is started if the user
+has saved this option. 
 
 @end table
 
@@ -157,7 +158,7 @@
 user, and @code{variable-documentation} for the documentation string.
 
 Use @code{custom-add-option} to specify that a specific function is
-useful as an meber of a hook.
+useful as an member of a hook.
 
 @defun custom-add-option symbol option
 To the variable @var{symbol} add @var{option}.
@@ -322,7 +323,7 @@
 @samp{<jens@@lemming0.lem.uni-karlsruhe.de>}.@refill
 
 @item
-Explain why it is necessary that all choices have differnet default
+Explain why it is necessary that all choices have different default
 values.
 
 @item
--- a/man/widget.texi	Mon Aug 13 09:41:47 2007 +0200
+++ b/man/widget.texi	Mon Aug 13 09:42:26 2007 +0200
@@ -1,7 +1,7 @@
 \input texinfo.tex
 
 @c %**start of header
-@setfilename widget
+@setfilename ../info/widget
 @settitle The Emacs Widget Library
 @iftex
 @afourpaper
@@ -13,7 +13,7 @@
 @comment  node-name,  next,  previous,  up
 @top The Emacs Widget Library
 
-Version: 1.9908
+Version: 1.9916
 
 @menu
 * Introduction::                
@@ -343,7 +343,7 @@
 		 :notify (lambda (widget &rest ignore)
 			   (message "You selected %s"
 				    (widget-value widget)))
-		 '(item "One") '(item "Anthor One.") '(item "A Final One."))
+		 '(item "One") '(item "Another One.") '(item "A Final One."))
   (widget-insert "\n")
   (widget-create 'push-button
 		 :notify (lambda (&rest ignore) 
@@ -604,7 +604,7 @@
 @end deffn
 
 @deffn{User Option} widget-glyph-enable
-If non-nil, allow glyphs to appear on displayes where they are supported.
+If non-nil, allow glyphs to appear on displays where they are supported.
 @end deffn
 
 
@@ -738,7 +738,7 @@
 @item :keymap
 Keymap used in the editable field.  The default value is
 @code{widget-field-keymap}, which allows you to use all the normal
-editing commands, even if the buffers major mode supress some of them.
+editing commands, even if the buffers major mode suppress some of them.
 Pressing return invokes the function specified by @code{:action}. 
 @end table
 
@@ -1525,7 +1525,7 @@
 intended to be useful for programmers doing experiments. 
 
 @deffn Command widget-minor-mode
-Togle minor mode for traversing widgets.
+Toggle minor mode for traversing widgets.
 With arg, turn widget mode on if and only if arg is positive.
 @end deffn
 
@@ -1571,7 +1571,7 @@
 Finish @code{:tab-order}.
 
 @item
-Make indentation work with glyphs and propertional fonts.
+Make indentation work with glyphs and proportional fonts.
 
 @item
 Add commands to show overview of object and class hierarchies to the
--- a/src/ChangeLog	Mon Aug 13 09:41:47 2007 +0200
+++ b/src/ChangeLog	Mon Aug 13 09:42:26 2007 +0200
@@ -1,3 +1,50 @@
+1997-06-13  Steven L Baur  <steve@altair.xemacs.org>
+
+	* data.c (eq_with_ebola_notice): Remove horrible hack to avoid
+	unavoidable Ebola notices in the bytecompiler.
+
+	* emacsfns.h: Fextent_in_region_p: Move.
+
+	* keymap.c Fextent_in_region_p: Move.
+
+Fri Jun 13 00:38:29 1997  Kyle Jones  <kyle_jones@wonderworks.com>
+
+	* src/console.c (Fsuspend_console):
+	  Disable input on ttys.  Hide unhidden frames.
+
+	* src/console.c (Fresume_console):
+	  Enable input on ttys.  Raise the device selected frame.
+
+Fri Jun 13 00:25:46 1997  Kyle Jones  <kyle_jones@wonderworks.com>
+
+	* process.c (status_notify):
+	  Revert back to the code that does not use
+	  save_excursion_restore.  Just bounds check opoint
+	  instead.
+
+	* process.c (read_process_output):
+	  Bounds check saved clip region and point values for
+	  validity before using them.  Call Fwiden before calling
+	  Fnarrow_to_region to insure values will not be out of
+	  range.
+
+1997-06-12  Steven L Baur  <steve@altair.xemacs.org>
+
+	* alloc.c: Make the GC cursor appear on all frames.
+	From Hrvoje Niksic  <hniksic@srce.hr>
+
+1997-06-11  Steven L Baur  <steve@altair.xemacs.org>
+
+	* data.c (eq_with_ebola_notice): Add byte-optimize-logmumble and
+	byte-compile-push-constant to list of ignored functions.
+
+1997-06-11  Hrvoje Niksic  <hniksic@srce.hr>
+
+	* bytecode.c (Bsave_current_buffer): Register.
+	(Fbyte_code): Do action.
+
+	* editfns.c (Fsave_current_buffer): New SUBR.
+
 1997-06-11  Steven L Baur  <steve@altair.xemacs.org>
 
 	* syntax.c (Fchar_syntax): Handle case of being passed nil.
--- a/src/alloc.c	Mon Aug 13 09:41:47 2007 +0200
+++ b/src/alloc.c	Mon Aug 13 09:42:26 2007 +0200
@@ -3956,12 +3956,12 @@
   char stack_top_variable;
   extern char *stack_bottom;
   int i;
-  struct frame *f = selected_frame ();
   int speccount = specpdl_depth ();
   Lisp_Object pre_gc_cursor = Qnil;
+  Lisp_Object changed_frames = Qnil;
   struct gcpro gcpro1;
 
-  int cursor_changed = 0;
+  int cursor_changed_selected_frame = 0;
 
   if (gc_in_progress != 0)
     return;
@@ -3972,7 +3972,7 @@
   if (preparing_for_armageddon)
     return;
 
-  GCPRO1 (pre_gc_cursor);
+  GCPRO1 (changed_frames);
 
   /* Very important to prevent GC during any of the following
      stuff that might run Lisp code; otherwise, we'll likely
@@ -3987,36 +3987,55 @@
   /* Now show the GC cursor/message. */
   if (!noninteractive)
     {
-      if (FRAME_WIN_P (f))
+      /* No need to gcpro this; gc won't catch us now. */
+      Lisp_Object frmcons, devcons, concons;
+      Lisp_Object selframe = make_frame (selected_frame ());
+
+      FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
 	{
-	  Lisp_Object frame = make_frame (f);
-	  Lisp_Object cursor = glyph_image_instance (Vgc_pointer_glyph,
-						     FRAME_SELECTED_WINDOW (f),
-						     ERROR_ME_NOT, 1);
-	  pre_gc_cursor = f->pointer;
-	  if (POINTER_IMAGE_INSTANCEP (cursor)
-	      /* don't change if we don't know how to change back. */
-	      && POINTER_IMAGE_INSTANCEP (pre_gc_cursor))
+	  struct frame *f = XFRAME (XCAR (frmcons));
+	  int cursor_changed;
+
+	  if (FRAME_WIN_P (f))
 	    {
-	      cursor_changed = 1;
-	      Fset_frame_pointer (frame, cursor);
+	      Lisp_Object frame = XCAR (frmcons);
+	      Lisp_Object cursor =
+		glyph_image_instance (Vgc_pointer_glyph,
+				      FRAME_SELECTED_WINDOW (f),
+				      ERROR_ME_NOT, 1);
+	      pre_gc_cursor = f->pointer;
+	      if (POINTER_IMAGE_INSTANCEP (cursor)
+		  /* don't change if we don't know how to change back. */
+		  && POINTER_IMAGE_INSTANCEP (pre_gc_cursor))
+		{
+		  Fset_frame_pointer (frame, cursor);
+		  /* Add the frame to the list. */
+		  changed_frames = Fcons (pre_gc_cursor, changed_frames);
+		  changed_frames = Fcons (XCAR (frmcons), changed_frames);
+		  if (EQ (XCAR (frmcons), selframe))
+		    cursor_changed_selected_frame = 1;
+		}
 	    }
 	}
-
-      /* Don't print messages to the stream device. */
-      if (!cursor_changed && !FRAME_STREAM_P (f))
-	{
-	  char *msg = (STRINGP (Vgc_message)
-		       ? GETTEXT ((char *) XSTRING_DATA (Vgc_message))
-		       : 0);
-	  Lisp_Object args[2], whole_msg;
-	  args[0] = build_string (msg ? msg :
-				  GETTEXT ((CONST char *) gc_default_message));
-	  args[1] = build_string ("...");
-	  whole_msg = Fconcat (2, args);
-	  echo_area_message (f, (Bufbyte *) 0, whole_msg, 0, -1,
-			     Qgarbage_collecting);
-	}
+      /* Now handle the plain old message. */
+      {
+	struct frame *f = XFRAME (selframe);
+	/* Don't print messages to the stream device. */
+	if (!cursor_changed_selected_frame && !FRAME_STREAM_P (f))
+	  {
+	    char *msg = (STRINGP (Vgc_message)
+			 ? GETTEXT ((char *) XSTRING_DATA (Vgc_message))
+			 : 0);
+	    Lisp_Object args[2], whole_msg;
+	    args[0] =
+	      build_string (msg ? msg :
+			    GETTEXT ((CONST char *) gc_default_message));
+	    args[1] = build_string ("...");
+	    whole_msg = Fconcat (2, args);
+	    echo_area_message (f, (Bufbyte *) 0, whole_msg, 0, -1,
+			       Qgarbage_collecting);
+	  }
+      }
     }
 
   /***** Now we actually start the garbage collection. */
@@ -4152,9 +4171,13 @@
   /* Now remove the GC cursor/message */
   if (!noninteractive)
     {
-      if (cursor_changed)
-	Fset_frame_pointer (make_frame (f), pre_gc_cursor);
-      else if (!FRAME_STREAM_P (f))
+      Lisp_Object tail = changed_frames;
+      while (CONSP (tail) && CONSP (XCDR (tail)))
+	{
+	  Fset_frame_pointer (XCAR (tail), XCAR (XCDR (tail)));
+	  tail = XCDR (XCDR (tail));
+	}
+      if (!cursor_changed_selected_frame && !FRAME_STREAM_P (selected_frame ()))
 	{
 	  char *msg = (STRINGP (Vgc_message)
 		       ? GETTEXT ((char *) XSTRING_DATA (Vgc_message))
--- a/src/bytecode.c	Mon Aug 13 09:41:47 2007 +0200
+++ b/src/bytecode.c	Mon Aug 13 09:42:26 2007 +0200
@@ -155,7 +155,8 @@
 #define Bbobp 0157
 #define Bcurrent_buffer 0160
 #define Bset_buffer 0161
-#define Bread_char 0162 /* No longer generated as of v19 */
+#define Bsave_current_buffer 0162 /* was Bread_char, but no longer
+				     generated as of v19 */
 #define Bmemq 0163 /* was Bset_mark, but no longer generated as of v18 */
 #define Binteractive_p 0164 /* Needed since interactive-p takes unevalled args */
 
@@ -941,9 +942,14 @@
 	  TOP = Fset_buffer (TOP);
 	  break;
 
-	case Bread_char:
-	  error ("read-char is an obsolete byte code");
-	  break;
+	case Bsave_current_buffer:
+	  {
+	    Lisp_Object save_current_buffer_restore (Lisp_Object);
+
+	    record_unwind_protect (save_current_buffer_restore,
+				   Fcurrent_buffer ());
+	    break;
+	  }
 
 	case Binteractive_p:
 	  PUSH (Finteractive_p ());
--- a/src/console.c	Mon Aug 13 09:41:47 2007 +0200
+++ b/src/console.c	Mon Aug 13 09:42:26 2007 +0200
@@ -914,34 +914,35 @@
 */
        (console))
 {
-  Lisp_Object devcons;
-  Lisp_Object framecons;
   struct console *c;
-  struct gcpro gcpro1;
 
 #ifdef HAVE_TTY
-  if (NILP (console))
-      console=Fselected_console();
-
-  GCPRO1 (console);
-
-  c = decode_console(console);
+  c = decode_console (console);
 
   if (CONSOLE_TTY_P (c)) 
   {
-    CONSOLE_DEVICE_LOOP (devcons, c)
+    /*
+     * hide all the unhidden frames so the display code won't update
+     * them while the console is suspended.
+     */
+    Lisp_Object device = CONSOLE_SELECTED_DEVICE (c);
+    if (!NILP (device))
       {
-	struct device *d = XDEVICE (XCAR (devcons)); 
-	DEVICE_FRAME_LOOP (framecons, d)
+	struct device *d = XDEVICE (device);
+	Lisp_Object frame_list = DEVICE_FRAME_LIST (d);
+	while (CONSP (frame_list))
 	  {
-	    Fmake_frame_invisible(XCAR(framecons), Qt);
+	    struct frame *f = XFRAME (XCAR (frame_list));
+	    if (FRAME_REPAINT_P (f))
+	      f->visible = -1;
+	    frame_list = XCDR (frame_list);
 	  }
       }
-    reset_one_console(c);
+    reset_one_console (c);
+    event_stream_unselect_console (c);
     sys_suspend_process(XINT(Fconsole_tty_controlling_process(console)));
   }
 
-  UNGCPRO;
 #endif
   return Qnil;
 }
@@ -952,27 +953,28 @@
 */
        (console))
 {
-  Lisp_Object devcons;
-  Lisp_Object framecons;
   struct console *c;
-  struct gcpro gcpro1, gcpro2, gcpro3;
 
 #ifdef HAVE_TTY
-  GCPRO2 (console, devcons);
+  c = decode_console (console);
 
-  c = decode_console(console);
-
-  if (CONSOLE_TTY_P(c)) 
+  if (CONSOLE_TTY_P (c)) 
   {
-    CONSOLE_DEVICE_LOOP (devcons, c)
+    /* raise the selected frame */
+    Lisp_Object device = CONSOLE_SELECTED_DEVICE (c);
+    if (!NILP (device))
       {
-	struct device *d = XDEVICE (XCAR (devcons)); 
-	DEVICE_FRAME_LOOP (framecons, d)
+	struct device *d = XDEVICE (device);
+	Lisp_Object frame = DEVICE_SELECTED_FRAME (d);
+	if (!NILP (frame))
 	  {
-	    Fmake_frame_visible(XCAR(framecons));
+	    /* force the frame to be cleared */
+	    SET_FRAME_CLEAR (XFRAME (frame));
+	    Fraise_frame (frame);
 	  }
       }
-    init_one_console(c);
+    init_one_console (c);
+    event_stream_select_console (c);
 #ifdef SIGWINCH
     /* The same as in Fsuspend_emacs: it is possible that a size
        change occurred while we were suspended.  Assume one did just
@@ -981,7 +983,6 @@
 #endif
   }
 
-  UNGCPRO;
 #endif
   return Qnil;
 }
--- a/src/data.c	Mon Aug 13 09:41:47 2007 +0200
+++ b/src/data.c	Mon Aug 13 09:42:26 2007 +0200
@@ -77,7 +77,10 @@
 
 int debug_ebola_backtrace_length;
 
+#if 0
+/*#ifndef LRECORD_SYMBOL*/
 #include "backtrace.h"
+#endif
 
 int
 eq_with_ebola_notice (Lisp_Object obj1, Lisp_Object obj2)
@@ -86,12 +89,13 @@
       && (debug_issue_ebola_notices >= 2
 	  || XREALINT (obj1) == XREALINT (obj2)))
     {
+#if 0
+/*#ifndef LRECORD_SYMBOL*/
       struct backtrace *bt = backtrace_list;
       char *p;
       /* Continuing the joke by printing `Ebola warning!!!' confuses */
       /* too many people.  The message must be printed because Emacs used */
       /* to work differently for two decades. */
-#ifndef LRECORD_SYMBOL
       /* temporary hack that will probably be around too long -slb */
       if (XTYPE(*bt->function) == Lisp_Symbol)
 	{
@@ -100,7 +104,9 @@
 	      !strcmp(p, "byte-compile-constants-vector") ||
 	      !strcmp(p, "byte-optimize-minus") ||
 	      !strcmp(p, "byte-optimize-plus") ||
-	      !strcmp(p, "byte-decompile-bytecode-1")) goto sc;
+	      !strcmp(p, "byte-decompile-bytecode-1") ||
+	      !strcmp(p, "byte-optimize-logmumble") ||
+	      !strcmp(p, "byte-compile-push-constant")) goto sc;
 	}
 #endif
       stderr_out("Comparison between integer and character is constant nil (");
--- a/src/editfns.c	Mon Aug 13 09:41:47 2007 +0200
+++ b/src/editfns.c	Mon Aug 13 09:42:26 2007 +0200
@@ -489,6 +489,30 @@
 			 
   return unbind_to (speccount, Fprogn (args));
 }
+
+Lisp_Object
+save_current_buffer_restore(Lisp_Object buffer)
+{
+  struct buffer *buf = XBUFFER (buffer);
+  if (!BUFFER_LIVE_P (buf))
+    return Qnil;
+  set_buffer_internal (buf);
+  return Qnil;
+}
+
+DEFUN ("save-current-buffer", Fsave_current_buffer, 0, UNEVALLED, 0, /*
+Save the current buffer; execute BODY; restore the current buffer.
+Executes BODY just like `progn'.
+*/
+  (args))
+{
+  /* This function can GC */
+  int speccount = specpdl_depth ();
+
+  record_unwind_protect (save_current_buffer_restore, Fcurrent_buffer ());
+
+  return unbind_to (speccount, Fprogn (args));
+}
 
 DEFUN ("buffer-size", Fbufsize, 0, 1, 0, /*
 Return the number of characters in BUFFER.
@@ -2100,6 +2124,7 @@
   DEFSUBR (Fregion_beginning);
   DEFSUBR (Fregion_end);
   DEFSUBR (Fsave_excursion);
+  DEFSUBR (Fsave_current_buffer);
 
   DEFSUBR (Fbufsize);
   DEFSUBR (Fpoint_max);
--- a/src/emacsfns.h	Mon Aug 13 09:41:47 2007 +0200
+++ b/src/emacsfns.h	Mon Aug 13 09:42:26 2007 +0200
@@ -861,6 +861,11 @@
 				Lisp_Object prop,
 				Lisp_Object value,
 				Lisp_Object object);
+Lisp_Object Fextent_in_region_p(Lisp_Object extent,
+				Lisp_Object from,
+				Lisp_Object to,
+				Lisp_Object flags);
+
 extern Lisp_Object Qdetached, Qdestroyed, Qbegin_glyph, Qend_glyph;
 extern Lisp_Object Qstart_open, Qend_open, Qread_only;
 extern Lisp_Object Qunique, Qduplicable;
--- a/src/keymap.c	Mon Aug 13 09:41:47 2007 +0200
+++ b/src/keymap.c	Mon Aug 13 09:42:26 2007 +0200
@@ -2418,11 +2418,6 @@
    which may not itself be under the mouse.
  */
 
-extern Lisp_Object Fextent_in_region_p(Lisp_Object extent,
-				       Lisp_Object from,
-				       Lisp_Object to,
-				       Lisp_Object flags);
-
 static void
 get_relevant_extent_keymaps (Lisp_Object pos, Lisp_Object buffer_or_string,
                              Lisp_Object glyph,
--- a/src/process.c	Mon Aug 13 09:41:47 2007 +0200
+++ b/src/process.c	Mon Aug 13 09:42:26 2007 +0200
@@ -1771,12 +1771,24 @@
 
       /* If the restriction isn't what it should be, set it.  */
       if (old_begv != BUF_BEGV (buf) || old_zv != BUF_ZV (buf))
-	Fnarrow_to_region (make_int (old_begv), make_int (old_zv),
-			   p->buffer);
+	{
+	  Fwiden(p->buffer);
+	  old_begv = bufpos_clip_to_bounds (BUF_BEG (buf),
+					    old_begv,
+					    BUF_Z (buf));
+	  old_zv = bufpos_clip_to_bounds (BUF_BEG (buf),
+					  old_zv,
+					  BUF_Z (buf));
+	  Fnarrow_to_region (make_int (old_begv), make_int (old_zv),
+			     p->buffer);
+	}
 
       /* Handling the process output should not deactivate the mark.  */
       zmacs_region_stays = old_zmacs_region_stays;
       buf->read_only = old_read_only;
+      old_point = bufpos_clip_to_bounds (BUF_BEGV (buf),
+					 old_point,
+					 BUF_ZV (buf));
       BUF_SET_PT (buf, old_point);
 
       UNGCPRO;
@@ -2600,19 +2612,19 @@
 	     when a process becomes runnable.  */
 	  else if (!EQ (symbol, Qrun) && !NILP (p->buffer))
 	    {
-	      int speccount = specpdl_depth ();
+	      Lisp_Object old_read_only = Qnil;
+	      Lisp_Object old = Fcurrent_buffer ();
+	      Bufpos opoint;
+              struct gcpro ngcpro1, ngcpro2;
 
 	      /* Avoid error if buffer is deleted
 		 (probably that's why the process is dead, too) */
 	      if (!BUFFER_LIVE_P (XBUFFER (p->buffer)))
 		continue;
 
-	      record_unwind_protect (save_excursion_restore,
-				     save_excursion_save ());
+              NGCPRO2 (old, old_read_only);
 	      Fset_buffer (p->buffer);
-	      record_unwind_protect (save_excursion_restore,
-				     save_excursion_save ());
-	      specbind(Qbuffer_read_only, Qnil);
+	      opoint = BUF_PT (current_buffer);
 	      /* Insert new output into buffer
 		 at the current end-of-output marker,
 		 thus preserving logical ordering of input and output.  */
@@ -2620,13 +2632,27 @@
 		BUF_SET_PT (current_buffer, marker_position (p->mark));
 	      else
 		BUF_SET_PT (current_buffer, BUF_ZV (current_buffer));
+	      if (BUF_PT (current_buffer) <= opoint)
+		opoint += (string_char_length (XSTRING (msg))
+                           + string_char_length (XSTRING (p->name))
+                           + 10);
+
+	      old_read_only = current_buffer->read_only;
+	      current_buffer->read_only = Qnil;
 	      buffer_insert_c_string (current_buffer, "\nProcess ");
 	      Finsert (1, &p->name);
 	      buffer_insert_c_string (current_buffer, " ");
 	      Finsert (1, &msg);
+	      current_buffer->read_only = old_read_only;
 	      Fset_marker (p->mark, make_int (BUF_PT (current_buffer)),
 			   p->buffer);
-	      unbind_to(speccount, Qnil);
+
+	      opoint = bufpos_clip_to_bounds(BUF_BEGV (XBUFFER (p->buffer)),
+					     opoint,
+					     BUF_ZV (XBUFFER (p->buffer)));
+	      BUF_SET_PT (current_buffer, opoint);
+	      Fset_buffer (old);
+              NUNGCPRO;
 	    }
 	}
     } /* end for */