Commits

Anonymous committed 34a5b81

Import from CVS: tag r20-2b1

  • Participants
  • Parent commits b27e677
  • Tags r20-2b1

Comments (0)

Files changed (104)

File CHANGES-beta

 							-*- indented-text -*-
+to 20.2 beta1
+-- W3-3.0.83 courtesy of William Perry
+-- edmacro.el-3.09 courtesy of Hrvoje Niksic
+-- live-icon.el-1.3 courtesy of Karl Hegbloom
+-- values setf method
+-- miscellaneous bug fixes
+-- verilog.el-2.25 courtesy of Michael McNamara
+-- tpu-edt.el modifications for zmacs region compatibility courtesy of
+   Kevin Oberman.
+-- custom-1.89 courtesy of Per Abrahamsen
+-- etags.c-11.83 courtesy of F. Potorti`
+-- Mega Customizations courtesy of Hrvoje Niksic
+-- "C" balloon help courtesy of Douglas Keller (experimental - placeholder)
+-- update version numbers
+
+[XEmacs 20.1 was never released to the net]
+
 to 20.1
 -- facemenu.el boo boo.
 -- VM-6.27
+Sat Apr 19 16:13:16 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* XEmacs 20.2-b1 is released.
+
+Thu Apr 17 21:33:59 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* configure.in (beta): SONY NEWS-OS has /etc/osversion and not
+	uname.
+
 Wed Apr 16 17:44:05 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* XEmacs 20.1 is re-released.
-This directory tree holds version 20.1 of XEmacs, the extensible,
+This directory tree holds version 20.2 of XEmacs, the extensible,
 customizable, self-documenting real-time display editor.
 
 See the file `etc/NEWS' for information on new features and other
 `lwlib' holds the C code for the toolkit objects used by XEmacs.
 
 `info' holds the Info documentation tree for XEmacs.
-`man' holds the source code for the XEmacs manual.
+`man' holds the source code for the XEmacs info documentation tree.
 
 `msdos' holds configuration files for compiling XEmacs under MSDOG.
     See the file etc/MSDOS for more information.

File configure.in

 dnl ############################################################################
 
 (
-echo "uname -a: `uname -a`" 
+if test -f /etc/osversion; then
+	# SONY NEWS-OS
+	echo "osversion: `cat /etc/osversion`"
+eles
+	echo "uname -a: `uname -a`" 
+fi
 echo "" 
 echo "$0 $quoted_arguments" 
 ) >> Installation
+				-*- mode:outline; minor-mode:outl-mouse -*-
+
+* Introduction
+==============
+
+You are running an experimental version of XEmacs.  Please do not
+report problems with Beta XEmacs to comp.emacs.xemacs.  Report them to
+xemacs-beta@xemacs.org.
+
+** XEmacs Beta Mailing List
+===========================
+
+*** Subscribing
+---------------
+
+If you are not subscribed to the XEmacs beta list you should be.  Send
+an email message with a subject of `subscribe' (without the quotes) to
+xemacs-beta-request@xemacs.org and follow the directions.  You do not
+have to fill out the survey if you don't want to.
+
+*** Unsubscribing
+-----------------
+
+To unsubscribe from the list send an email message with a subject of
+`unsubscribe' (without the quotes) to xemacs-beta-request@xemacs.org.
+
+*** Administrivia
+-----------------
+
+The XEmacs beta list is managed by the SmartList mailing list package,
+and the usual SmartList commands work.  Do not send mailing list
+requests to the main address (xemacs-beta@xemacs.org), always send
+them to xemacs-beta-request@xemacs.org.  If you have problems with the
+list itself, they should be brought to the attention of the Mailing
+List manager Chuck Thompson <cthomp@xemacs.org>.
+
+
+** Beta Release Schedule
+========================
+
+The URL ftp://ftp.xemacs.org/pub/beta/README always contains the best
+estimate of when the next beta XEmacs will be released.  For weekend
+betas the release time is generally in the vicinity of 2PM to 5PM US
+Pacific Time (Universal Time minus 8 hours).  For weekday betas, the
+release time is generally in the vicinity of 8PM to Midnight US
+Pacific Time on the listed day.
+
+While 19.15 and 20.x are in parallel development, a simultaneous
+release day implies a release of 20.x first, followed a few hours
+later by 19.15.
+
+Betas are nominally a week apart, scheduled on every Saturday.
+Midweek releases are made when a serious enough problem warrants it.
+
+
+** Reporting Problems
+=====================
+
+The best way to get problems fixed in XEmacs is to submit good problem
+reports.  Since this is beta software problems are certain to exist.
+Please read through all of part II of the XEmacs FAQ for an overview
+of problem reporting.  Other items which are most important are:
+
+1.  Do not submit C stack backtraces without line numbers.  Since it
+    is possible to compile optimized with debug information with GCC
+    it is never a good idea to compile XEmacs without the -g flag.
+    XEmacs runs on a variety of platforms, and often it is not
+    possible to recreate problems which afflict a specific platform.
+    The line numbers in the C stack backtrace help isolate where the
+    problem is actually occurring.
+ 
+2.  Attempt to recreate the problem starting with an invocation of
+    XEmacs with `xemacs -q -no-site-file'.  Quite often problems are
+    due to package interdependencies, and the like.  An actual bug in
+    XEmacs should be reproducible in a default configuration without
+    loading any special packages (or the one or two specific packages
+    that cause the bug to appear).
+
+3.  A picture can be worth a thousand words.  When reporting an
+    unusual display, it is generally best to capture the problem in a
+    screen dump and include that with the problem report.  The easiest
+    way to get a screen dump is to use the xv program and its grab
+    function.  Save the image as a GIF to keep bandwidth requirements
+    down without loss of information.  MIME is the preferred method
+    for making the image attachments.
+
+* Compiling Beta XEmacs
+=======================
+
+** Building an XEmacs from patches
+==================================
+
+All beta releases of XEmacs are included with patches from the
+previous version in an attempt to keep bandwidth requirements down.
+Patches should be applied with the GNU patch program in something like
+the following.  Let's say you're upgrading XEmacs 20.4-beta10 to
+XEmacs 20.4-beta11 and you have a full unmodified XEmacs 20.4-beta10
+source tree to work with.  Cd to the top level directory and issue the
+shell command:
+
+$ gunzip -c /tmp/xemacs-20.4-b10-20.4-b11.patch.gz | patch -p1
+
+After patching check to see that no patches were missed by doing
+$ find . -name \*.rej -print
+
+Any rejections should be treated as serious problems to be resolved
+before starting compilation.
+
+After seeing that there were no rejections, issue the command
+
+$ make all-elc
+
+and go play minesweep for awhile on an older XEmacs while the binary
+is rebuilt.
+
+** Building an XEmacs from a full distribution
+==============================================
+
+Locate a convenient place where you have at least 100MB of free space
+and issue the command
+
+$ gunzip -c /tmp/xemacs-20.4-b11.tar.gz | tar xvf -
+
+(or the simpler `tar zxvf /tmp/xemacs-20.4-b11.tar.gz' if you use GNU
+tar).
+
+cd to the top level directory and issue an appropriate configure
+command.  The maintainer uses the following at the time of this
+writing:
+
+./configure --with-offix --with-mule=yes --with-dialogs=athena3d \
+	--cflags="-m486 -g -O4 -fno-strength-reduce -malign-loops=2 \
+	-malign-jumps=2 -malign-functions=2" --with-sound=no \
+	--with-xface=yes --error-checking=all --debug=yes \
+	--with-scrollbars=athena3d \
+	--with-canna=yes --with-wnn=yes --wnn-includes=/usr/X11R6/include/wnn
+
+Save the output from configure that looks something like:
+Configured for `i586-unknown-linux2.0.28'.
+
+  Where should the build process find the source code?    /usr/src/xemacs-20.0
+  What installation prefix should install use?            /usr/local
+  What operating system and machine description files should XEmacs use?
+        `s/linux.h' and `m/intel386.h'
+  What compiler should XEmacs be built with?              gcc -m486 -g -O4 -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2
+  Should XEmacs use the GNU version of malloc?            yes
+  Should XEmacs use the relocating allocator for buffers? yes
+  What window system should XEmacs use?                   x11
+  Where do we find X Windows header files?                /usr/X11R6/include
+  Where do we find X Windows libraries?                   /usr/X11R6/lib
+  Compiling in support for XAUTH.
+  Compiling in support for XPM.
+  Compiling in support for X-Face headers.
+  Compiling in support for GIF image conversion.
+  Compiling in support for JPEG image conversion.
+  Compiling in support for PNG image conversion.
+  Compiling in support for Berkeley DB.
+  Compiling in support for GNU DBM.
+  Compiling in Mule (multi-lingual) support.
+  Compiling in support for OffiX.
+  Using the Lucid menubar.
+  Using the Athena-3d scrollbar.
+  Using the Athena-3d dialog boxes.
+
+Then type make and you should have a working XEmacs.
+
+After you have verified that you have a functional editor, fire up
+your favorite mail program and send a build report to
+xemacs-beta@xemacs.org.  The build report should include
+
+1. Your hardware configuration (OS version, etc.)
+
+2. Version numbers of software in use (X11 version, system library
+   versions if appropriate, graphics library versions if appropriate).
+   If you're on a system like Linux, include all the version numbers
+   you can because chances are it makes a difference.
+
+3. The options given to configure
+
+4. The configuration report illustrated above
+
+5. Any other unusual items you feel should be brought to the attention
+   of the developers.
 MH-E-NEWS		List of changes to MH-E to version 5.0.
 MORE.STUFF		List of useful unbundled packages
 MSDOS			Status of MSDOS port
-NEWS			XEmacs 20.1 release information
+NEWS			XEmacs 20.2 release information
 ORDERS
 ORDERS.EUROPE
 ORDERS.JAPAN

File etc/w3/stylesheet

 /******************************************************************************
 **       File: default.css
 **    Purpose: Default Stylesheet for Emacs-W3
-**       Info: Copyright (c) 1995 - 1996 William M. Perry <wmperry@spry.com>
+**       Info: Copyright (c) 1995-1996 William M. Perry <wmperry@aventail.com>
 **             Copyright (c) 1997 Free Software Foundation, Inc.
-**    Created: William M. Perry <wmperry@spry.com>, Aug-31-1995
-** Maintainer: William M. Perry <wmperry@spry.com>
+**    Created: William M. Perry <wmperry@aventail.com>, Aug-31-1995
+** Maintainer: William M. Perry <wmperry@aventail.com>
 **
 **  This contains the top level fallback default styles for Emacs-w3
 **
 li,dt,dd { pitch: 6; richness: 6; }
       dt { stress: 8; }
 
-pre,xmp,plaintext,key,code,tt { pitch: 1; 
-				pitch-range: 1;
-				stress: 1;
+pre,xmp,plaintext,key,code,tt { pitch: 5; 
+				pitch-range: 0;
+				stress: 0;
 				richness: 8;
 			      }
       em { pitch: 6; pitch-range: 6; stress: 6; richness: 5; }
 
 * Info::	Documentation browsing system.
 * XEmacs::	The extensible user-friendly self-documenting text editor.
-		This manual is for XEmacs 20.1.
+		This manual is for XEmacs 20.2.
 * Lispref::	XEmacs Lisp technical reference.
-		This manual is for XEmacs 20.1.
+		This manual is for XEmacs 20.2.
 * New-Users-Guide::
-	        XEmacs User's Guide for XEmacs 20.1.
-* XEmacs-FAQ::	XEmacs Frequently Asked Questions for 20.1.
+	        XEmacs User's Guide for XEmacs 20.2.
+* XEmacs-FAQ::	XEmacs Frequently Asked Questions for 20.2.
 * Internals::	Guide to the internals of XEmacs.
 * send-pr::	Submitting Bug Reports
 * gnats::	GNU Problem Report Management System

File lib-src/etags.c

  *	Francesco Potorti` (F.Potorti@cnuce.cnr.it) is the current maintainer.
  */
 
-char pot_etags_version[] = "@(#) pot revision number is 11.78";
+char pot_etags_version[] = "@(#) pot revision number is 11.83";
 
 #define	TRUE	1
 #define	FALSE	0
 #endif /* ETAGS_REGEXPS */
 
 /* Define CTAGS to make the program "ctags" compatible with the usual one.
- Let it undefined to make the program "etags", which makes emacs-style
+ Leave it undefined to make the program "etags", which makes emacs-style
  tag tables and tags typedefs, #defines and struct/union/enum by default. */
 #ifdef CTAGS
 # undef  CTAGS
 #define C_STAR	0x00003		/* C* */
 #define YACC	0x10000		/* yacc file */
 
-#define streq(s,t)	((DEBUG &&!(s)&&!(t)&&(abort(),1)) || !strcmp(s,t))
-#define strneq(s,t,n)	((DEBUG &&!(s)&&!(t)&&(abort(),1)) || !strncmp(s,t,n))
+#define streq(s,t)	((DEBUG && (s) == NULL && (t) == NULL	\
+			  && (abort (), 1)) || !strcmp (s, t))
+#define strneq(s,t,n)	((DEBUG && (s) == NULL && (t) == NULL	\
+			  && (abort (), 1)) || !strncmp (s, t, n))
 
 #define lowcase(c)	tolower ((char)c)
 
   at_filename
 };
 
-/* This structure helps us allow mixing of --lang and filenames. */
+/* This structure helps us allow mixing of --lang and file names. */
 typedef struct
 {
   enum argument_type arg_type;
 
 /*
  v1.05 nmm 26-Jun-86 fn_exp - expand specification of list of file names
- returning in each successive call the next filename matching the input
+ returning in each successive call the next file name matching the input
  spec. The function expects that each in_spec passed
  to it will be processed to completion; in particular, up to and
  including the call following that in which the last matching name
  If an error occurs, on return out_spec contains the value
  of in_spec when the error occurred.
 
- With each successive filename returned in out_spec, the
+ With each successive file name returned in out_spec, the
  function's return value is one. When there are no more matching
  names the function returns zero. If on the first call no file
  matches in_spec, or there is any other error, -1 is returned.
 	  break;
 
 	case 1:
-	  /* This means that a filename has been seen.  Record it. */
+	  /* This means that a file name has been seen.  Record it. */
 	  argbuffer[current_arg].arg_type = at_filename;
 	  argbuffer[current_arg].what = optarg;
 	  ++current_arg;
 
       if (absolutefn (file))
 	{
-	  /* file is an absolute filename.  Canonicalise it. */
+	  /* file is an absolute file name.  Canonicalise it. */
 	  filename = absolute_filename (file, cwd);
 	}
       else
 	{
-	  /* file is a filename relative to cwd.  Make it relative
+	  /* file is a file name relative to cwd.  Make it relative
 	     to the directory of the tags file. */
 	  filename = relative_filename (file, tagfiledir);
 	}
   definedef = dnone;							\
 } while (0)
 
-/* This macro should never be called when tok.valid is FALSE, but
-   we must protect about both invalid input and internal errors. */
-#define make_C_tag(isfun)  do \
-if (tok.valid) {							\
-  char *name = NULL;							\
-  if (CTAGS || tok.named)						\
-    name = savestr (token_name.buffer);					\
-  pfnote (name, isfun, tok.buffer, tok.linelen, tok.lineno, tok.linepos); \
-  tok.valid = FALSE;							\
-} /* else if (DEBUG) abort (); */ while (0)
+
+void
+make_C_tag (isfun, tokp)
+     logical isfun;
+     TOKEN *tokp;
+{
+  char *name = NULL;
+
+  /* This function should never be called when tok.valid is FALSE, but
+     we must protect against invalid input or internal errors. */
+  if (tokp->valid)
+    {
+      if (CTAGS || tokp->named)
+	name = savestr (token_name.buffer);
+      pfnote (name, isfun,
+	      tokp->buffer, tokp->linelen, tokp->lineno, tokp->linepos);
+      tokp->valid = FALSE;
+    }
+  else if (DEBUG)
+    abort ();
+}
+
 
 void
 C_entries (c_ext, inf)
 				switch_line_buffers ();
 			    }
 			  else
-			    make_C_tag (is_func);
+			    make_C_tag (is_func, &tok);
 			}
 		      midtoken = FALSE;
 		    }
 		      funcdef = finlist;
 		      continue;
 		    case flistseen:
-		      make_C_tag (TRUE);
+		      make_C_tag (TRUE, &tok);
 		      funcdef = fignore;
 		      break;
 		    case ftagseen:
 	    {
 	    case  otagseen:
 	      objdef = oignore;
-	      make_C_tag (TRUE);
+	      make_C_tag (TRUE, &tok);
 	      break;
 	    case omethodtag:
 	    case omethodparm:
 	      case ftagseen:
 		if (yacc_rules)
 		  {
-		    make_C_tag (FALSE);
+		    make_C_tag (FALSE, &tok);
 		    funcdef = fignore;
 		  }
 		break;
 	    switch (typdef)
 	      {
 	      case tend:
-		make_C_tag (FALSE);
+		make_C_tag (FALSE, &tok);
 		/* FALLTHRU */
 	      default:
 		typdef = tnone;
 	    {
 	    case omethodtag:
 	    case omethodparm:
-	      make_C_tag (TRUE);
+	      make_C_tag (TRUE, &tok);
 	      objdef = oinbody;
 	      break;
 	    }
 	  if (cblev == 0 && typdef == tend)
 	    {
 	      typdef = tignore;
-	      make_C_tag (FALSE);
+	      make_C_tag (FALSE, &tok);
 	      break;
 	    }
 	  if (funcdef != finlist && funcdef != fignore)
 		  /* Make sure that the next char is not a '*'.
 		     This handles constructs like:
 		     typedef void OperatorFun (int fun); */
-		  if (*lp != '*')
+		  if (tok.valid && *lp != '*')
 		    {
 		      typdef = tignore;
-		      make_C_tag (FALSE);
+		      make_C_tag (FALSE, &tok);
 		    }
 		  break;
 		} /* switch (typdef) */
 	    break;
 	  if (objdef == ocatseen && parlev == 1)
 	    {
-	      make_C_tag (TRUE);
+	      make_C_tag (TRUE, &tok);
 	      objdef = oignore;
 	    }
 	  if (--parlev == 0)
 	      if (cblev == 0 && typdef == tend)
 		{
 		  typdef = tignore;
-		  make_C_tag (FALSE);
+		  make_C_tag (FALSE, &tok);
 		}
 	    }
 	  else if (parlev < 0)	/* can happen due to ill-conceived #if's. */
 	    case stagseen:
 	    case scolonseen:	/* named struct */
 	      structdef = sinbody;
-	      make_C_tag (FALSE);
+	      make_C_tag (FALSE, &tok);
 	      break;
 	    }
 	  switch (funcdef)
 	    {
 	    case flistseen:
-	      make_C_tag (TRUE);
+	      make_C_tag (TRUE, &tok);
 	      /* FALLTHRU */
 	    case fignore:
 	      funcdef = fnone;
 	      switch (objdef)
 		{
 		case otagseen:
-		  make_C_tag (TRUE);
+		  make_C_tag (TRUE, &tok);
 		  objdef = oignore;
 		  break;
 		case omethodtag:
 		case omethodparm:
-		  make_C_tag (TRUE);
+		  make_C_tag (TRUE, &tok);
 		  objdef = oinbody;
 		  break;
 		default:
 	case '\0':
 	  if (objdef == otagseen)
 	    {
-	      make_C_tag (TRUE);
+	      make_C_tag (TRUE, &tok);
 	      objdef = oignore;
 	    }
 	  /* If a macro spans multiple lines don't reset its state. */
       else if (len = prolog_pred (dbp, last)) 
 	{
 	  /* Predicate.  Store the function name so that we only
-	   * generates a tag for the first clause.  */
+	     generate a tag for the first clause.  */
 	  if (last == NULL)
 	    last = xnew(len + 1, char);
 	  else if (len + 1 > allocated)
 #endif /* not HAVE_GETCWD */
 }
 
-/* Return a newly allocated string containing the filename
+/* Return a newly allocated string containing the file name
    of FILE relative to the absolute directory DIR (which
    should end with a slash). */
 char *
      char *file, *dir;
 {
   char *fp, *dp, *abs, *res;
+  int i;
 
   /* Find the common root of file and dir (with a trailing slash). */
   abs = absolute_filename (file, cwd);
   while (*fp++ == *dp++)
     continue;
   fp--, dp--;			/* back to the first differing char */
-  do				/* look at the equal chars until / */
+  do				/* look at the equal chars until '/' */
     fp--, dp--;
   while (*fp != '/');
 
-  /* Build a sequence of "../" strings for the resulting relative filename. */
-  for (dp = etags_strchr (dp + 1, '/'), res = "";
-       dp != NULL;
-       dp = etags_strchr (dp + 1, '/'))
-    {
-      res = concat (res, "../", "");
-    }
-
-  /* Add the filename relative to the common root of file and dir. */
-  res = concat (res, fp + 1, "");
+  /* Build a sequence of "../" strings for the resulting relative file name. */
+  i = 0;
+  while ((dp = etags_strchr (dp + 1, '/')) != NULL)
+    i += 1;
+  res = xnew (3*i + strlen (fp + 1) + 1, char);
+  res[0] = '\0';
+  while (i-- > 0)
+    strcat (res, "../");
+
+  /* Add the file name relative to the common root of file and dir. */
+  strcat (res, fp + 1);
   free (abs);
 
   return res;
 }
 
 /* Return a newly allocated string containing the
-   absolute filename of FILE given CWD (which should
+   absolute file name of FILE given CWD (which should
    end with a slash). */
 char *
 absolute_filename (file, cwd)
   char *slashp, *cp, *res;
 
   if (absolutefn (file))
-    res = concat (file, "", "");
+    res = savestr (file);
 #ifdef DOS_NT
-  /* We don't support non-absolute filenames with a drive
+  /* We don't support non-absolute file names with a drive
      letter, like `d:NAME' (it's too much hassle).  */
   else if (file[1] == ':')
-    fatal ("%s: relative filenames with drive letters not supported", file);
+    fatal ("%s: relative file names with drive letters not supported", file);
 #endif
   else
     res = concat (cwd, file, "");
 	      do
 		cp--;
 	      while (cp >= res && !absolutefn (cp));
-	      if (*cp == '/')
-		{
-		  strcpy (cp, slashp + 3);
-		}
+	      if (cp < res)
+		cp = slashp;	/* the absolute name begins with "/.." */
 #ifdef DOS_NT
 	      /* Under MSDOS and NT we get `d:/NAME' as absolute
-		 filename, so the luser could say `d:/../NAME'.
+		 file name, so the luser could say `d:/../NAME'.
 		 We silently treat this as `d:/NAME'.  */
-	      else if (cp[1] == ':')
-		strcpy (cp + 3, slashp + 4);
+	      else if (cp[0] != '/')
+		cp = slashp;
 #endif
-	      else		/* else (cp == res) */
-		{
-		  if (slashp[3] != '\0')
-		    strcpy (cp, slashp + 4);
-		  else
-		    return ".";
-		}
+	      strcpy (cp, slashp + 3);
 	      slashp = cp;
 	      continue;
 	    }
 
       slashp = etags_strchr (slashp + 1, '/');
     }
-
-  return res;
+  
+  if (res[0] == '\0')
+    return savestr ("/");
+  else
+    return res;
 }
 
 /* Return a newly allocated string containing the absolute
-   filename of dir where FILE resides given CWD (which should
+   file name of dir where FILE resides given CWD (which should
    end with a slash). */
 char *
 absolute_dirname (file, cwd)
 
   slashp = etags_strrchr (file, '/');
   if (slashp == NULL)
-    return cwd;
+    return savestr (cwd);
   save = slashp[1];
   slashp[1] = '\0';
   res = absolute_filename (file, cwd);

File lisp/ChangeLog

+Fri Apr 18 16:45:07 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* utils/skeleton.el (skeleton-pair-insert-maybe): Guard test with
+	existence check on mark-active too.
+	(skeleton-proxy): Ditto.
+	(skeleton-proxy-new): Ditto.
+
+Fri Apr 18 09:26:24 1997  Dave Gillespie <daveg@synaptics.com>
+
+	* cl/cl-macs.el (values): New setf-method.
+
+Thu Apr 17 21:29:57 1997  Bob Weiner <weiner@infodock.com>
+
+	* packages/avoid.el (mouse-avoidance-kbd-command): Correct
+	detection of keypress.
+
+Thu Apr 17 21:20:04 1997  Michael McNamara  <mac@silicon-sorcery.com>
+
+	* modes/verilog-mode.el: Changes to 2.25
+	1) Autoindent a new declaration according to the previous
+	   declaration, if any. Only use the previous one, don't try to re
+	   line things up.
+	2) Include "Customize Verilog-Mode" in the Verilog menu bar. Make it
+	   safe to do so, even if the underlying emacs does not yet support
+	   custom.
+	3) Include keybinding C-c C-b for reporting bugs.
+	4) Include keybinding C-c i for reindenting declarations.
+
+	* modes/verilog-mode.el: Changes to 2.24
+	Cleaned up menubar items; added submit bug report there, for
+	example.
+
+	* modes/verilog-mode.el: Changes to 2.23
+	1) Support custom (XEmacs) or defvar method of customization.
+	2) fix verilog-pretty declarations
+	3) add support so folks turning up the complexity of commenting don't
+	   get errors (they don't get any more complexity either)
+
+	* modes/verilog-mode.el: Changes to 2.22
+	1) Moved installation hints to the web page.
+	2) Added support for XEmacs's custom variable setting package.
+	3) Added variables to separatly control indentation of
+		module level items (always, initial. etc)
+		declarations
+		behavorial (the begin in the task & function declaration
+	4) Attempted to shorten comments and lisp so that the %@* NT
+	   mailers won't turn long comments into extra code.
+	5) Used make-regexp to optimize many regular expressions so that they
+	   are no longer backtrack.
+	6) fixed bugs
+	 a) a newline on a blank line no longer generates two new lines.
+	 b) a semicolon on a comment no longer auto indents
+	 c) lines like ''else if (a) begin''
+	    no longer confuse auto commenter
+	 d) a number of other bugs which fail to come to mind...
+	7) Added support for menu pulldowns on FSF and XEmacs
+	8) Added support for XEmacs v20
+	9) Changed verilog-comment-region to insert comments that Verilog-XL
+	   doesn't b*tch about.
+	10) Eliminated auto lineup of declarations upon typing newline of
+	   semicolon. (Cheers all around) Now instead there is a command, and
+	   also a menu pulldown, which lines up indentations around point.
+	11) Added verilog-submit-bug-report
+
 Mon Apr 14 13:06:10 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* utils/autoload.el (generate-file-autoloads-1): Turn off local

File lisp/calendar/appt.el

 (require 'calendar)
 (require 'diary-lib)
 
-(defvar appt-issue-message t
+(defcustom appt-issue-message t
   "*If T, the diary buffer is checked for appointments.  For an
  appointment warning to be made, the time must be the first thing on
- the line.")
+ the line."
+  :type 'boolean
+  :group 'appt)
 
-(defvar appt-msg-countdown-list '(20 15 10 5 3 1)
+(defcustom appt-msg-countdown-list '(20 15 10 5 3 1)
   "*A list of the intervals in minutes before the appointment when
  the warnings will be given.  That is, if this were the list '(5 3 1),
  then a notification would be given five minutes, three minutes, and
- one minute before the appointment.")
+ one minute before the appointment."
+  :type '(repeat integer)
+  :group 'appt)
 
-(defvar appt-check-time-syntax nil
+(defcustom appt-check-time-syntax nil
   "*Whether all diary entries are intended to beging with time specifications.
 Appt will beep and issue a warning message when encountering unparsable 
-lines.")
+lines."
+  :type 'boolean
+  :group 'appt)
 
-(defvar appt-audible t
+(defcustom appt-audible t
   "*Controls whether appointment announcements should beep.
 Appt uses two sound-types for beeps: `appt' and `appt-final'.
 If this is a number, then that many beeps will occur.
 If this is a cons, the car is how many beeps, and the cdr is the
   delay between them (a float, fraction of a second to sleep.)
-See also the variable `appt-msg-countdown-list'")
+See also the variable `appt-msg-countdown-list'"
+  :type 'boolean
+  :group 'appt)
 
-(defvar appt-display-mode-line t
-  "*Controls if minutes-to-appointment should be displayed on the mode line.")
+(defcustom appt-display-mode-line t
+  "*Controls if minutes-to-appointment should be displayed on the mode line."
+  :type 'boolean
+  :group 'appt)
 
-(defvar appt-announce-method 'appt-window-announce
+(defcustom appt-announce-method 'appt-window-announce
   "*The name of the function used to notify the user of an impending 
 appointment.  This is called with two arguments, the number of minutes
 until the appointment, and the appointment description list.
 
 Reasonable values for this variable are 'appt-window-announce,
-'appt-message-announce, or 'appt-persistent-message-announce.")
+'appt-message-announce, or 'appt-persistent-message-announce."
+  :type 'function
+  :group 'appt)
 
 
 (defvar appt-time-msg-list nil
     ))
 
 
-(defvar appt-display-duration 5
+(defcustom appt-display-duration 5
   "*The number of seconds an appointment message is displayed in its own 
- window if appt-announce-method is 'appt-window-announce.")
+ window if appt-announce-method is 'appt-window-announce."
+  :type 'integer
+  :group 'appt)
 
 (defun appt-window-announce (min-to-app appt)
   "Set appt-announce-method to the name of this function to cause appointment 
 ;;; just adding stuff to the display-time-string -- this causes less
 ;;; flicker.
 
-(defvar appt-mode-line-string ""
-  "*The string displayed in the mode line by the appointment package.")
+(defcustom appt-mode-line-string ""
+  "*The string displayed in the mode line by the appointment package."
+  :type 'string
+  :group 'appt)
 
 (defun appt-display-mode-line (min-to-app)
   "Add an appointment annotation to the mode line."

File lisp/calendar/calendar.el

 
 ;;; Code:
 
+(defgroup diary nil
+  "Diary customization"
+  :group 'calendar)
+
+(defgroup holidays nil
+  "Holidays in calendar"
+  :group 'calendar)
+
 (defun calendar-version ()
   (interactive)
   (message "Version 5.3, January 25, 1994"))
 
+(defgroup appt nil
+  "Appointment notification"
+  :tag "Appointments"
+  :group 'calendar)
+
+
 ;;;###autoload
-(defvar calendar-week-start-day 0
+(defcustom calendar-week-start-day 0
   "*The day of the week on which a week in the calendar begins.
-0 means Sunday (default), 1 means Monday, and so on.")
+0 means Sunday (default), 1 means Monday, and so on."
+  :type 'integer
+  :group 'calendar)
 
 ;;;###autoload
-(defvar calendar-offset 0
+(defcustom calendar-offset 0
   "*The offset of the principal month from the center of the calendar window.
 0 means the principal month is in the center (default), -1 means on the left,
 +1 means on the right.  Larger (or smaller) values push the principal month off
-the screen.")
+the screen."
+  :type 'integer
+  :group 'calendar)
 
 ;;;###autoload
-(defvar view-diary-entries-initially nil
+(defcustom view-diary-entries-initially nil
   "*Non-nil means display current date's diary entries on entry.
 The diary is displayed in another window when the calendar is first displayed,
 if the current date is visible.  The number of days of diary entries displayed
-is governed by the variable `number-of-diary-entries'.")
+is governed by the variable `number-of-diary-entries'."
+  :type 'boolean
+  :group 'diary)
 
 ;;;###autoload
-(defvar number-of-diary-entries 1
+(defcustom number-of-diary-entries 1
   "*Specifies how many days of diary entries are to be displayed initially.
 This variable affects the diary display when the command M-x diary is used,
 or if the value of the variable `view-diary-entries-initially' is t.  For
 
 This variable does not affect the diary display with the `d' command
 from the calendar; in that case, the prefix argument controls the
-number of days of diary entries displayed.")
+number of days of diary entries displayed."
+  :type 'integer
+  :group 'diary)
 
 ;;;###autoload
-(defvar mark-diary-entries-in-calendar nil
+(defcustom mark-diary-entries-in-calendar nil
   "*Non-nil means mark dates with diary entries, in the calendar window.
-The marking symbol is specified by the variable `diary-entry-marker'.")
-
-(defvar diary-entry-marker
+The marking symbol is specified by the variable `diary-entry-marker'."
+  :type 'boolean
+  :group 'diary)
+
+(defcustom diary-entry-marker
   (progn
     (make-face 'diary-face)
     (cond ((face-differs-from-default-p 'diary-face) nil)
 					gray-tag)))))))
     'diary-face)
   "*Used to mark dates that have diary entries.
-Can be either a single-character string or a face.")
-
-(defvar calendar-today-marker
+Can be either a single-character string or a face."
+  :type '(choice string face)
+  :group 'diary)
+
+(defcustom calendar-today-marker
   (progn
     (make-face 'calendar-today-face)
     (if (not (face-differs-from-default-p 'calendar-today-face))
 	(set-face-underline-p 'calendar-today-face t))
     'calendar-today-face)
   "*Used to mark today's date.
-Can be either a single-character string or a face.")
-
-(defvar calendar-holiday-marker
+Can be either a single-character string or a face."
+  :type '(choice string face)
+  :group 'calendar)
+
+(defcustom calendar-holiday-marker
   (progn
     (make-face 'holiday-face)
     (cond ((face-differs-from-default-p 'holiday-face) nil)
 	       (set-face-reverse-p 'holiday-face t 'global 'tty))))
     'holiday-face)
   "*Used to mark notable dates in the calendar.
-Can be either a single-character string or a face.")
+Can be either a single-character string or a face."
+  :type '(choice string face)
+  :group 'holidays)
 
 ;;;###autoload
-(defvar view-calendar-holidays-initially nil
+(defcustom view-calendar-holidays-initially nil
   "*Non-nil means display holidays for current three month period on entry.
 The holidays are displayed in another window when the calendar is first
-displayed.")
+displayed."
+  :type 'boolean
+  :group 'holidays)
 
 ;;;###autoload
-(defvar mark-holidays-in-calendar nil
+(defcustom mark-holidays-in-calendar nil
   "*Non-nil means mark dates of holidays in the calendar window.
-The marking symbol is specified by the variable `calendar-holiday-marker'.")
+The marking symbol is specified by the variable `calendar-holiday-marker'."
+  :type 'boolean
+  :group 'holidays)
 
 ;;;###autoload
-(defvar all-hebrew-calendar-holidays nil
+(defcustom all-hebrew-calendar-holidays nil
   "*If nil, show only major holidays from the Hebrew calendar.
 This means only those Jewish holidays that appear on secular calendars.
 
-If t, show all the holidays that would appear in a complete Hebrew calendar.")
+If t, show all the holidays that would appear in a complete Hebrew calendar."
+  :type 'boolean
+  :group 'holidays)
 
 ;;;###autoload
-(defvar all-christian-calendar-holidays nil
+(defcustom all-christian-calendar-holidays nil
   "*If nil, show only major holidays from the Christian calendar.
 This means only those Christian holidays that appear on secular calendars.
 
 If t, show all the holidays that would appear in a complete Christian
-calendar.")
+calendar."
+  :type 'boolean
+  :group 'holidays)
 
 ;;;###autoload
-(defvar all-islamic-calendar-holidays nil
+(defcustom all-islamic-calendar-holidays nil
   "*If nil, show only major holidays from the Islamic calendar.
 This means only those Islamic holidays that appear on secular calendars.
 
 If t, show all the holidays that would appear in a complete Islamic
-calendar.")
+calendar."
+  :type 'boolean
+  :group 'holidays)
 
 ;;;###autoload
-(defvar calendar-load-hook nil
+(defcustom calendar-load-hook nil
   "*List of functions to be called after the calendar is first loaded.
-This is the place to add key bindings to `calendar-mode-map'.")
+This is the place to add key bindings to `calendar-mode-map'."
+  :type 'hook
+  :group 'calendar)
 
 ;;;###autoload
-(defvar initial-calendar-window-hook nil
+(defcustom initial-calendar-window-hook nil
   "*List of functions to be called when the calendar window is first opened.
 The functions invoked are called after the calendar window is opened, but
 once opened is never called again.  Leaving the calendar with the `q' command
-and reentering it will cause these functions to be called again.")
+and reentering it will cause these functions to be called again."
+  :type 'hook
+  :group 'calendar)
 
 ;;;###autoload
-(defvar today-visible-calendar-hook nil
+(defcustom today-visible-calendar-hook nil
   "*List of functions called whenever the current date is visible.
 This can be used, for example, to replace today's date with asterisks; a
 function `calendar-star-date' is included for this purpose:
 
 Other than the use of the provided functions, the changing of any
 characters in the calendar buffer by the hooks may cause the failure of the
-functions that move by days and weeks.")
+functions that move by days and weeks."
+  :type 'hook
+  :group 'calendar)
 
 ;;;###autoload
-(defvar today-invisible-calendar-hook nil
+(defcustom today-invisible-calendar-hook nil
   "*List of functions called whenever the current date is not visible.
 
 The corresponding variable `today-visible-calendar-hook' is the list of
 
 Other than the use of the provided functions, the changing of any
 characters in the calendar buffer by the hooks may cause the failure of the
-functions that move by days and weeks.")
+functions that move by days and weeks."
+  :type 'hook
+  :group 'calendar)
 
 ;;;###autoload
-(defvar diary-file "~/diary"
+(defcustom diary-file "~/diary"
   "*Name of the file in which one's personal diary of dates is kept.
 
 The file's entries are lines in any of the forms
 for these functions for details.
 
 Diary files can contain directives to include the contents of other files; for
-details, see the documentation for the variable `list-diary-entries-hook'.")
+details, see the documentation for the variable `list-diary-entries-hook'."
+  :type 'file
+  :group 'diary)
 
 ;;;###autoload
-(defvar diary-nonmarking-symbol "&"
-  "*Symbol indicating that a diary entry is not to be marked in the calendar.")
+(defcustom diary-nonmarking-symbol "&"
+  "*Symbol indicating that a diary entry is not to be marked in the calendar."
+  :type 'string
+  :group 'diary)
 
 ;;;###autoload
-(defvar hebrew-diary-entry-symbol "H"
-  "*Symbol indicating a diary entry according to the Hebrew calendar.")
+(defcustom hebrew-diary-entry-symbol "H"
+  "*Symbol indicating a diary entry according to the Hebrew calendar."
+  :type 'string
+  :group 'diary)
 
 ;;;###autoload
-(defvar islamic-diary-entry-symbol "I"
-  "*Symbol indicating a diary entry according to the Islamic calendar.")
+(defcustom islamic-diary-entry-symbol "I"
+  "*Symbol indicating a diary entry according to the Islamic calendar."
+  :type 'string
+  :group 'diary)
 
 ;;;###autoload
-(defvar diary-include-string "#include"
+(defcustom diary-include-string "#include"
   "*The string indicating inclusion of another file of diary entries.
-See the documentation for the function `include-other-diary-files'.")
+See the documentation for the function `include-other-diary-files'."
+  :type 'string
+  :group 'diary)
 
 ;;;###autoload
-(defvar sexp-diary-entry-symbol "%%"
+(defcustom sexp-diary-entry-symbol "%%"
   "*The string used to indicate a sexp diary entry in diary-file.
-See the documentation for the function `list-sexp-diary-entries'.")
+See the documentation for the function `list-sexp-diary-entries'."
+  :type 'string
+  :group 'diary)
 
 ;;;###autoload
-(defvar abbreviated-calendar-year t
+(defcustom abbreviated-calendar-year t
   "*Interpret a two-digit year DD in a diary entry as either 19DD or 20DD.
 For the Gregorian calendar; similarly for the Hebrew and Islamic calendars.
-If this variable is nil, years must be written in full.")
+If this variable is nil, years must be written in full."
+  :type 'boolean
+  :group 'diary)
 
 ;;;###autoload
-(defvar european-calendar-style nil
+(defcustom european-calendar-style nil
   "*Use the European style of dates in the diary and in any displays.
 If this variable is t, a date 1/2/1990 would be interpreted as February 1,
 1990.  The accepted European date styles are
             DAYNAME
 
 Names can be capitalized or not, written in full, or abbreviated to three
-characters with or without a period.")
+characters with or without a period."
+  :type 'boolean
+  :group 'diary)
 
 ;;;###autoload
-(defvar american-date-diary-pattern
+(defcustom american-date-diary-pattern
   '((month "/" day "[^/0-9]")
     (month "/" day "/" year "[^0-9]")
     (monthname " *" day "[^,0-9]")
     (monthname " *" day ", *" year "[^0-9]")
     (dayname "\\W"))
   "*List of pseudo-patterns describing the American patterns of date used.
-See the documentation of `diary-date-forms' for an explanation.")
+See the documentation of `diary-date-forms' for an explanation."
+  :type '(repeat (choice (cons :tag "Backup"
+			       (const backup)
+			       (repeat (list :inline t :format "%v"
+					     (symbol :tag "Keyword")
+					     (choice symbol regexp))))
+			 (repeat (list :inline t :format "%v"
+				       (symbol :tag "Keyword")
+				       (choice symbol regexp)))))
+  :group 'diary)
 
 ;;;###autoload
-(defvar european-date-diary-pattern
+(defcustom european-date-diary-pattern
   '((day "/" month "[^/0-9]")
     (day "/" month "/" year "[^0-9]")
     (backup day " *" monthname "\\W+\\<[^*0-9]")
     (day " *" monthname " *" year "[^0-9]")
     (dayname "\\W"))
   "*List of pseudo-patterns describing the European patterns of date used.
-See the documentation of `diary-date-forms' for an explanation.")
-
-(defvar diary-date-forms
+See the documentation of `diary-date-forms' for an explanation."
+  :type '(repeat (choice (cons :tag "Backup"
+			       (const backup)
+			       (repeat (list :inline t :format "%v"
+					     (symbol :tag "Keyword")
+					     (choice symbol regexp))))
+			 (repeat (list :inline t :format "%v"
+				       (symbol :tag "Keyword")
+				       (choice symbol regexp)))))
+  :group 'diary)
+
+(defcustom diary-date-forms
   (if european-calendar-style
       european-date-diary-pattern
     american-date-diary-pattern)
 diary entry itself, the first element of the pattern MUST be `backup'.  This
 directive causes the date recognizer to back up to the beginning of the
 current word of the diary entry, so in no case can the pattern match more than
-a portion of the first word of the diary entry.")
+a portion of the first word of the diary entry."
+  :type '(repeat (choice (cons :tag "Backup"
+			       (const backup)
+			       (repeat (list :inline t :format "%v"
+					     (symbol :tag "Keyword")
+					     (choice symbol regexp))))
+			 (repeat (list :inline t :format "%v"
+				       (symbol :tag "Keyword")
+				       (choice symbol regexp)))))
+  :group 'diary)
 
 ;;;###autoload
-(defvar european-calendar-display-form
+(defcustom european-calendar-display-form
   '((if dayname (concat dayname ", ")) day " " monthname " " year)
   "*Pseudo-pattern governing the way a date appears in the European style.
-See the documentation of calendar-date-display-form for an explanation.")
+See the documentation of calendar-date-display-form for an explanation."
+  :type 'sexp
+  :group 'calendar)
 
 ;;;###autoload
-(defvar american-calendar-display-form
+(defcustom american-calendar-display-form
   '((if dayname (concat dayname ", ")) monthname " " day ", " year)
   "*Pseudo-pattern governing the way a date appears in the American style.
-See the documentation of `calendar-date-display-form' for an explanation.")
-
-(defvar calendar-date-display-form
+See the documentation of `calendar-date-display-form' for an explanation."
+  :type 'sexp
+  :group 'calendar)
+
+(defcustom calendar-date-display-form
   (if european-calendar-style
       european-calendar-display-form
     american-calendar-display-form)
 
 would give the usual American style in fixed-length fields.
 
-See the documentation of the function `calendar-date-string'.")
+See the documentation of the function `calendar-date-string'."
+  :type 'sexp
+  :group 'calendar)
 
 (defun european-calendar ()
   "Set the interpretation and display of dates to the European style."
   (update-calendar-mode-line))
 
 ;;;###autoload
-(defvar print-diary-entries-hook 'lpr-buffer
+(defcustom print-diary-entries-hook 'lpr-buffer
   "*List of functions called after a temporary diary buffer is prepared.
 The buffer shows only the diary entries currently visible in the diary
 buffer.  The default just does the printing.  Other uses might include, for
 example, rearranging the lines into order by day and time, saving the buffer
-instead of deleting it, or changing the function used to do the printing.")
+instead of deleting it, or changing the function used to do the printing."
+  :type 'hook
+  :group 'diary)
 
 ;;;###autoload
-(defvar list-diary-entries-hook nil
+(defcustom list-diary-entries-hook nil
   "*List of functions called after diary file is culled for relevant entries.
 It is to be used for diary entries that are not found in the diary file.
 
 
 in your `.emacs' file to cause the fancy diary buffer to be displayed with
 diary entries from various included files, each day's entries sorted into
-lexicographic order.")
+lexicographic order."
+  :type 'hook
+  :group 'diary)
 
 ;;;###autoload
-(defvar diary-hook nil
+(defcustom diary-hook nil
   "*List of functions called after the display of the diary.
-Can be used for appointment notification.")
+Can be used for appointment notification."
+  :type 'hook
+  :group 'diary)
 
 ;;;###autoload
-(defvar diary-display-hook nil
+(defcustom diary-display-hook nil
   "*List of functions that handle the display of the diary.
 If nil (the default), `simple-diary-display' is used.  Use `ignore' for no
 diary display.
 variable `holidays-in-diary-buffer' is set to nil.  Ordinarily, the fancy
 diary buffer will not show days for which there are no diary entries, even
 if that day is a holiday; if you want such days to be shown in the fancy
-diary buffer, set the variable `diary-list-include-blanks' to t.")
+diary buffer, set the variable `diary-list-include-blanks' to t."
+  :type 'hook
+  :group 'diary)
 
 ;;;###autoload
-(defvar nongregorian-diary-listing-hook nil
+(defcustom nongregorian-diary-listing-hook nil
   "*List of functions called for listing diary file and included files.
 As the files are processed for diary entries, these functions are used to cull
 relevant entries.  You can use either or both of `list-hebrew-diary-entries'
 and `list-islamic-diary-entries'.  The documentation for these functions
-describes the style of such diary entries.")
+describes the style of such diary entries."
+  :type 'hook
+  :group 'diary)
 
 ;;;###autoload
-(defvar mark-diary-entries-hook nil
+(defcustom mark-diary-entries-hook nil
   "*List of functions called after marking diary entries in the calendar.
 
 A function `mark-included-diary-files' is also provided for use as the
 obeyed.  You can change the \"#include\" to some other string by changing the
 variable `diary-include-string'.  When you use `mark-included-diary-files' as
 part of the mark-diary-entries-hook, you will probably also want to use the
-function `include-other-diary-files' as part of `list-diary-entries-hook'.")
+function `include-other-diary-files' as part of `list-diary-entries-hook'."
+  :type 'hook
+  :group 'diary)
 
 ;;;###autoload
-(defvar nongregorian-diary-marking-hook nil
+(defcustom nongregorian-diary-marking-hook nil
   "*List of functions called for marking diary file and included files.
 As the files are processed for diary entries, these functions are used to cull
 relevant entries.  You can use either or both of `mark-hebrew-diary-entries'
 and `mark-islamic-diary-entries'.  The documentation for these functions
-describes the style of such diary entries.")
+describes the style of such diary entries."
+  :type 'hook
+  :group 'diary)
 
 ;;;###autoload
-(defvar diary-list-include-blanks nil
+(defcustom diary-list-include-blanks nil
   "*If nil, do not include days with no diary entry in the list of diary entries.
 Such days will then not be shown in the fancy diary buffer, even if they
-are holidays.")
+are holidays."
+  :type 'boolean
+  :group 'diary)
 
 ;;;###autoload
-(defvar holidays-in-diary-buffer t
+(defcustom holidays-in-diary-buffer t
   "*Non-nil means include holidays in the diary display.
 The holidays appear in the mode line of the diary buffer, or in the
 fancy diary buffer next to the date.  This slows down the diary functions
-somewhat; setting it to nil makes the diary display faster.")
+somewhat; setting it to nil makes the diary display faster."
+  :type 'boolean
+  :group 'diary)
 
 (defvar calendar-mark-ring nil)
 
 ;;;###autoload
-(defvar general-holidays
+(defcustom general-holidays
   '((holiday-fixed 1 1 "New Year's Day")
     (holiday-float 1 1 3 "Martin Luther King Day")
     (holiday-fixed 2 2 "Ground Hog Day")
     (holiday-fixed 11 11 "Veteran's Day")
     (holiday-float 11 4 4 "Thanksgiving"))
   "*General holidays.  Default value is for the United States.
-See the documentation for `calendar-holidays' for details.")
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :group 'holidays)
 
 ;;;###autoload
 (put 'general-holidays 'risky-local-variable t)
 
 ;;;###autoload
-(defvar local-holidays nil
+(defcustom local-holidays nil
   "*Local holidays.
-See the documentation for `calendar-holidays' for details.")
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :group 'holidays
+  :group 'local)
 
 ;;;###autoload
 (put 'local-holidays 'risky-local-variable t)
 ;;;###autoload
-(defvar other-holidays nil
+(defcustom other-holidays nil
   "*User defined holidays.
-See the documentation for `calendar-holidays' for details.")
+See the documentation for `calendar-holidays' for details."
+  :type 'sexp
+  :group 'holidays)
 
 ;;;###autoload
 (put 'other-holidays 'risky-local-variable t)

File lisp/cl/cl-macs.el

 		(nth 3 method) store-temp)
 	  (list 'substring (nth 4 method) from-temp to-temp))))
 
+(define-setf-method values (&rest args)
+  (let ((methods (mapcar #'(lambda (x)
+			     (get-setf-method x cl-macro-environment))
+			 args))
+	(store-temp (gensym "--values-store--")))
+    (list (apply 'append (mapcar 'first methods))
+	  (apply 'append (mapcar 'second methods))
+	  (list store-temp)
+	  (cons 'list
+		(mapcar #'(lambda (m)
+			    (cl-setf-do-store (cons (car (third m)) (fourth m))
+					      (list 'pop store-temp)))
+			methods))
+	  (cons 'list (mapcar 'fifth methods)))))
+
 ;;; Getting and optimizing setf-methods.
 (defun get-setf-method (place &optional env)
   "Return a list of five values describing the setf-method for PLACE.

File lisp/comint/background.el

 (provide 'background)
 (require 'comint)
 
+(defgroup background nil
+  "Fun with background jobs"
+  :group 'processes)
+
+
 ;; user variables
-(defvar background-show t
-  "*If non-nil, background jobs' buffers are shown when they're started.")
-(defvar background-select nil
-  "*If non-nil, background jobs' buffers are selected when they're started.")
+(defcustom background-show t
+  "*If non-nil, background jobs' buffers are shown when they're started."
+  :type 'boolean
+  :group 'background)
+(defcustom background-select nil
+  "*If non-nil, background jobs' buffers are selected when they're started."
+  :type 'boolean
+  :group 'background)
 
 (defun background (command &optional buffer-name)
   "Run COMMAND in the background like csh.  

File lisp/comint/comint.el

 ;;;     comint-completion-autolist  - boolean      behavior
 ;;;     comint-completion-recexact  - boolean      ...
 
+(defgroup comint nil
+  "General command interpreter in a window stuff."
+  :group 'processes)
+
+(defgroup comint-completion nil
+  "Completion facilities in comint"
+  :group 'comint)
+
+(defgroup comint-source nil
+  "Source finding facilities in comint"
+  :prefix "comint-"
+  :group 'comint)
+
+
 (defvar comint-prompt-regexp "^"
   "Regexp to recognise prompts in the inferior process.
 Defaults to \"^\", the null string at BOL.
 ;;
 ;; XEmacs - So turn this off by default.  -- jwz
 ;;
-(defvar comint-input-autoexpand nil
+(defcustom comint-input-autoexpand nil
   "*If non-nil, expand input command history references on completion.
 This mirrors the optional behavior of tcsh (its autoexpand and histlit).
 
 into the buffer's input ring.  See also `comint-magic-space' and
 `comint-dynamic-complete'.
 
-This variable is buffer-local.")
+This variable is buffer-local."
+  :type '(choice (const :tag "off" nil)
+		 (const :tag "on" t)
+		 (const input)
+		 (const history))
+  :group 'comint)
 
 ;; XEmacs - this should default to t for consistency with minibuffer history. -jwz
-(defvar comint-input-ignoredups t
+(defcustom comint-input-ignoredups t
   "*If non-nil, don't add input matching the last on the input ring.
 This mirrors the optional behavior of bash.
 
-This variable is buffer-local.")
+This variable is buffer-local."
+  :type 'boolean
+  :group 'comint)
 
-(defvar comint-input-ring-file-name nil
+(defcustom comint-input-ring-file-name nil
   "*If non-nil, name of the file to read/write input history.
 See also `comint-read-input-ring' and `comint-write-input-ring'.
 
-This variable is buffer-local, and is a good thing to set in mode hooks.")
+This variable is buffer-local, and is a good thing to set in mode hooks."
+  :type 'boolean
+  :group 'comint)
 
-(defvar comint-scroll-to-bottom-on-input nil
+(defcustom comint-scroll-to-bottom-on-input nil
   "*Controls whether input to interpreter causes window to scroll.
 If nil, then do not scroll.  If t or `all', scroll all windows showing buffer.
 If `this', scroll only the selected window.
 
 The default is nil.
 
-See `comint-preinput-scroll-to-bottom'.  This variable is buffer-local.")
+See `comint-preinput-scroll-to-bottom'.  This variable is buffer-local."
+  :type '(choice (const :tag "off" nil)
+		 (const t)
+		 (const all)
+		 (const this))
+  :group 'comint)
 
-(defvar comint-scroll-to-bottom-on-output nil
+(defcustom comint-scroll-to-bottom-on-output nil
   "*Controls whether interpreter output causes window to scroll.
 If nil, then do not scroll.  If t or `all', scroll all windows showing buffer.
 If `this', scroll only the selected window.
 The default is nil.
 
 See variable `comint-scroll-show-maximum-output' and function
-`comint-postoutput-scroll-to-bottom'.  This variable is buffer-local.")
+`comint-postoutput-scroll-to-bottom'.  This variable is buffer-local."
+  :type '(choice (const :tag "off" nil)
+		 (const t)
+		 (const all)
+		 (const this)
+		 (const others))
+  :group 'comint)
 
 ;; XEmacs - Default this to nil: this is just horrible
-(defvar comint-scroll-show-maximum-output nil
+(defcustom comint-scroll-show-maximum-output nil
   "*Controls how interpreter output causes window to scroll.
 If non-nil, then show the maximum output when the window is scrolled.
 
 See variable `comint-scroll-to-bottom-on-output' and function
-`comint-postoutput-scroll-to-bottom'.  This variable is buffer-local.")
+`comint-postoutput-scroll-to-bottom'.  This variable is buffer-local."
+  :type 'boolean
+  :group 'comint)
 
-(defvar comint-buffer-maximum-size 1024
+(defcustom comint-buffer-maximum-size 1024
   "*The maximum size in lines for comint buffers.
 Comint buffers are truncated from the top to be no greater than this number, if
-the function `comint-truncate-buffer' is on `comint-output-filter-functions'.")
+the function `comint-truncate-buffer' is on `comint-output-filter-functions'."
+  :type 'integer
+  :group 'comint)
 
 (defvar comint-input-ring-size 32
   "Size of input history ring.")
 
-(defvar comint-process-echoes nil
+(defcustom comint-process-echoes nil
   "*If non-nil, assume that the subprocess echoes any input.
 If so, delete one copy of the input so that only one copy eventually
 appears in the buffer.
 
-This variable is buffer-local.")
+This variable is buffer-local."
+  :type 'boolean
+  :group 'comint)
 
 ;; AIX puts the name of the person being su'd to in from of the prompt.
-(defvar comint-password-prompt-regexp
+(defcustom comint-password-prompt-regexp
   (if (eq system-type 'aix-v3)
       "\\(\\([Oo]ld \\|[Nn]ew \\|^\\|^..*s\\)[Pp]assword\\|pass phrase\\):\\s *\\'"
   "\\(\\([Oo]ld \\|[Nn]ew \\|^\\)[Pp]assword\\|pass phrase\\):\\s *\\'")
   "*Regexp matching prompts for passwords in the inferior process.
-This is used by `comint-watch-for-password-prompt'.")
+This is used by `comint-watch-for-password-prompt'."
+  :type 'regexp
+  :group 'comint)
 
 ;;; Here are the per-interpreter hooks.
 (defvar comint-get-old-input (function comint-get-old-input-default)
 
 ;; XEmacs - fsf doesn't have this, and I think it ought to default to 't'
 ;; because it's good idiot-proof interface.  --stig
-(defvar comint-append-old-input t
+(defcustom comint-append-old-input t
   "*If nil, old text selected by \\[comint-send-input] is re-sent immediately.
 If non-nil, the old text is appended to the end of the buffer,
 and a prompting message is printed.
 
 This flag does not affect the behavior of \\[comint-send-input]
-after the process output mark.")
+after the process output mark."
+  :type 'boolean
+  :group 'comint)
 
 (defvar comint-dynamic-complete-functions
   '(comint-replace-by-expanded-history comint-dynamic-complete-filename)
 `comint-simple-send' just sends the string plus a newline.
 This is called from the user command `comint-send-input'.")
 
-(defvar comint-eol-on-send t
+(defcustom comint-eol-on-send t
   "*Non-nil means go to the end of the line before sending input.
-See `comint-send-input'.")
+See `comint-send-input'."
+  :type 'boolean
+  :group 'comint)
 
-(defvar comint-mode-hook '()
+(defcustom comint-mode-hook '()
   "Called upon entry into comint-mode
-This is run before the process is cranked up.")
+This is run before the process is cranked up."
+  :type 'hook
+  :group 'comint)
 
-(defvar comint-exec-hook '()
+(defcustom comint-exec-hook '()
   "Called each time a process is exec'd by `comint-exec'.
 This is called after the process is cranked up.  It is useful for things that
 must be done each time a process is executed in a comint mode buffer (e.g.,
 `(process-kill-without-query)').  In contrast, the `comint-mode-hook' is only
-executed once when the buffer is created.")
+executed once when the buffer is created."
+  :type 'hook
+  :group 'comint)
 
 (defvar comint-mode-map nil)
 
 			    (list "---" (cons "Command History" history)))
 		  comint-popup-menu))))
 
-(defvar comint-history-menu-max 40
-  "*Maximum number of entries to display on the Comint command-history menu.")
+(defcustom comint-history-menu-max 40
+  "*Maximum number of entries to display on the Comint command-history menu."
+  :type 'integer
+  :group 'comint)
 
 (defun comint-history-menu-filter (menu)
   (append menu (comint-make-history-menu)))
 ;;; Commands like this are fine things to put in load hooks if you
 ;;; want them present in specific modes.
 
-(defvar comint-completion-autolist nil
+(defcustom comint-completion-autolist nil
   "*If non-nil, automatically list possibilities on partial completion.
-This mirrors the optional behavior of tcsh.")
+This mirrors the optional behavior of tcsh."
+  :type 'boolean
+  :group 'comint-completion)
 
-(defvar comint-completion-addsuffix t
+(defcustom comint-completion-addsuffix t
   "*If non-nil, add a `/' to completed directories, ` ' to file names.
 If a cons pair, it should be of the form (DIRSUFFIX . FILESUFFIX) where
 DIRSUFFIX and FILESUFFIX are strings added on unambiguous or exact completion.
-This mirrors the optional behavior of tcsh.")
+This mirrors the optional behavior of tcsh."
+  :type 'boolean
+  :group 'comint-completion)
 
-(defvar comint-completion-recexact nil
+(defcustom comint-completion-recexact nil
   "*If non-nil, use shortest completion if characters cannot be added.
 This mirrors the optional behavior of tcsh.
 
-A non-nil value is useful if `comint-completion-autolist' is non-nil too.")
+A non-nil value is useful if `comint-completion-autolist' is non-nil too."
+  :type 'boolean
+  :group 'comint-completion)
 
-(defvar comint-completion-fignore nil
+(defcustom comint-completion-fignore nil
   "*List of suffixes to be disregarded during file completion.
 This mirrors the optional behavior of bash and tcsh.
 
-Note that this applies to `comint-dynamic-complete-filename' only.")
+Note that this applies to `comint-dynamic-complete-filename' only."
+  :type '(repeat (string :tag "Suffix"))
+  :group 'comint-completion)
 
 (defvar comint-file-name-prefix ""
   "Prefix prepended to absolute file names taken from process input.
 
 ;;; Commands for extracting source locations:
 
-(defvar comint-find-source-code-max-lines 100
+(defcustom comint-find-source-code-max-lines 100
   "*Maximum number of lines to search backward for a source location,
-when using \\[comint-find-source-code\\] with an interactive prefix.")
+when using \\[comint-find-source-code\\] with an interactive prefix."
+  :type 'integer
+  :group 'comint-source)
 
-(defvar comint-find-source-file-hook nil
+(defcustom comint-find-source-file-hook nil
   "*Function to call instead of comint-default-find-source-file
 when comint-find-source-code parses out a file name and then wants to
 visit its buffer.  The sole argument is the file name.  The function
 must find the file, setting the current buffer, and return the file
 name.  It may also adjust the file name.  If you change this variable,
-make it buffer local.")
+make it buffer local."
+  :type 'function
+  :group 'comint-source)
 
-(defvar comint-goto-source-line-hook nil
+(defcustom comint-goto-source-line-hook nil
   "*Function to call instead of comint-default-goto-source-line
 after comint-find-source-code finds a file and then wants to
 go to a line number mentioned in a source location.
 The sole argument is the line number.  The function must
 return the line number, possibly adjusted.  If you change
-this variable, make it buffer local.")
+this variable, make it buffer local."
+  :type 'function
+  :group 'comint-source)
 
 (defun comint-find-source-code (multi-line)
   "Search backward from point for a source location.

File lisp/comint/rlogin.el

 ;; along with this program; if not, write to: The Free Software Foundation,
 ;; Inc.; 675 Massachusetts Avenue.; Cambridge, MA 02139, USA.
 
-;; $Id: rlogin.el,v 1.1.1.1 1996/12/18 22:42:36 steve Exp $
+;; $Id: rlogin.el,v 1.2 1997/04/19 23:20:49 steve Exp $
 
 ;;; Commentary:
 
 (require 'comint)
 (require 'shell)
 
-(defvar rlogin-program "rlogin"
-  "*Name of program to invoke rlogin")
+(defgroup rlogin nil
+  "Remote login interface"
+  :group 'processes
+  :group 'unix)
 
-(defvar rlogin-explicit-args nil
-  "*List of arguments to pass to rlogin on the command line.")
 
-(defvar rlogin-mode-hook nil
-  "*Hooks to run after setting current buffer to rlogin-mode.")
+(defcustom rlogin-program "rlogin"
+  "*Name of program to invoke rlogin"
+  :type 'string
+  :group 'rlogin)
 
-(defvar rlogin-process-connection-type nil
+(defcustom rlogin-explicit-args nil
+  "*List of arguments to pass to rlogin on the command line."
+  :type '(repeat (string :tag "Argument"))
+  :group 'rlogin)
+
+(defcustom rlogin-mode-hook nil
+  "*Hooks to run after setting current buffer to rlogin-mode."
+  :type 'hook
+  :group 'rlogin)
+
+(defcustom rlogin-process-connection-type nil
   "*If non-`nil', use a pty for the local rlogin process.
 If `nil', use a pipe (if pipes are supported on the local system).
 
 Generally it is better not to waste ptys on systems which have a static
 number of them.  On the other hand, some implementations of `rlogin' assume
-a pty is being used, and errors will result from using a pipe instead.")
+a pty is being used, and errors will result from using a pipe instead."
+  :type '(choice (const :tag "ptys" t)
+		 (const :tag "pipes" nil))
+  :group 'rlogin)
 
-(defvar rlogin-directory-tracking-mode 'local
+(defcustom rlogin-directory-tracking-mode 'local
   "*Control whether and how to do directory tracking in an rlogin buffer.
 
 nil means don't do directory tracking.
 It is better to use the function of the same name to change the behavior of
 directory tracking in an rlogin session once it has begun, rather than
 simply setting this variable, since the function does the necessary
-re-synching of directories.")
+re-synching of directories."
+  :type '(choice (const :tag "off" nil)
+		 (const :tag "ftp" t)
+		 (const :tag "local" local))
+  :group 'rlogin)
 
 (make-variable-buffer-local 'rlogin-directory-tracking-mode)
 
-(defvar rlogin-host nil
-  "*The name of the remote host.  This variable is buffer-local.")
+(defcustom rlogin-host nil
+  "*The name of the remote host.  This variable is buffer-local."
+  :type '(choice (const nil) string)
+  :group 'rlogin)
 
-(defvar rlogin-remote-user nil
+(defcustom rlogin-remote-user nil
   "*The username used on the remote host.
 This variable is buffer-local and defaults to your local user name.
 If rlogin is invoked with the `-l' option to specify the remote username,
-this variable is set from that.")
+this variable is set from that."
+  :type '(choice (const nil) string)
+  :group 'rlogin)
 
 ;; Initialize rlogin mode map.
 (defvar rlogin-mode-map '())

File lisp/comint/shell.el

 
 (require 'comint)
 
+(defgroup shell nil
+  "Running shell from within Emacs buffers"
+  :group 'processes
+  :group 'unix)
+
+(defgroup shell-directories nil
+  "Directory support in shell mode"
+  :group 'shell)
+
+(defgroup shell-faces nil
+  "Faces in shell buffers"
+  :group 'shell)
+
 ;;;###autoload
 (defvar shell-prompt-pattern (purecopy "^[^#$%>\n]*[#$%>] *")
   "Regexp to match prompts in the inferior shell.
 
 This is a fine thing to set in your `.emacs' file.")
 
-(defvar shell-completion-fignore nil
+(defcustom shell-completion-fignore nil
   "*List of suffixes to be disregarded during file/command completion.
 This variable is used to initialize `comint-completion-fignore' in the shell
 buffer.  The default is nil, for compatibility with most shells.
 Some people like (\"~\" \"#\" \"%\").
 
-This is a fine thing to set in your `.emacs' file.")  
+This is a fine thing to set in your `.emacs' file."
+  :type '(repeat (string :tag "Suffix"))
+  :group 'shell)
 
 ;jwz: turned this off; it's way too broken.
 (defvar shell-delimiter-argument-list nil ;'(?\| ?& ?< ?> ?\( ?\) ?\;
 
 This is a fine thing to set in your `.emacs' file.")
 
-(defvar shell-command-regexp "[^;&|\n]+"
+(defcustom shell-command-regexp "[^;&|\n]+"
   "*Regexp to match a single command within a pipeline.
-This is used for directory tracking and does not do a perfect job.")
+This is used for directory tracking and does not do a perfect job."
+  :type 'regexp
+  :group 'shell)
 
-(defvar shell-completion-execonly t
+(defcustom shell-completion-execonly t
   "*If non-nil, use executable files only for completion candidates.
 This mirrors the optional behavior of tcsh.
 
-Detecting executability of files may slow command completion considerably.")
+Detecting executability of files may slow command completion considerably."
+  :type 'boolean
+  :group 'shell)
 
-(defvar shell-multiple-shells nil
-  "*If non-nil, each time shell mode is invoked, a new shell is made")
+(defcustom shell-multiple-shells nil
+  "*If non-nil, each time shell mode is invoked, a new shell is made"
+  :type 'boolean
+  :group 'shell)
 
-(defvar shell-popd-regexp "popd"
-  "*Regexp to match subshell commands equivalent to popd.")
+(defcustom shell-popd-regexp "popd"
+  "*Regexp to match subshell commands equivalent to popd."
+  :type 'regexp
+  :group 'shell-directories)
 
-(defvar shell-pushd-regexp "pushd"
-  "*Regexp to match subshell commands equivalent to pushd.")
+(defcustom shell-pushd-regexp "pushd"
+  "*Regexp to match subshell commands equivalent to pushd."
+  :type 'regexp
+  :group 'shell-directories)
 
-(defvar shell-pushd-tohome nil
+(defcustom shell-pushd-tohome nil
   "*If non-nil, make pushd with no arg behave as \"pushd ~\" (like cd).
-This mirrors the optional behavior of tcsh.")
+This mirrors the optional behavior of tcsh."
+  :type 'boolean
+  :group 'shell-directories)
 
-(defvar shell-pushd-dextract nil
+(defcustom shell-pushd-dextract nil
   "*If non-nil, make \"pushd +n\" pop the nth dir to the stack top.
-This mirrors the optional behavior of tcsh.")
+This mirrors the optional behavior of tcsh."
+  :type 'boolean
+  :group 'shell-directories)
 
-(defvar shell-pushd-dunique nil
+(defcustom shell-pushd-dunique nil
   "*If non-nil, make pushd only add unique directories to the stack.
-This mirrors the optional behavior of tcsh.")
+This mirrors the optional behavior of tcsh."
+  :type 'boolean
+  :group 'shell-directories)