changeset 83228:2a3f27a45698

Merged in changes from CVS trunk. Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-694 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-695 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-696 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-697 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-698 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-699 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-700 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-701 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-702 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-703 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-704 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-705 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-706 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-707 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-708 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-709 Update from CVS: src/indent.c (Fvertical_motion): Fix last change. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-710 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-711 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-712 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-713 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-72 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-73 Merge from emacs--cvs-trunk--0 git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-268
author Karoly Lorentey <lorentey@elte.hu>
date Mon, 22 Nov 2004 11:06:39 +0000
parents 3ec251523b3e (current diff) 6b5846d74ff0 (diff)
children b8f2149f9c3d
files admin/FOR-RELEASE lisp/ChangeLog lisp/bindings.el lisp/emacs-lisp/bytecomp.el lisp/files.el lisp/font-lock.el lisp/progmodes/idlw-shell.el lisp/progmodes/idlw-toolbar.el lisp/progmodes/idlwave.el lisp/simple.el lisp/subr.el lisp/url/url.el lisp/vc-rcs.el lisp/vc.el man/ChangeLog src/dispextern.h src/frame.c src/fringe.c src/indent.c src/keyboard.c src/keymap.c src/lisp.h src/macterm.c src/minibuf.c src/w32term.c src/window.c src/xdisp.c src/xfns.c src/xmenu.c src/xterm.c src/xterm.h
diffstat 109 files changed, 14334 insertions(+), 8038 deletions(-) [+]
line wrap: on
line diff
--- a/admin/FOR-RELEASE	Sat Nov 13 18:34:40 2004 +0000
+++ b/admin/FOR-RELEASE	Mon Nov 22 11:06:39 2004 +0000
@@ -2,10 +2,6 @@
 
 * NEW FEATURES
 
-** Test the mbox branch of Rmail.
-
-** Install the mbox branch of Rmail.
-
 ** Face remapping.
 
 ** Let mouse-1 follow links.
@@ -36,6 +32,53 @@
 
 ** Clean up flymake.el to follow Emacs Lisp conventions.
 
+** Fix up url-ldap.el.
+
+* BUGS
+
+** Mailabbrev should quote addresses to correspond to RFC 822.
+See http://article.gmane.org/gmane.emacs.devel/27585
+
+** The '@' character should not expand addresses in mailabbrev
+See http://article.gmane.org/gmane.emacs.devel/27585
+
+** Bug in url-http-parse-headers, reported in
+From: Vivek Dasmohapatra <vivek@zeus.com>
+Date: Tue, 28 Sep 2004 16:13:13 +0100
+
+Fetching a url with url-retrieve can reult in an anrbitrary buffer
+being killed if a 401 (or possibly a 407) result is encountered:
+
+url-http-parse-headers calls url-http-handle-authentication,
+which can call url-retrieve.
+
+This results in the current buffer being killed, and a new http buffer
+being generated. However, when the old http buffer is killed, emacs
+picks the top buffer from the list as the new current buffer, so by the
+time we get to the end of url-http-parse-headers, _that_ buffer is marked
+as dead even though it is not necessarily a url buffer, so next time the
+url libraries reap their dead buffers, an innocent bystander buffer is
+killed instead (and an obsolete http buffer may be left lying around too).
+
+A possible fix (which I am currently using) is to call set-buffer
+on the return value of url-http-parse-headers:
+
+      (case url-http-response-status
+	(401
+	 ;; The request requires user authentication.  The response
+	 ;; MUST include a WWW-Authenticate header field containing a
+	 ;; challenge applicable to the requested resource.  The
+	 ;; client MAY repeat the request with a suitable
+	 ;; Authorization header field.
+	 (url-mark-buffer-as-dead (current-buffer))
+	 (set-buffer (url-http-handle-authentication nil)))
+etc ....
+
+which makes sure that it is the right http buffer that is current when
+we come to mark the http buffers as dead.
+
+
+
 * GTK RELATED BUGS
 
 ** Make GTK scrollbars behave like others w.r.t. overscrolling.
@@ -51,16 +94,6 @@
 A fix would be to somehow disable handling of display properties if an error
 is encountered.
 
-** Problem with cursor border around images and window-margins:
-
-The border around the image when the cursor is on the image
-flows into the right fringe and margin.
-
-     (progn
-       (auto-image-file-mode 1)
-       (find-file (concat data-directory "splash.xpm"))
-       (set-window-margins (selected-window) 25 25))
-
 
 ** Problem with modeline and window margins:
 
@@ -108,39 +141,6 @@
 Update: Maybe only reveals itself when compiled with GTK+
 
 
-** Clicking on partially visible lines fails
-
-From: David Kastrup <dak@gnu.org>
-Date: 27 Apr 2004 16:42:58 +0200
-
-I had gnus display a mouse-highlighted line (a URL from browse-url)
-partially at the bottom of its window.  If I click with middle mouse
-key on it, the window gets recentered while I hold the mouse key
-pressed.  If I release it, the window returns into its old position
-(cursor in top row) and nothing happens, presumably because the click
-was not registered on the line itself, but on the magically
-recentered version.
-
-That is a nuisance.  Recentering of even partially visible click
-targets should only happen if window-point moves there, but not at
-the time of the click.  From the moment I hold down a key until it
-gets released, the displayed window portion should not change, with
-the sole exception of scrolling when dragging at the edge of the
-screen.
-
-
-** Can't drag modeline when mouse-autoselect-window is set
-
-From: Klaus Zeitler <kzeitler@lucent.com>
-Date: Mon, 11 Oct 2004 11:14:49 +0200
-
-1. start emacs -q --no-site-file
-2. set variable mouse-autoselect-window to t
-3. split-window-vertically
-
-now I can drag the modeline only upwards but not downwards
-
-
 ** line-spacing and Electric-pop-up-window
 
 From: SAITO Takuya <tabmore@rivo.mediatti.net>
@@ -157,6 +157,32 @@
 Electric-pop-up-window can use it.
 
 
+** Partial highlighting of wrapped overlay
+
+From: Ralf Angeli <angeli@iwi.uni-sb.de>
+Date: Mon, 18 Oct 2004 19:09:19 +0200
+
+If you put
+
+(let* ((length (+ (- (window-width) (current-column)) 40))
+       (start (point))
+       (end (+ (point) length))
+       (string (make-string length ?x))
+       ov)
+  (insert string)
+  (setq ov (make-overlay start end))
+  (overlay-put ov 'mouse-face 'highlight)
+  (overlay-put ov 'display string))
+
+into the *scratch* buffer and type `C-x C-e' with point at the last
+parenthesis, you will get a string which does not fit into the line
+and has to be wrapped.  If you move over it with your mouse, you
+should see that only the part on the second line is being highlighted.
+The full string is highlighted only if the 'display property is not
+set.
+
+
+
 * DOCUMENTATION
 
 ** Document Custom Themes.
@@ -244,7 +270,7 @@
 lispref/compile.texi     "Luc Teirlinck"
 lispref/control.texi     "Luc Teirlinck"
 lispref/customize.texi
-lispref/debugging.texi
+lispref/debugging.texi   Joakim Verona <joakim@verona.se>
 lispref/display.texi
 lispref/edebug.texi
 lispref/elisp.texi       "Luc Teirlinck"
--- a/etc/NEWS	Sat Nov 13 18:34:40 2004 +0000
+++ b/etc/NEWS	Mon Nov 22 11:06:39 2004 +0000
@@ -2336,6 +2336,27 @@
 * Lisp Changes in Emacs 21.4
 
 +++
+** read-from-minibuffer now accepts an additional argument KEEP-ALL
+saying to put all inputs in the history list, even empty ones.
+
++++
+** The new variable search-spaces-regexp controls how to search
+for spaces in a regular expression.  If it is non-nil, it should be a
+regular expression, and any series of spaces stands for that regular
+expression.  If it is nil, spaces stand for themselves.
+
+Spaces inside of constructs such as [..] and *, +, ? are never
+replaced with search-spaces-regexp.
+
+---
+** list-buffers-noselect now takes an additional argument, BUFFER-LIST.
+If it is non-nil, it specifies which buffers to list.
+
+---
+** set-buffer-file-coding-system now takes an additional argument,
+NOMODIFY.  If it is non-nil, it means don't mark the buffer modified.
+
++++
 ** The new function syntax-after returns the syntax code
 of the character after a specified buffer position, taking account
 of text properties as well as the character code.
@@ -2349,10 +2370,15 @@
 
 +++
 ** The new function `called-interactively-p' does what many people
-have mistakenly believed `interactively-p' did: it returns t if the
-calling function was called through `call-interactively'.
-This should only be used when you cannot add a new "interactively"
-argument to the command.
+have mistakenly believed `interactive-p' did: it returns t if the
+calling function was called through `call-interactively'.  This should
+only be used when you cannot add a new "interactive" argument to the
+command.
+
++++
+** The new function `assoc-string' replaces `assoc-ignore-case' and
+`assoc-ignore-representation', which are still available, but have
+been declared obsolete.
 
 +++
 ** An interactive specification may now use the code letter 'U' to get
@@ -3640,6 +3666,12 @@
 specified) window as a string with or without text properties.
 
 +++
+** New function safe-plist-get.
+
+This function is like plist-get, but never signals an error for
+a malformed property list.
+
++++
 ** New functions `lax-plist-get' and `lax-plist-put'.
 
 These functions are like `plist-get' and `plist-put' except that they
--- a/etc/refcard.tex	Sat Nov 13 18:34:40 2004 +0000
+++ b/etc/refcard.tex	Mon Nov 22 11:06:39 2004 +0000
@@ -311,7 +311,7 @@
 
 \key{{\bf abort} partially typed or executing command}{C-g}
 \metax{{\bf recover} a file lost by a system crash}{M-x recover-file}
-\key{{\bf undo} an unwanted change}{C-x u {\rm or} C-_}
+\metax{{\bf undo} an unwanted change}{C-x u, C-_ {\rm or} C-/}
 \metax{restore a buffer to its original contents}{M-x revert-buffer}
 \key{redraw garbaged screen}{C-l}
 
--- a/lib-src/ChangeLog	Sat Nov 13 18:34:40 2004 +0000
+++ b/lib-src/ChangeLog	Mon Nov 22 11:06:39 2004 +0000
@@ -1,3 +1,7 @@
+2004-11-17  Kim F. Storm  <storm@cua.dk>
+
+	* etags.c: Undo last change.
+
 2004-11-09  Kim F. Storm  <storm@cua.dk>
 
 	* make-docfile.c (scan_c_file): Set defvarperbufferflag to
--- a/lib-src/etags.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/lib-src/etags.c	Mon Nov 22 11:06:39 2004 +0000
@@ -1400,8 +1400,6 @@
           this_file = argbuffer[i].what;
           process_file (stdin, this_file, lang);
           break;
-	case at_end:
-	  break;
 	}
     }
 
@@ -2902,8 +2900,6 @@
      case tkeyseen:
        switch (toktype)
 	 {
-	 default:
-	   break;
 	 case st_none:
 	 case st_C_class:
 	 case st_C_struct:
@@ -2921,16 +2917,12 @@
      case tend:
        switch (toktype)
 	 {
-	 default:
-	   break;
 	 case st_C_class:
 	 case st_C_struct:
 	 case st_C_enum:
 	   return FALSE;
 	 }
        return TRUE;
-     default:
-       break;
      }
 
    /*
@@ -2968,8 +2960,6 @@
 	     fvdef = fvnone;
 	 }
        return FALSE;
-     default:
-       break;
      }
 
    if (structdef == skeyseen)
@@ -2993,8 +2983,6 @@
 	 case st_C_objimpl:
 	   objdef = oimplementation;
 	   return FALSE;
-	 default:
-	   break;
 	 }
        break;
      case oimplementation:
@@ -3051,8 +3039,6 @@
 	   objdef = onone;
 	 }
        return FALSE;
-     default:
-       break;
      }
 
    /* A function, variable or enum constant? */
@@ -3105,8 +3091,6 @@
 		   return FALSE;
 		 }
 	       break;
-	     default:
-	       break;
 	     }
 	  /* FALLTHRU */
 	  case fvnameseen:
@@ -3123,12 +3107,8 @@
 	  fvdef = fvnameseen;	/* function or variable */
 	  *is_func_or_var = TRUE;
 	  return TRUE;
-	default:
-	   break;
 	}
       break;
-    default:
-      break;
     }
 
   return FALSE;
@@ -3604,8 +3584,6 @@
 			  fvdef = fignore;
 			}
 		      break;
-		    default:
-		      break;
 		    }
 		  if (structdef == stagseen && !cjava)
 		    {
@@ -3616,8 +3594,6 @@
 		case dsharpseen:
 		  savetoken = token;
 		  break;
-		default:
-		  break;
 		}
 	      if (!yacc_rules || lp == newlb.buffer + 1)
 		{
@@ -3656,8 +3632,6 @@
 	      linebuffer_setlen (&token_name, token_name.len + 1);
 	      strcat (token_name.buffer, ":");
 	      break;
-	    default:
-	      break;
 	    }
 	  if (structdef == stagseen)
 	    {
@@ -3735,8 +3709,6 @@
 	      make_C_tag (TRUE); /* an Objective C method */
 	      objdef = oinbody;
 	      break;
-	    default:
-	      break;
 	    }
 	  switch (fvdef)
 	    {
@@ -3807,8 +3779,6 @@
 		  fvdef = fvnone;
 		}
 	      break;
-	    default:
-	      break;
 	    }
 	  break;
 	case '(':
@@ -3842,8 +3812,6 @@
 	    case flistseen:
 	      fvdef = finlist;
 	      break;
-	    default:
-	      break;
 	    }
 	  parlev++;
 	  break;
@@ -3869,8 +3837,6 @@
 		case finlist:
 		  fvdef = flistseen;
 		  break;
-		default:
-		  break;
 		}
 	      if (!instruct
 		  && (typdef == tend
@@ -3920,8 +3886,6 @@
 		    bracelev = -1;
 		}
 	      break;
-	    default:
-	      break;
 	    }
 	  switch (structdef)
 	    {
@@ -3935,8 +3899,6 @@
 	      structdef = snone;
 	      make_C_tag (FALSE);  /* a struct or enum */
 	      break;
-	    default:
-	      break;
 	    }
 	  bracelev++;
 	  break;
--- a/lisp/ChangeLog	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/ChangeLog	Mon Nov 22 11:06:39 2004 +0000
@@ -1,27 +1,556 @@
+2004-11-21  Vinicius Jose Latorre  <viniciusjl@ig.com.br>
+
+	* ps-print.el: Insert :version tag into all defgroup and defcustom.
+	Use (featurep 'xemacs) instead of (eq ps-print-emacs-type 'xemacs).
+	Eliminate eval-and-compile usage.
+	(ps-insert-file): Use insert-file-contents instead of insert-file.
+	(ps-setup): Code fix.
+
+	* printing.el (pr-setup, lpr-setup): Code fix.
+
+2004-11-21  Jay Belanger  <belanger@truman.edu>
+
+	* calc/calc-prog.el (math-integral-cache-state, calc-lang)
+	(calc-original-buffer): Declare them.
+
+	(calc-user-formula-alist): New variable.
+	(calc-user-define-formula, calc-fix-user-formula)
+	(calc-user-define-composition, calc-finish-formula-edit):
+	Replace variable `alist' by declared variable.
+
+	(var-q0, var-q1, var-q2, var-q3, var-q4, var-q5, var-q6)
+	(var-q7, var-q7, var-q8, var-q9): Declare them.
+	(calc-kbd-push): Don't check to see if var-q0 through var-q9
+	are bound.
+
+	(calcFunc-typeof): Replace undeclared variable by expression.
+
+	(math-exp-env): New variable.
+	(math-define-body, math-define-exp): Replace exp-env by declared
+	variable.
+
+	(math-define-exp): Replace misplaced variable by expression.
+
+	* calc/calcalg3.el (calc-curve-nvars, calc-curve-varnames)
+	(calc-curve-model, calc-curve-coefnames): New variables.
+	(calc-curve-fit, calc-get-fit-variables): Replace variables nvars,
+	varnames, model and coefnames by declared variables.
+
+	(math-root-widen): New variable.
+	(math-search-root, math-find-root): Replace variable root-widen by
+	declared variable.
+
+	(var-DUMMY): Declare it.
+	(math-root-vars, math-min-vars): Move the declarations to earlier in
+	the file.
+
+	(math-brent-min): Make d a local variable.
+
+	(math-find-minimum): Replace non-existent variable.
+
+	(math-ninteg-romberg): Remove unnecessary variable.
+
+	(math-ninteg-temp): New variable.
+	(math-ninteg-romberg, math-ninteg-midpoint): Replace variable
+	integ-temp by declared variable.
+
+	(math-fit-first-var, math-fit-first-coef, math-fit-new-coefs):
+	New variables.
+	(math-general-fit): Replace variables first-var, first-coef and
+	new-coefs by declared variables.
+	(calcFunc-fitvar): Replace variable first-var by declared variable.
+	(calcFunc-fitparam): Replace variable first-coef by declared variable.
+	(calcFunc-fitdummy): Replace variable new-coefs by declared variable.
+
+	(math-all-vars-vars, math-all-vars-found): New variables.
+	(math-all-vars-in, math-all-vars-rec): Replace variables vars and
+	found by declared variable math-all-vars-vars.
+
+2004-11-20  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* emacs-lisp/cust-print.el (custom-printers): Use `defvar' instead
+	of `defconst'.
+
+2004-11-20  Richard M. Stallman  <rms@gnu.org>
+
+	* emacs-lisp/bytecomp.el (byte-compile-form):
+	Move the calls to byte-compile-set-symbol-position,
+	to avoid having two for the same symbol occurrence.
+
+	* comint.el (comint-input-ring-size): Increase to 150.
+
+	* hexl.el (hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode):
+	New variables.
+	(hexl-mode): Set those variables, record ruler-mode and hl-line-mode.
+	(hexl-mode-exit): Restore status of ruler-mode and hl-line-mode.
+
+	* imenu.el (imenu--generic-function):
+	Ensure we keep moving backward even if BEG isn't further back.
+
+	* replace.el (query-replace-read-to, query-replace-read-from):
+	Specify t for KEEP-ALL in read-from-minibuffer.
+
+	* progmodes/python.el (python-switch-to-python):
+	If Python isn't running, start it.
+	Don't alter debug-ignored-errors.
+
+	* progmodes/cperl-mode.el (cperl-indent-region):
+	Don't mind imenu-scanning-message.
+
+	* bindings.el (global-map): Bind C-e to move-end-of-line.
+
+	* simple.el (line-move-finish): New arg FORWARD.
+	Ignore invisible newlines, not intangible ones.
+	Conditions for acceptable stopping positions depend on FORWARD.
+	(line-move): Pass FORWARD arg to line-move-finish.
+
+	* buff-menu.el (list-buffers-noselect): Eliminate space at the start
+	of HEADER.  Compensate for this change in the code to add display
+	properties.  Don't make the first line intangible.
+
+	* info.el (Info-search): Fix previous change.
+
+2004-11-20  Thien-Thi Nguyen  <ttn@gnu.org>
+
+	* Makefile.in (recompile): Revert 2004-11-19 change.
+	(compile): Likewise.
+
+2004-11-19  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* Makefile.in (compile): Set `max-specpdl-size' before compiling.
+
+2004-11-19  Vinicius Jose Latorre  <viniciusjl@ig.com.br>
+
+	* progmodes/ebnf2ps.el: Fix typos.  Insert :version tag into all
+	defgroup and defcustom.  Eliminate eval-and-compile usage.
+
+	* progmodes/ebnf-otz.el: Fix typos.
+
+2004-11-19  Jay Belanger  <belanger@truman.edu>
+
+	* calc/calc-yank.el (calc-edit-disp-trail): New variable.
+	(calc-edit-finish, calc-finish-stack-edit): Replace variable
+	disp-trail by declared variable.
+
+	* calc/calc-sel.el (calc-edit-disp-trail): Declare it.
+	(calc-finish-selection-edit):  Replace variable disp-trail by
+	declared variable.
+
+	(calc-selection-cache-entry): Move declaration to earlier in
+	the file.
+
+	(calc-selection-cache-num, calc-selection-cache-comp)
+	(calc-selection-cache-offset, calc-selection-true-num)
+	(calc-final-point-line, calc-final-point-column)
+	(calc-original-buffer): Declare them.
+
+	(calc-fnp-op, calc-fnp-num): New variables.
+	(calc-find-nth-part, calc-find-nth-part-rec)
+	(calc-select-previous): Replace op and num by declared
+	variables.
+
+	(calc-rsf-old, calc-rsf-new): New variables.
+	(calc-replace-sub-formula, calc-replace-sub-formula-rec):
+	Replace variables old and new by declared variables.
+
+	(calc-sel-reselect): New variable.
+	(calc-auto-selection, calc-enter-selection, calc-edit-selection)
+	(calc-sel-evaluate, calc-sel-expand-formula, calc-sel-expand-formula)
+	(calc-sel-mult-both-sides, calc-sel-add-both-sides):  Replace variable
+	reselect with declared variable.
+
+	* calc/calc-rewr.el (math-regs, math-num-regs, math-prog-last)
+	(math-bound-vars, math-conds, math-copy-neg, math-rhs)
+	(math-pattern, math-remembering, math-aliased-vars, math-mt-many)
+	(math-import-list, math-rewrite-phase): Declare them.
+
+	(math-rewrite):  Use let* to declare variables.
+
+	(calc-rewrite-selection): Make rules a local variable.
+
+	(calc-rewr-sel): New variable.
+	(calc-rewrite-selection, calc-locate-selection-marker)
+	(calc-rewrite): Use the declared variable calc-rewr-sel instead
+	of sel.
+
+	(math-rewrite-whole-expr): New variable.
+	(math-rewrite, math-rewrite-phase): Replace variable expr by
+	declared variable.
+
+	(math-rewrite-heads-heads, math-rewrite-heads-skips)
+	(math-rewrite-heads-blanks ): New variables.
+	(math-rewrite-heads, math-rewrite-heads-rec): Replace variables
+	heads, skips and blanks by declared variables.
+
+	(math-rwcomp-subst-old, math-rwcomp-subst-new)
+	(math-rwcomp-subst-old-func, math-rwcomp-subst-new-func):
+	New variables.
+	(math-rwcomp-substitute, math-rwcomp-subst-rec): Replace variables
+	old, new, old-func and new-func by declared variables.
+
+	(math-rwcomp-assoc-args, math-rwcomp-addsub-args):
+	Remove unnecessary variable.
+
+	(math-apply-rw-regs): New variable.
+	(math-apply-rewrites, math-rwapply-replace-regs)
+	(math-rwapply-reg-looks-negp): Replace variable regs by declared
+	variable.
+
+	(math-apply-rw-ruleset): New variable.
+	(math-apply-rewrites, math-rwapply-remember): Replace variable
+	ruleset by declared variable.
+
+2004-11-19  Richard M. Stallman  <rms@gnu.org>
+
+	* info.el (Info-search): Use search-whitespace-regexp.
+
+2004-11-19  Thien-Thi Nguyen  <ttn@gnu.org>
+
+	* vc-rcs.el (vc-rcs-parse): New function.
+	(vc-rcs-annotate-command): Likewise.
+	(vc-rcs-annotate-current-time): Likewise.
+	(vc-rcs-annotate-time): Likewise.
+	(vc-rcs-annotate-extract-revision-at-line): Likewise.
+
+2004-11-19  Thien-Thi Nguyen  <ttn@gnu.org>
+
+	* Makefile.in (recompile): Set `max-specpdl-size' before compiling.
+
+2004-11-18  Jay Belanger  <belanger@truman.edu>
+
+	* calc/calc-alg.el (math-simplify-divisor): Remove unnecessary
+	variables.
+
+2004-11-17  Vinicius Jose Latorre  <viniciusjl@ig.com.br>
+
+	* printing.el: Eliminate use of interactive-p and eval-and-compile.
+	Use of (featurep 'xemacs) instead of (eq ps-print-emacs-type 'xemacs).
+	Use make-temp-file to generate PostScript files in any situation.
+	(pr-ps-temp-file): Now specify a prefix to generate temporary files.
+	(pr-interactive-p): Eliminate var.
+	(pr-save-interactive): Eliminate macro.
+	(pr-interface, pr-ps-directory-preview)
+	(pr-ps-directory-using-ghostscript, pr-ps-directory-print)
+	(pr-ps-directory-ps-print, pr-ps-buffer-preview)
+	(pr-ps-buffer-using-ghostscript, pr-ps-buffer-print)
+	(pr-ps-buffer-ps-print, pr-ps-region-preview)
+	(pr-ps-region-using-ghostscript, pr-ps-region-print)
+	(pr-ps-region-ps-print, pr-ps-mode-preview)
+	(pr-ps-mode-using-ghostscript, pr-ps-mode-print, pr-ps-mode-ps-print)
+	(pr-printify-directory, pr-txt-directory, pr-despool-preview)
+	(pr-despool-using-ghostscript, pr-despool-print, pr-despool-ps-print)
+	(pr-ps-file-up-preview, pr-ps-file-using-ghostscript)
+	(pr-ps-file-up-ps-print, pr-toggle-file-duplex, pr-toggle-file-tumble)
+	(pr-toggle-file-landscape, pr-toggle-ghostscript, pr-toggle-faces)
+	(pr-toggle-spool, pr-toggle-duplex, pr-toggle-tumble)
+	(pr-toggle-landscape, pr-toggle-upside-down, pr-toggle-line)
+	(pr-toggle-zebra, pr-toggle-header, pr-toggle-header-frame)
+	(pr-toggle-lock, pr-toggle-region, pr-toggle-mode, pr-ps-name)
+	(pr-txt-name, pr-ps-utility, pr-ps-fast-fire, pr-txt-fast-fire)
+	(pr-update-menus, pr-interface-ps-prin, pr-interface-preview):
+	Eliminate pr-save-interactive usage.
+	(pr-menu-lock, pr-ps-utility-args, pr-set-outfilename):
+	Eliminate pr-interactive-p usage.
+	(pr-toggle-file-duplex-menu, pr-toggle-file-tumble-menu)
+	(pr-toggle-file-landscape-menu, pr-toggle-ghostscript-menu)
+	(pr-toggle-faces-menu, pr-toggle-spool-menu, pr-toggle-duplex-menu)
+	(pr-toggle-tumble-menu, pr-toggle-landscape-menu)
+	(pr-toggle-upside-down-menu, pr-toggle-line-menu, pr-toggle-zebra-menu)
+	(pr-toggle-header-menu, pr-toggle-header-frame-menu)
+	(pr-toggle-lock-menu, pr-toggle-region-menu, pr-toggle-mode-menu):
+	New funs.
+	(pr-ps-file): Use make-temp-file to generate a temporary file.
+
+2004-11-17  Jay Belanger  <belanger@truman.edu>
+
+	* calc/calc-alg.el (calc-poly-div): Make calc-poly-div-remainder
+	a local variable.
+
+	(math-eval-rules-cache, math-eval-rules-cache-other): Declare them.
+
+	(math-top-only): New variable.
+	(math-simplify, math-simplify-step): Replace variable top-only by
+	declared variable math-top-only.
+
+	(math-simplify-expr): Declare it.
+	Replaced argument expr in all calls of math-defsimplify by
+	math-simplify-expr.
+	(math-simplify-plus, math-simplify-times, math-simplify-divide)
+	(math-simplify-divisor, math-simplify-one-divisor)
+	(math-simplify-mod, math-simplify-ineq, math-simplify-sqrt)
+	(math-simplify-pow): Replace variable expr by declared variable
+	math-simplify-expr.
+
+	(math-simplify-divisor): Remove local variables temp and op.
+	(math-simplify-one-divisor): Make temp and op local variables.
+
+	(math-simplify-divisor-nover, math-simplify-divisor-dover):
+	New variables.
+	(math-simplify-divisor, math-simplify-one-divisor):
+	Replace variables nover and dover by declared variables.
+
+	(math-expr-subst-new, math-expr-subst-old): New variables.
+	(math-expr-subst, math-expr-subst-rec): Replace variables new
+	and old by declared variables.
+
+	(math-is-poly-degree, math-is-poly-loose): New variables.
+	(math-is-polynomial, math-is-poly-rec): Replace variables degree
+	and loose by declared variables.
+
+	(math-poly-base-const-ok, math-poly-base-pred): New variables.
+	(math-polynomial-base, math-polynomial-base-rec):
+	Replace variables const-ok and mpb-pred by declared variables.
+
+	* calc/calc-poly.el (calc-poly-div-remainder): Declare it.
+
+	* calc/calc-ext.el (math-defsimplify): Change the argument in
+	the created function to math-simplify-expr.
+
+	* calc/calc-units.el (math-simplify-expr): Declare it.
+	Replace argument expr in all calls of math-defsimplify by
+	math-simplify-expr.
+	(math-simplify-units-prod): Replace variable expr by declared
+	variable math-simplify-expr.
+
+2004-11-17  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* buff-menu.el (list-buffers-noselect): Massage to fit in 80 columns.
+	Replace mapcar->dolist, format->string.
+
+2004-11-17  Miles Bader  <miles@gnu.org>
+
+	* progmodes/idlw-shell.el, progmodes/idlw-toolbar.el
+	* progmodes/idlwave.el: Remove RCS keywords.
+
+2004-11-17  J.D. Smith  <jdsmith@as.arizona.edu>
+
+	* progmodes/idlwave.el, progmodes/idlw-toolbar.el
+	* progmodes/idlw-shell.el, progmodes/idlw-rinfo.el:
+	Updated to IDLWAVE version 5.5.  Too many changes to list them here.
+	* progmodes/idlw-help.el: New file.
+
+2004-11-16  Richard M. Stallman  <rms@gnu.org>
+
+	* international/iso-cvt.el (iso-tex2iso-trans-tab):
+	Discard spaces after \i according to TeX rules.
+
+	* international/mule.el (set-buffer-file-coding-system):
+	New arg NOMODIFY.
+	(after-insert-file-set-coding): Pass that new arg.
+	Prevent set-buffer-multibyte from trying to lock the file.
+
+	* buff-menu.el (list-buffers-noselect): New arg BUFFER-LIST.
+
+	* saveplace.el (save-place): Doc fix.
+
+	* dabbrev.el (dabbrev-expand): When handling SPC M-/,
+	temporarily widen before finding the following word to copy.
+
+	* emacs-lisp/lucid.el (map-keymap): Definition deleted.
+	(cl-map-keymap): Definition deleted.
+
+	* subr.el (map-keymap-internal): New function.
+
+2004-11-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* textmodes/flyspell.el (flyspell-mouse-map): Pop the menu
+	when pressing rather than when releasing mouse-2.  Simplify.
+
+2004-11-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* progmodes/compile.el (compilation-setup): Don't set buffer-read-only.
+	(compilation-mode): Set it here instead.
+
+	* emacs-lisp/cl-compat.el (pair-with-newsyms): Use make-symbol.
+
+	* emacs-lisp/cl-macs.el: Use make-symbol rather than gensym.
+	(loop, cl-parse-loop-clause, defsetf): Use backquote.
+
+2004-11-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* progmodes/compile.el (compilation-internal-error-properties):
+	Fix up a transposition-typo.  Check end-col before using it.
+
+2004-11-14  Frederic Han  <han@math.jussieu.fr>  (tiny change)
+
+	* international/iso-cvt.el (iso-tex2iso-trans-tab):
+	Discard whitespace after macro \i when converting it.
+
+2004-11-16  Juri Linkov  <juri@jurta.org>
+
+	* emacs-lisp/find-func.el (find-function-regexp):
+	Optimize `define-minor-mode'.  Add `defun-cvs-mode'.
+	Add `deffoo'.  Add `f' to [^cgv] to exclude `defface'.
+	Remove invalid `\W' from [^cgv\W].  Doc fix.
+	(find-function-search-for-symbol): Replace "\\>" with "\\_>".
+
+2004-11-15  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* play/life.el: Maintainer is now FSF.
+	(life-patterns, life-neighbor-deltas, life-window-start)
+	(life-current-generation, life-generation-string): Use defvar
+	instead of defconst.
+
+2004-11-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* progmodes/compile.el (compilation-move-to-column): New fun.
+	(compilation-internal-error-properties)
+	(compilation-next-error-function): Use it to make sure we don't go past
+	the end of line.
+
+2004-11-15  John Paul Wallington  <jpw@gnu.org>
+
+	* autoinsert.el (auto-insert-alist): Insert the user's name in
+	copyright notice, rather than Free Software Foundation, for the
+	Emacs Lisp header case too.
+
+2004-11-15  Vinicius Jose Latorre  <viniciusjl@ig.com.br>
+
+	* printing.el (pr-ps-file-print, pr-toggle-duplex): Fix typos.
+	Reported by Glenn Morris <gmorris+emacs@ast.cam.ac.uk>.
+	(pr-switches-string): If SWITCHES is nil, return nil.  Otherwise,
+	return the list of string in a string.
+	(pr-call-process): Message if calling process returns an error, that
+	is, the exit status is different of zero.
+
+2004-11-15  Jay Belanger  <belanger@truman.edu>
+
+	* calc/calcalg2.el (math-integrate-by-parts):  Remove unused
+	variable var-thing.
+
+	(math-integ-depth, math-integ-level, math-integral-limit)
+	(math-enable-subst, math-any-substs, math-integ-msg)
+	(math-prev-parts-v, math-good-parts, math-max-integral-limit)
+	(math-int-threshold, math-int-factors, math-double-roots)
+	(math-solve-simplifying, var-IntegLimit, math-solve-sign)
+	(var-GenCount):  Declare these variables.
+	(calcFunc-integ):  Don't check if var-IntegLimit is bound.
+
+	(math-integral-cache, math-integral-cache-state):
+	Move declarations to earlier in the file.
+
+	(math-deriv-var, math-deriv-total, math-deriv-symb)
+	(math-cur-record, math-has-rules, math-t1, math-t2, math-t3)
+	(math-so-far, math-integ-expr, math-expr-parts, calc-low)
+	(calc-high, math-solve-var, math-solve-full, math-solve-vars)
+	(math-try-solve-sign, math-solve-b, math-solve-system-vv)
+	(math-solve-res):  New variables
+	(math-derivative, calcFunc-deriv, calcFunc-tderiv)
+	(math-integral, math-replace-integral-parts)
+	(math-integrate-by-parts, calc-dump-integral-cache)
+	(math-try-integral, math-do-integral, math-do-integral)
+	(math-do-integral-methods, math-try-solve-for)
+	(math-try-solve-prod, math-solve-poly-funny-powers)
+	(math-solve-crunch-poly, math-decompose-poly)
+	(math-solve-find-root-term, math-find-root-in-prod)
+	(math-integ-try-linear-substitutions)
+	(math-integ-try-substitutions, math-expr-rational-in)
+	(math-expr-rational-in-rec, calcFunc-table, math-scan-for-limits)
+	(math-solve-prod, math-solve-quartic, math-poly-all-roots)
+	(math-solve-for, math-solve-system, math-solve-system-rec)
+	(math-solve-get-sign, math-solve-get-int)
+	(math-solve-system-subst): Replace undeclared variables with newly
+	declared variables.
+
+2004-11-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* winner.el (winner-active-region, winner-edges, winner-window-list):
+	Define at toplevel.
+	(winner-mode-map): Move init inside declaration.
+
+2004-11-14  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* files.el (convert-standard-filename): Doc fix.
+
+2004-11-14  Daniel Pfeiffer  <occitan@esperanto.org>
+
+	* files.el (auto-mode-alist): Handle .gtkrc, and under /etc
+	passwd, group, shadow, default/* and pam.d/*.
+
+2004-11-14  Vinicius Jose Latorre  <viniciusjl@ig.com.br>
+
+	* printing.el (pr-menu-spec): Adjust menu specification.
+
+2004-11-13  Vinicius Jose Latorre  <viniciusjl@ig.com.br>
+
+	* printing.el: Doc fix.  Insert :version tag into all defcustom.
+	Handle interactive-p as is recommended in Emacs Lisp Reference.
+	Set the file permission bits for newly created files.
+	Reported by Glenn Morris <gmorris+emacs@ast.cam.ac.uk>.
+	The printing menu specification (in `pr-menu-spec') was merged.
+	Suggested by Stefan Monnier <monnier@iro.umontreal.ca>.
+	(pr-version): New version number (6.8.3).
+	(pr-file-modes): New option.
+	(pr-interactive-p): New var.
+	(pr-save-interactive, pr-save-file-modes): New macros.
+	(pr-setup): Code fix.
+	(pr-menu-spec): Menu specification merged.
+	(pr-call-process, pr-text2ps): Set file permission bits.
+	(pr-despool-print): Set file permission bits.  Handle interactive-p as
+	is recommended.
+	(pr-interface, pr-ps-directory-preview)
+	(pr-ps-directory-using-ghostscript, pr-ps-directory-print)
+	(pr-ps-directory-ps-print, pr-ps-buffer-preview)
+	(pr-ps-buffer-using-ghostscript, pr-ps-buffer-print)
+	(pr-ps-buffer-ps-print, pr-ps-region-preview)
+	(pr-ps-region-using-ghostscript, pr-ps-region-print)
+	(pr-ps-region-ps-print, pr-ps-mode-preview)
+	(pr-ps-mode-using-ghostscript, pr-ps-mode-print, pr-ps-mode-ps-print)
+	(pr-printify-directory, pr-txt-directory, pr-despool-preview)
+	(pr-despool-using-ghostscript, pr-despool-ps-print)
+	(pr-ps-file-up-preview, pr-ps-file-using-ghostscript)
+	(pr-ps-file-up-ps-print, pr-toggle-file-duplex, pr-toggle-file-tumble)
+	(pr-toggle-file-landscape, pr-toggle-ghostscript, pr-toggle-faces)
+	(pr-toggle-spool, pr-toggle-duplex, pr-toggle-tumble)
+	(pr-toggle-landscape, pr-toggle-upside-down, pr-toggle-line)
+	(pr-toggle-zebra, pr-toggle-header, pr-toggle-header-frame)
+	(pr-toggle-lock, pr-toggle-region, pr-toggle-mode, pr-ps-name)
+	(pr-txt-name, pr-ps-utility, pr-ps-fast-fire, pr-txt-fast-fire)
+	(pr-menu-lock, pr-update-menus, pr-ps-utility-args)
+	(pr-set-outfilename, pr-interface-ps-print, pr-interface-preview):
+	Handle interactive-p as is recommended.
+
+2004-11-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* emacs-lisp/byte-opt.el (byte-optimize-inline-handler): Simplify.
+	(byte-decompile-bytecode-1): Remove unused vars `tag' and `retcount'.
+
+	* font-lock.el (font-lock-fontify-syntactically-region): Fix last fix
+	so it doesn't forget to highlight the beginning of the region either.
+
+2004-11-13  Daniel Pfeiffer  <occitan@esperanto.org>
+
+	* progmodes/cc-mode.el (c-basic-common-initc-font-lock-init)
+	(c-font-lock-init): Eliminate obsolete make-local-hook.
+	(c-mode, c++-mode, objc-mode, java-mode, idl-mode, pike-mode)
+	(awk-mode): Use run-mode-hooks.
+
+	* progmodes/cperl-mode.el (cperl-mode): Use run-mode-hooks.
+
+2004-11-13  Kim F. Storm  <storm@cua.dk>
+
+	* mouse.el (mouse-drag-copy-region): Add :version.
+	(mouse-drag-mode-line-1): Let bind mouse-autoselect-window to nil
+	while dragging mode line, so mode line can be dragged downwards.
+	(mouse-drag-region-1): Let bind make-cursor-line-fully-visible
+	while pressing mouse button so window doesn't scroll until we
+	release the mouse if clicking on partially visible line.
+
 2004-11-12  Jay Belanger  <belanger@truman.edu>
 
-	* calc/calc-graph.el (calc-dumb-map):  Declared it.
+	* calc/calc-graph.el (calc-dumb-map):  Declare it.
 	(calc-graph-show-dumb):  Check if calc-dumb-map is non-nil rather
-	than unbound. 
-
+	than unbound.
 	(calc-graph-name):  Made `end' a local variable.
 	(calc-graph-lookup):  Made `varname' a local variable.
-
-	(var-DUMMY, var-DUMMY2, var-PlotRejects, calc-gnuplot-trail-mark): 
-	Declared them. 
-
-	(calc-graph-format-data):  Don't check if var-PlotRejects is
-	bound. 
-
-	(calc-graph-plot, calc-graph-compute-3d):  Removed references to
+	(var-DUMMY, var-DUMMY2, var-PlotRejects, calc-gnuplot-trail-mark):
+	Declare them.
+	(calc-graph-format-data):  Don't check if var-PlotRejects is bound.
+	(calc-graph-plot, calc-graph-compute-3d):  Remove references to
 	the unused variable y3vec.
-
-	(calc-graph-show-dumb):  Removed reference to unused variable
-	found-pt. 
-
-	(calc-graph-kill-hook, calc-graph-plot):  Removed reference to
-	calc-graph-prev-kill-hook. 
-
+	(calc-graph-show-dumb):  Remove reference to unused variable found-pt.
+	(calc-graph-kill-hook, calc-graph-plot):  Remove reference to
+	calc-graph-prev-kill-hook.
 	(calc-graph-yvalue, calc-graph-yvec, calc-graph-numsteps)
 	(calc-graph-numsteps3, calc-graph-xvalue, calc-graph-xvec)
 	(calc-graph-xname, calc-graph-yname, calc-graph-xstep)
@@ -33,11 +562,11 @@
 	(calc-graph-y3step, calc-graph-y3step, calc-graph-zval)
 	(calc-graph-stepcount, calc-graph-is-splot)
 	(calc-graph-surprise-splot, calc-graph-blank)
-	(calc-graph-non-blank, calc-graph-curve-num):  New variables. 
+	(calc-graph-non-blank, calc-graph-curve-num):  New variables.
 	(calc-graph-plot, calc-graph-compute-2d, calc-graph-refine-2d)
 	(calc-graph-recompute-2d, calc-graph-compute-3d)
-	(calc-graph-format-data): Replaced undeclared variables with the
-	above newly declared variables. 
+	(calc-graph-format-data): Replace undeclared variables with the
+	above newly declared variables.
 
 2004-11-12  Diane Murray  <dsm@muenster.de>  (tiny change)
 
@@ -160,12 +689,12 @@
 	(math-read-exprs, math-read-token, math-read-expr-level)
 	(calc-check-user-syntax, calc-match-user-syntax)
 	(match-factor-after, math-read-factor):  Use declared variable
-	math-exp-token. 
+	math-exp-token.
 	(math-read-exprs, math-read-expr-list, math-read-token)
 	(math-read-factor):  Use declared variable math-exp-keep-spaces.
 	(math-read-exprs, math-read-token):  Use declared variable
 	math-exp-str.
-	(calc-match-user-syntax):  Made m a local variable.
+	(calc-match-user-syntax):  Make m a local variable.
 
 	* calc/calc-ext.el (math-read-expr):  Use declared variables
 	math-exp-pos, math-exp-old-pos, math-exp-str, math-exp-token,
@@ -175,7 +704,7 @@
 	variables math-exp-pos, math-exp-str.
 
 	* calc/calc-lang.el (math-parse-tex-sum):  Use declared variable
-	math-exp-old-pos. 
+	math-exp-old-pos.
 	(math-parse-fortran-vector, math-parse-fortran-vector-end)
 	(math-parse-eqn-prime):  Use declared variable math-exp-token.
 
@@ -189,6 +718,10 @@
 
 2004-11-10  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* emacs-lisp/easymenu.el (easy-menu-define-key): Understand the case
+	where the keymap is a symbol.
+	(easy-menu-add-item): Use keymap-prompt.  Simplify.
+
 	* files.el (magic-mode-alist): Reduce backtracking in the HTML regexp.
 
 	* textmodes/sgml-mode.el (sgml-tag-text-p): New fun.
--- a/lisp/ChangeLog.10	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/ChangeLog.10	Mon Nov 22 11:06:39 2004 +0000
@@ -4245,9 +4245,9 @@
 	before translation thru function-key-map, and use that for unreading.
 
 	* shadowfile.el (shadow-parse-fullname):
-	Renamed from shadow-parse-fullpath.
-	(shadow-parse-name): Renamed from shadow-parse-path.
-	(shadow-make-fullname): Renamed from shadow-make-fullpath.
+	Rename from shadow-parse-fullpath.
+	(shadow-parse-name): Rename from shadow-parse-path.
+	(shadow-make-fullname): Rename from shadow-make-fullpath.
 	(shadow-replace-name-component): Was shadow-replace-path-component.
 	Callers of the above functions changed.
 	(shadow-expand-cluster-in-file-name): Doc fix.
@@ -14522,7 +14522,7 @@
 
 2002-05-25  Martin Stjernholm  <bug-cc-mode@gnu.org>
 
-	* progmodes/cc-engine.el (c-add-stmt-syntax): Fixed some cases
+	* progmodes/cc-engine.el (c-add-stmt-syntax): Fix some cases
 	of wrong anchoring, e.g. for else-if compounds.
 
 2002-05-25  Miles Bader  <miles@gnu.org>
@@ -14651,13 +14651,13 @@
 	* loadup.el: Add font-core.el.
 
 	* replace.el (occur-mode-hook): New variable.
-	(occur-fontify-region-function): Deleted.
+	(occur-fontify-region-function): Delete.
 	(occur-mode): Don't use it.  Set up `font-lock-category-alist'
 	instead.
-	(occur-fontify-on-property): Deleted.
+	(occur-fontify-on-property): Delete.
 	(occur-engine): Use categories from `font-lock-category-alist'.
 
-	* info.el (Info-fontify): Deleted.
+	* info.el (Info-fontify): Delete.
 	(Info-select-node): Don't use it.
 	(Info-mode-hook): New variable.
 	(Info-mode): Set up categories.
@@ -14855,7 +14855,7 @@
 
 2002-05-16  Colin Walters  <walters@debian.org>
 
-	* menu-bar.el (menu-bar-tools-menu) <calculator>: Renamed to
+	* menu-bar.el (menu-bar-tools-menu) <calculator>: Rename to
 	"Simple Calculator".
 	(menu-bar-tools-menu) <calc>: New.
 
@@ -14897,9 +14897,9 @@
 	Don't highlight empty lines in rectangles.
 
 	* emulation/keypad.el: Improved commentary.
-	(keypad-setup, keypad-shifted-setup): Added choice to setup
+	(keypad-setup, keypad-shifted-setup): Add choice to setup
 	Numeric keypad with decimal key; value is selected character.
-	(keypad-decimal-key, keypad-shifted-decimal-key): Removed options.
+	(keypad-decimal-key, keypad-shifted-decimal-key): Remove options.
 	(keypad-numlock-setup, keypad-numlock-shifted-setup): New options.
 	(keypad-setup): Arg list changed to support the new options.
 
@@ -15035,7 +15035,7 @@
 2002-05-10  Kim F. Storm  <storm@cua.dk>
 
 	* emulation/cua-base.el (cua-enable-cua-keys)
-	(cua-enable-register-prefix): Added value for `other' choice.
+	(cua-enable-register-prefix): Add value for `other' choice.
 
 2002-05-10  Eli Zaretskii  <eliz@is.elta.co.il>
 
@@ -15133,7 +15133,7 @@
 
 2002-05-08  Simon Marshall  <simon@gnu.org>
 
-	* msb.el (msb-menu-bar-update-buffers): Fixed frame menu to use
+	* msb.el (msb-menu-bar-update-buffers): Fix frame menu to use
 	the frame name as the car of a menu entry, rather than the frame.
 
 2002-05-08  Juanma Barranquero  <lektu@terra.es>
@@ -15222,7 +15222,7 @@
 	Handle both cases: when the menu item has cached info
 	and when it doesn't.
 
-	* filesets.el (filesets-browse-dir-function): Renamed from ...-fn.
+	* filesets.el (filesets-browse-dir-function): Rename from ...-fn.
 	(filesets-open-file-function, filesets-save-buffer-function): Likewise.
 	(filesets-tree-max-level): Doc fix.
 	(filesets-commands, filesets-external-viewers)
@@ -15243,13 +15243,13 @@
 	"Default" group earlier.  Push killed group on
 	`ibuffer-filter-group-kill-ring'.
 	(ibuffer-kill-line): Document.  Don't push killed group ourselves.
-	(ibuffer-yank-filter-group): Renamed from `ibuffer-yank'.
+	(ibuffer-yank-filter-group): Rename from `ibuffer-yank'.
 	(ibuffer-insert-filter-group-before): New function, broken out
 	from `ibuffer-yank'.
 	(ibuffer-yank): Now just call `ibuffer-yank-filter-group'.
 
 	* ibuffer.el (ibuffer-mode-operate-menu, ibuffer-mode-mark-menu)
-	(ibuffer-mode-view-menu): Unused variables; deleted.
+	(ibuffer-mode-view-menu): Unused variables; delete.
 	(ibuffer-find-file): Pass wildcard flag to `find-file' correctly.
 
 2002-05-04  John Paul Wallington  <jpw@shootybangbang.com>
@@ -15271,7 +15271,7 @@
 	(mouse-wheel-scroll-screen): Remove.
 	([mouse-wheel], [C-mouse-wheel], [S-mouse-wheel]): Use mwheel-scroll.
 
-	* w32-vars.el: (mouse-wheel-scroll-amount): Removed.
+	* w32-vars.el: (mouse-wheel-scroll-amount): Remove.
 
 2002-05-04  Markus Rost  <rost@math.ohio-state.edu>
 
@@ -15328,13 +15328,12 @@
 
 2002-05-02  Kim F. Storm  <storm@cua.dk>
 
-	* menu-bar.el (menu-bar-make-toggle): Added optional PROPS arg.
-	(menu-bar-options-save): Added cua-mode.
-	(menu-bar-options-menu): Added toggle for cua-mode.
+	* menu-bar.el (menu-bar-make-toggle): Add optional PROPS arg.
+	(menu-bar-options-save): Add cua-mode.
+	(menu-bar-options-menu): Add toggle for cua-mode.
 	Disable toggle for transient-mark-mode if cua-mode is enabled.
 
-	* emulation/cua-base.el (cua-inhibit-cua-keys): New buffer-local
-	variable.
+	* emulation/cua-base.el (cua-inhibit-cua-keys): New buffer-local var.
 
 2002-05-01  Richard M. Stallman  <rms@gnu.org>
 
@@ -15371,7 +15370,7 @@
 
 	* emulation/cua-base.el (cua--pre-command-handler):
 	Only interpret delete-selection property if mark-active.
-	(cua-mode): Fixed require in defcustom.
+	(cua-mode): Fix require in defcustom.
 
 2002-05-01  Pavel Jan,Am(Bk  <Pavel@Janik.cz>
 
@@ -15387,7 +15386,7 @@
 
 2002-04-30  John Wiegley  <johnw@gnu.org>
 
-	* align.el (align-region): Fixed the fix to align-region, because
+	* align.el (align-region): Fix the fix to align-region, because
 	the "name" argument was appearing twice.
 
 2002-05-01  Martin Stjernholm  <bug-cc-mode@gnu.org>
@@ -15423,7 +15422,7 @@
 
 	* autoinsert.el (auto-insert-directory): Doc fix.
 
-	* facemenu.el (describe-text-at and stuff): Moved to descr-text.el.
+	* facemenu.el (describe-text-at and stuff): Move to descr-text.el.
 
 	* descr-text.el: New file, broken out of facemenu.el.
 
@@ -15442,10 +15441,10 @@
 	if the user edits the Emacs version number in the text.
 
 	* filesets.el (filesets-running-xemacs): Make defvar unconditional.
-	(filesets-ingroup-files): Renamed from filesets-ingroup-paths.
+	(filesets-ingroup-files): Rename from filesets-ingroup-paths.
 	(filesets-error): Simplify definition and make conditional
 	on filesets-running-xemacs.
-	(filesets-find-file-using): Renamed from fsfind-file-using.
+	(filesets-find-file-using): Rename from fsfind-file-using.
 
 2002-04-29  Stefan Monnier  <monnier@cs.yale.edu>
 
@@ -15583,10 +15582,10 @@
 
 2002-04-27  Richard M. Stallman  <rms@gnu.org>
 
-	* custom.el (custom-load-symbol): Moved from cus-edit.el.
+	* custom.el (custom-load-symbol): Move from cus-edit.el.
 	(custom-load-recursion): Likewise.
 
-	* cus-edit.el (custom-load-symbol): Moved to custom.el.
+	* cus-edit.el (custom-load-symbol): Move to custom.el.
 	(custom-load-recursion): Likewise.
 
 	* progmodes/ada-xref.el (ada-add-ada-menu): Menu pseudo-keys
@@ -15689,21 +15688,21 @@
 	(occur-engine): Go to `point-min'.  Make nlines argument actually
 	mean number of context lines.  Handle it.  Pad digits to the right.
 
-	* ibuf-ext.el (ibuffer-filtering-groups): Renamed to
-	`ibuffer-filter-groups'.  All users updated.
+	* ibuf-ext.el (ibuffer-filtering-groups): Rename to
+	`ibuffer-filter-groups'.  Update all users.
 	(ibuffer-show-empty-filter-groups): New variable.
 	(ibuffer-saved-filter-groups): New variable.
-	(ibuffer-maybe-save-stuff): Renamed from
-	`ibuffer-maybe-save-saved-filters'.  Callers updated.
+	(ibuffer-maybe-save-stuff): Rename from
+	`ibuffer-maybe-save-saved-filters'.  Update callers.
 	Handle `ibuffer-saved-filter-groups'.
-	(ibuffer-hidden-filtering-groups): Renamed to
+	(ibuffer-hidden-filtering-groups): Rename to
 	`ibuffer-hidden-filter-groups'.
 	(ibuffer-filter-group-kill-ring): New variable.
 	(ibuffer-save-with-custom): Doc fix.
 	(ibuffer-set-filter-groups-by-mode): New function.
 	(ibuffer-clear-filter-groups): New function.
-	(ibuffer-current-filter-groups-with-position): Renamed from
-	`ibuffer-current-filter-groups'.  Callers updated.
+	(ibuffer-current-filter-groups-with-position): Rename from
+	`ibuffer-current-filter-groups'.  Update callers.
 	(ibuffer-kill-filter-group): New function.
 	(ibuffer-kill-line): New function.
 	(ibuffer-yank): New function.
@@ -15723,7 +15722,7 @@
 	(ibuffer-mark-forward, ibuffer-unmark-forward)
 	(ibuffer-mark-for-delete, ibuffer-unmark-backward)
 	(ibuffer-mark-for-delete-backwards): Update docs.
-	(ibuffer-current-filter-groups): Moved to ibuf-ext.el, and renamed
+	(ibuffer-current-filter-groups): Move to ibuf-ext.el, and renamed
 	to `ibuffer-current-filter-groups-with-position'.
 	(ibuffer-redisplay-engine): Handle `ibuffer-show-empty-filter-groups'.
 	(ibuffer-mode): Add some documentation about filter groups.
@@ -15745,22 +15744,21 @@
 
 2002-04-25  Glenn Morris  <gmorris@ast.cam.ac.uk>
 
-	* progmodes/f90.el: General tidy-up of commentary and some doc
-	strings.
+	* progmodes/f90.el: General tidy-up of commentary and some doc strings.
 
 2002-04-24  Glenn Morris  <gmorris@ast.cam.ac.uk>
 
 	* scroll-all.el (scroll-all-function-all) New function to do the
 	actual work.
-	(scroll-all-scroll-down-all, scroll-all-scroll-up-all,
-	scroll-all-page-down-all, scroll-all-page-up-all,
-	scroll-all-beginning-of-buffer-all, scroll-all-end-of-buffer-all):
+	(scroll-all-scroll-down-all, scroll-all-scroll-up-all)
+	(scroll-all-page-down-all, scroll-all-page-up-all)
+	(scroll-all-beginning-of-buffer-all, scroll-all-end-of-buffer-all):
 	Make them use scroll-all-function-all.
 
-	* progmodes/f90.el (f90-get-beg-of-line): Removed and replaced
+	* progmodes/f90.el (f90-get-beg-of-line): Remove and replace
 	with line-beginning-position.
-	(f90-get-end-of-line): Removed and replaced with line-end-position.
-	(f90-match-piece): Removed and replaced with match-string.
+	(f90-get-end-of-line): Remove and replace with line-end-position.
+	(f90-match-piece): Remove and replace with match-string.
 	(f90-current-indentation): Remove `current-column'.
 	(f90-get-present-comment-type): Use match-string rather than
 	buffer-substring.
@@ -15813,7 +15811,7 @@
 	(ibuffer-sort-bufferlist): New function, taken from
 	`ibuffer-insert-buffers-and-marks'.
 	(ibuffer-insert-filter-group): New function.
-	(ibuffer-redisplay-engine): Renamed from
+	(ibuffer-redisplay-engine): Rename from
 	`ibuffer-insert-buffers-and-marks'.  Handle new filtering groups.
 	(ibuffer): Add filter-groups argument.  Handle it.
 	Use `save-selected-window'.
--- a/lisp/autoinsert.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/autoinsert.el	Mon Nov 22 11:06:39 2004 +0000
@@ -167,7 +167,7 @@
      ";;; " (file-name-nondirectory (buffer-file-name)) " --- " str "
 
 ;; Copyright (C) " (substring (current-time-string) -4) "  "
- (getenv "ORGANIZATION") | "Free Software Foundation, Inc." "
+ (getenv "ORGANIZATION") | (progn user-full-name) "
 
 ;; Author: " (user-full-name)
 '(if (search-backward "&" (line-beginning-position) t)
--- a/lisp/bindings.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/bindings.el	Mon Nov 22 11:06:39 2004 +0000
@@ -701,6 +701,7 @@
 (define-key global-map "\C-n" 'next-line)
 (define-key global-map "\C-p" 'previous-line)
 (define-key ctl-x-map "\C-n" 'set-goal-column)
+(define-key global-map "\C-e" 'move-end-of-line)
 
 ;;(defun function-key-error ()
 ;;  (interactive)
--- a/lisp/buff-menu.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/buff-menu.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1,7 +1,7 @@
 ;;; buff-menu.el --- buffer menu main function and support functions
 
-;; Copyright (C) 1985, 86, 87, 93, 94, 95, 2000, 2001, 2002, 03, 2004
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 2000, 2001, 2002, 2003,
+;;   2004  Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: convenience
@@ -632,24 +632,27 @@
 			       (Buffer-menu-sort ,column))))
 			map)))
 
-(defun list-buffers-noselect (&optional files-only)
+(defun list-buffers-noselect (&optional files-only buffer-list)
   "Create and return a buffer with a list of names of existing buffers.
 The buffer is named `*Buffer List*'.
 Note that buffers with names starting with spaces are omitted.
 Non-null optional arg FILES-ONLY means mention only file buffers.
 
+If BUFFER-LIST is non-nil, it should be a list of buffers;
+it means list those buffers and no others.
+
 For more information, see the function `buffer-menu'."
   (let* ((old-buffer (current-buffer))
 	 (standard-output standard-output)
 	 (mode-end (make-string (- Buffer-menu-mode-width 2) ? ))
-	 (header (concat " " (propertize "CRM " 'face 'fixed-pitch)
+	 (header (concat (propertize "CRM " 'face 'fixed-pitch)
 			 (Buffer-menu-buffer+size
 			  (Buffer-menu-make-sort-button "Buffer" 2)
 			  (Buffer-menu-make-sort-button "Size" 3))
 			 "  "
 			 (Buffer-menu-make-sort-button "Mode" 4) mode-end
 			 (Buffer-menu-make-sort-button "File" 5) "\n"))
-	 list desired-point name mode file)
+	 list desired-point)
     (when Buffer-menu-use-header-line
       (let ((pos 0))
 	;; Turn spaces in the header into stretch specs so they work
@@ -658,7 +661,7 @@
 	  (setq pos (match-end 0))
 	  (put-text-property (match-beginning 0) pos 'display
 			     ;; Assume fixed-size chars
-			     (list 'space :align-to (1- pos))
+			     (list 'space :align-to pos)
 			     header))))
     (with-current-buffer (get-buffer-create "*Buffer List*")
       (setq buffer-read-only nil)
@@ -667,45 +670,49 @@
       (unless Buffer-menu-use-header-line
 	(insert header (propertize "---" 'face 'fixed-pitch) " ")
 	(insert (Buffer-menu-buffer+size "------" "----"))
-	(insert "  ----" mode-end "----\n")
-	(put-text-property 1 (point) 'intangible t))
-      (setq list
-	    (delq t
-		  (mapcar
-		   (lambda (buffer)
-		     (with-current-buffer buffer
-		       (setq name (buffer-name)
-			     mode (concat (format-mode-line mode-name nil nil buffer)
-					  (if mode-line-process
-					      (format-mode-line mode-line-process nil nil buffer)))
-			     file (buffer-file-name))
-		       (cond
-			;; Don't mention internal buffers.
-			((and (string= (substring name 0 1) " ") (null file)))
-			;; Maybe don't mention buffers without files.
-			((and files-only (not file)))
-			((string= name "*Buffer List*"))
-			;; Otherwise output info.
-			(t
-			 (unless file
-			   ;; No visited file.  Check local value of
-			   ;; list-buffers-directory.
-			   (when (and (boundp 'list-buffers-directory)
-				      list-buffers-directory)
-			     (setq file list-buffers-directory)))
-			 (list buffer
-			       (format "%c%c%c "
-				       (if (eq buffer old-buffer) ?. ? )
-				       ;; Handle readonly status.  The output buffer is special
-				       ;; cased to appear readonly; it is actually made so at a
-				       ;; later date.
-				       (if (or (eq buffer standard-output)
-					       buffer-read-only)
-					   ?% ? )
-				       ;; Identify modified buffers.
-				       (if (buffer-modified-p) ?* ? ))
-			       name (buffer-size) mode file)))))
-		   (buffer-list))))
+	(insert "  ----" mode-end "----\n"))
+      (if buffer-list
+	  (setq list buffer-list)
+	;; Collect info for every buffer we're interested in.
+	(dolist (buffer (buffer-list))
+	  (with-current-buffer buffer
+	    (let ((name (buffer-name))
+		  (file buffer-file-name))
+	      (cond
+	       ;; Don't mention internal buffers.
+	       ((and (string= (substring name 0 1) " ") (null file)))
+	       ;; Maybe don't mention buffers without files.
+	       ((and files-only (not file)))
+	       ((string= name "*Buffer List*"))
+	       ;; Otherwise output info.
+	       (t
+		(let ((mode (concat (format-mode-line mode-name nil nil buffer)
+				    (if mode-line-process
+					(format-mode-line mode-line-process
+							  nil nil buffer))))
+		      (bits (string
+			     (if (eq buffer old-buffer) ?. ?\ )
+			     ;; Handle readonly status.  The output buffer
+			     ;; is special cased to appear readonly; it is
+			     ;; actually made so at a later date.
+			     (if (or (eq buffer standard-output)
+				     buffer-read-only)
+				 ?% ?\ )
+			     ;; Identify modified buffers.
+			     (if (buffer-modified-p) ?* ?\ )
+			     ;; Space separator.
+			     ?\ )))
+		  (unless file
+		    ;; No visited file.  Check local value of
+		    ;; list-buffers-directory.
+		    (when (and (boundp 'list-buffers-directory)
+			       list-buffers-directory)
+		      (setq file list-buffers-directory)))
+		  (push (list buffer bits name (buffer-size) mode file)
+			list)))))))
+	;; Preserve the original buffer-list ordering, just in case.
+	(setq list (nreverse list)))
+      ;; Place the buffers's info in the output buffer, sorted if necessary.
       (dolist (buffer
 	       (if Buffer-menu-sort-column
 		   (sort list
@@ -750,5 +757,5 @@
       (set-buffer-modified-p nil)
       (current-buffer))))
 
-;;; arch-tag: e7dfcfc9-6cb2-46e4-bf55-8ef1936d83c6
+;; arch-tag: e7dfcfc9-6cb2-46e4-bf55-8ef1936d83c6
 ;;; buff-menu.el ends here
--- a/lisp/calc/calc-alg.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/calc/calc-alg.el	Mon Nov 22 11:06:39 2004 +0000
@@ -3,8 +3,7 @@
 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
-;; Maintainers: D. Goel <deego@gnufans.org>
-;;              Colin Walters <walters@debian.org>
+;; Maintainer: Jay Belanger  <belanger@truman.edu>
 
 ;; This file is part of GNU Emacs.
 
@@ -121,19 +120,20 @@
   (calc-slow-wrapper
    (calc-binary-op "pgcd" 'calcFunc-pgcd arg)))
 
+
 (defun calc-poly-div (arg)
   (interactive "P")
   (calc-slow-wrapper
-   (setq calc-poly-div-remainder nil)
-   (calc-binary-op "pdiv" 'calcFunc-pdiv arg)
-   (if (and calc-poly-div-remainder (null arg))
-       (progn
-	 (calc-clear-command-flag 'clear-message)
-	 (calc-record calc-poly-div-remainder "prem")
-	 (if (not (Math-zerop calc-poly-div-remainder))
-	     (message "(Remainder was %s)"
-		      (math-format-flat-expr calc-poly-div-remainder 0))
-	   (message "(No remainder)"))))))
+   (let ((calc-poly-div-remainder nil))
+     (calc-binary-op "pdiv" 'calcFunc-pdiv arg)
+     (if (and calc-poly-div-remainder (null arg))
+         (progn
+           (calc-clear-command-flag 'clear-message)
+           (calc-record calc-poly-div-remainder "prem")
+           (if (not (Math-zerop calc-poly-div-remainder))
+               (message "(Remainder was %s)"
+                        (math-format-flat-expr calc-poly-div-remainder 0))
+             (message "(No remainder)")))))))
 
 (defun calc-poly-rem (arg)
   (interactive "P")
@@ -184,6 +184,11 @@
        (memq (car name) '(vec calcFunc-assign calcFunc-condition))
        name))
 
+;; math-eval-rules-cache and math-eval-rules-cache-other are
+;; declared in calc.el, but are used here by math-recompile-eval-rules.
+(defvar math-eval-rules-cache)
+(defvar math-eval-rules-cache-other)
+
 (defun math-recompile-eval-rules ()
   (setq math-eval-rules-cache (and (calc-has-rules 'var-EvalRules)
 				   (math-compile-rewrites
@@ -266,9 +271,13 @@
 
 (defalias 'calcFunc-esimplify 'math-simplify-extended)
 
+;; math-top-only is local to math-simplify, but is used by 
+;; math-simplify-step, which is called by math-simplify.
+(defvar math-top-only)
+
 (defun math-simplify (top-expr)
   (let ((math-simplifying t)
-	(top-only (consp calc-simplify-mode))
+	(math-top-only (consp calc-simplify-mode))
 	(simp-rules (append (and (calc-has-rules 'var-AlgSimpRules)
 				 '((var AlgSimpRules var-AlgSimpRules)))
 			    (and math-living-dangerously
@@ -281,7 +290,7 @@
 				 (calc-has-rules 'var-IntegSimpRules)
 				 '((var IntegSimpRules var-IntegSimpRules)))))
 	res)
-    (if top-only
+    (if math-top-only
 	(let ((r simp-rules))
 	  (setq res (math-simplify-step (math-normalize top-expr))
 		calc-simplify-mode '(nil)
@@ -308,7 +317,7 @@
 (defun math-simplify-step (a)
   (if (Math-primp a)
       a
-    (let ((aa (if (or top-only
+    (let ((aa (if (or math-top-only
 		      (memq (car a) '(calcFunc-quote calcFunc-condition
 						     calcFunc-evalto)))
 		  a
@@ -328,152 +337,173 @@
 (defun math-need-std-simps ()
   nil)
 
+;; The function created by math-defsimplify uses the variable
+;; math-simplify-expr, and so is used by functions in math-defsimplify
+(defvar math-simplify-expr)
+
 (math-defsimplify (+ -)
   (math-simplify-plus))
 
 (defun math-simplify-plus ()
-  (cond ((and (memq (car-safe (nth 1 expr)) '(+ -))
-	      (Math-numberp (nth 2 (nth 1 expr)))
-	      (not (Math-numberp (nth 2 expr))))
-	 (let ((x (nth 2 expr))
-	       (op (car expr)))
-	   (setcar (cdr (cdr expr)) (nth 2 (nth 1 expr)))
-	   (setcar expr (car (nth 1 expr)))
-	   (setcar (cdr (cdr (nth 1 expr))) x)
-	   (setcar (nth 1 expr) op)))
-	((and (eq (car expr) '+)
-	      (Math-numberp (nth 1 expr))
-	      (not (Math-numberp (nth 2 expr))))
-	 (let ((x (nth 2 expr)))
-	   (setcar (cdr (cdr expr)) (nth 1 expr))
-	   (setcar (cdr expr) x))))
-  (let ((aa expr)
+  (cond ((and (memq (car-safe (nth 1 math-simplify-expr)) '(+ -))
+	      (Math-numberp (nth 2 (nth 1 math-simplify-expr)))
+	      (not (Math-numberp (nth 2 math-simplify-expr))))
+	 (let ((x (nth 2 math-simplify-expr))
+	       (op (car math-simplify-expr)))
+	   (setcar (cdr (cdr math-simplify-expr)) (nth 2 (nth 1 math-simplify-expr)))
+	   (setcar math-simplify-expr (car (nth 1 math-simplify-expr)))
+	   (setcar (cdr (cdr (nth 1 math-simplify-expr))) x)
+	   (setcar (nth 1 math-simplify-expr) op)))
+	((and (eq (car math-simplify-expr) '+)
+	      (Math-numberp (nth 1 math-simplify-expr))
+	      (not (Math-numberp (nth 2 math-simplify-expr))))
+	 (let ((x (nth 2 math-simplify-expr)))
+	   (setcar (cdr (cdr math-simplify-expr)) (nth 1 math-simplify-expr))
+	   (setcar (cdr math-simplify-expr) x))))
+  (let ((aa math-simplify-expr)
 	aaa temp)
     (while (memq (car-safe (setq aaa (nth 1 aa))) '(+ -))
-      (if (setq temp (math-combine-sum (nth 2 aaa) (nth 2 expr)
-				       (eq (car aaa) '-) (eq (car expr) '-) t))
+      (if (setq temp (math-combine-sum (nth 2 aaa) (nth 2 math-simplify-expr)
+				       (eq (car aaa) '-) 
+                                       (eq (car math-simplify-expr) '-) t))
 	  (progn
-	    (setcar (cdr (cdr expr)) temp)
-	    (setcar expr '+)
+	    (setcar (cdr (cdr math-simplify-expr)) temp)
+	    (setcar math-simplify-expr '+)
 	    (setcar (cdr (cdr aaa)) 0)))
       (setq aa (nth 1 aa)))
-    (if (setq temp (math-combine-sum aaa (nth 2 expr)
-				     nil (eq (car expr) '-) t))
+    (if (setq temp (math-combine-sum aaa (nth 2 math-simplify-expr)
+				     nil (eq (car math-simplify-expr) '-) t))
 	(progn
-	  (setcar (cdr (cdr expr)) temp)
-	  (setcar expr '+)
+	  (setcar (cdr (cdr math-simplify-expr)) temp)
+	  (setcar math-simplify-expr '+)
 	  (setcar (cdr aa) 0)))
-    expr))
+    math-simplify-expr))
 
 (math-defsimplify *
   (math-simplify-times))
 
 (defun math-simplify-times ()
-  (if (eq (car-safe (nth 2 expr)) '*)
-      (and (math-beforep (nth 1 (nth 2 expr)) (nth 1 expr))
-	   (or (math-known-scalarp (nth 1 expr) t)
-	       (math-known-scalarp (nth 1 (nth 2 expr)) t))
-	   (let ((x (nth 1 expr)))
-	     (setcar (cdr expr) (nth 1 (nth 2 expr)))
-	     (setcar (cdr (nth 2 expr)) x)))
-    (and (math-beforep (nth 2 expr) (nth 1 expr))
-	 (or (math-known-scalarp (nth 1 expr) t)
-	     (math-known-scalarp (nth 2 expr) t))
-	 (let ((x (nth 2 expr)))
-	   (setcar (cdr (cdr expr)) (nth 1 expr))
-	   (setcar (cdr expr) x))))
-  (let ((aa expr)
+  (if (eq (car-safe (nth 2 math-simplify-expr)) '*)
+      (and (math-beforep (nth 1 (nth 2 math-simplify-expr)) (nth 1 math-simplify-expr))
+	   (or (math-known-scalarp (nth 1 math-simplify-expr) t)
+	       (math-known-scalarp (nth 1 (nth 2 math-simplify-expr)) t))
+	   (let ((x (nth 1 math-simplify-expr)))
+	     (setcar (cdr math-simplify-expr) (nth 1 (nth 2 math-simplify-expr)))
+	     (setcar (cdr (nth 2 math-simplify-expr)) x)))
+    (and (math-beforep (nth 2 math-simplify-expr) (nth 1 math-simplify-expr))
+	 (or (math-known-scalarp (nth 1 math-simplify-expr) t)
+	     (math-known-scalarp (nth 2 math-simplify-expr) t))
+	 (let ((x (nth 2 math-simplify-expr)))
+	   (setcar (cdr (cdr math-simplify-expr)) (nth 1 math-simplify-expr))
+	   (setcar (cdr math-simplify-expr) x))))
+  (let ((aa math-simplify-expr)
 	aaa temp
-	(safe t) (scalar (math-known-scalarp (nth 1 expr))))
-    (if (and (Math-ratp (nth 1 expr))
-	     (setq temp (math-common-constant-factor (nth 2 expr))))
+	(safe t) (scalar (math-known-scalarp (nth 1 math-simplify-expr))))
+    (if (and (Math-ratp (nth 1 math-simplify-expr))
+	     (setq temp (math-common-constant-factor (nth 2 math-simplify-expr))))
 	(progn
-	  (setcar (cdr (cdr expr))
-		  (math-cancel-common-factor (nth 2 expr) temp))
-	  (setcar (cdr expr) (math-mul (nth 1 expr) temp))))
+	  (setcar (cdr (cdr math-simplify-expr))
+		  (math-cancel-common-factor (nth 2 math-simplify-expr) temp))
+	  (setcar (cdr math-simplify-expr) (math-mul (nth 1 math-simplify-expr) temp))))
     (while (and (eq (car-safe (setq aaa (nth 2 aa))) '*)
 		safe)
-      (if (setq temp (math-combine-prod (nth 1 expr) (nth 1 aaa) nil nil t))
+      (if (setq temp (math-combine-prod (nth 1 math-simplify-expr) 
+                                        (nth 1 aaa) nil nil t))
 	  (progn
-	    (setcar (cdr expr) temp)
+	    (setcar (cdr math-simplify-expr) temp)
 	    (setcar (cdr aaa) 1)))
       (setq safe (or scalar (math-known-scalarp (nth 1 aaa) t))
 	    aa (nth 2 aa)))
-    (if (and (setq temp (math-combine-prod aaa (nth 1 expr) nil nil t))
+    (if (and (setq temp (math-combine-prod aaa (nth 1 math-simplify-expr) nil nil t))
 	     safe)
 	(progn
-	  (setcar (cdr expr) temp)
+	  (setcar (cdr math-simplify-expr) temp)
 	  (setcar (cdr (cdr aa)) 1)))
-    (if (and (eq (car-safe (nth 1 expr)) 'frac)
-	     (memq (nth 1 (nth 1 expr)) '(1 -1)))
-	(math-div (math-mul (nth 2 expr) (nth 1 (nth 1 expr)))
-		  (nth 2 (nth 1 expr)))
-      expr)))
+    (if (and (eq (car-safe (nth 1 math-simplify-expr)) 'frac)
+	     (memq (nth 1 (nth 1 math-simplify-expr)) '(1 -1)))
+	(math-div (math-mul (nth 2 math-simplify-expr) 
+                            (nth 1 (nth 1 math-simplify-expr)))
+		  (nth 2 (nth 1 math-simplify-expr)))
+      math-simplify-expr)))
 
 (math-defsimplify /
   (math-simplify-divide))
 
 (defun math-simplify-divide ()
-  (let ((np (cdr expr))
+  (let ((np (cdr math-simplify-expr))
 	(nover nil)
-	(nn (and (or (eq (car expr) '/) (not (Math-realp (nth 2 expr))))
-		 (math-common-constant-factor (nth 2 expr))))
+	(nn (and (or (eq (car math-simplify-expr) '/) 
+                     (not (Math-realp (nth 2 math-simplify-expr))))
+		 (math-common-constant-factor (nth 2 math-simplify-expr))))
 	n op)
     (if nn
 	(progn
-	  (setq n (and (or (eq (car expr) '/) (not (Math-realp (nth 1 expr))))
-		       (math-common-constant-factor (nth 1 expr))))
+	  (setq n (and (or (eq (car math-simplify-expr) '/) 
+                           (not (Math-realp (nth 1 math-simplify-expr))))
+		       (math-common-constant-factor (nth 1 math-simplify-expr))))
 	  (if (and (eq (car-safe nn) 'frac) (eq (nth 1 nn) 1) (not n))
 	      (progn
-		(setcar (cdr expr) (math-mul (nth 2 nn) (nth 1 expr)))
-		(setcar (cdr (cdr expr))
-			(math-cancel-common-factor (nth 2 expr) nn))
+		(setcar (cdr math-simplify-expr) 
+                        (math-mul (nth 2 nn) (nth 1 math-simplify-expr)))
+		(setcar (cdr (cdr math-simplify-expr))
+			(math-cancel-common-factor (nth 2 math-simplify-expr) nn))
 		(if (and (math-negp nn)
-			 (setq op (assq (car expr) calc-tweak-eqn-table)))
-		    (setcar expr (nth 1 op))))
+			 (setq op (assq (car math-simplify-expr) calc-tweak-eqn-table)))
+		    (setcar math-simplify-expr (nth 1 op))))
 	    (if (and n (not (eq (setq n (math-frac-gcd n nn)) 1)))
 		(progn
-		  (setcar (cdr expr)
-			  (math-cancel-common-factor (nth 1 expr) n))
-		  (setcar (cdr (cdr expr))
-			  (math-cancel-common-factor (nth 2 expr) n))
+		  (setcar (cdr math-simplify-expr)
+			  (math-cancel-common-factor (nth 1 math-simplify-expr) n))
+		  (setcar (cdr (cdr math-simplify-expr))
+			  (math-cancel-common-factor (nth 2 math-simplify-expr) n))
 		  (if (and (math-negp n)
-			   (setq op (assq (car expr) calc-tweak-eqn-table)))
-		      (setcar expr (nth 1 op))))))))
+			   (setq op (assq (car math-simplify-expr) 
+                                          calc-tweak-eqn-table)))
+		      (setcar math-simplify-expr (nth 1 op))))))))
     (if (and (eq (car-safe (car np)) '/)
-	     (math-known-scalarp (nth 2 expr) t))
+	     (math-known-scalarp (nth 2 math-simplify-expr) t))
 	(progn
-	  (setq np (cdr (nth 1 expr)))
+	  (setq np (cdr (nth 1 math-simplify-expr)))
 	  (while (eq (car-safe (setq n (car np))) '*)
 	    (and (math-known-scalarp (nth 2 n) t)
-		 (math-simplify-divisor (cdr n) (cdr (cdr expr)) nil t))
+		 (math-simplify-divisor (cdr n) (cdr (cdr math-simplify-expr)) nil t))
 	    (setq np (cdr (cdr n))))
-	  (math-simplify-divisor np (cdr (cdr expr)) nil t)
+	  (math-simplify-divisor np (cdr (cdr math-simplify-expr)) nil t)
 	  (setq nover t
-		np (cdr (cdr (nth 1 expr))))))
+		np (cdr (cdr (nth 1 math-simplify-expr))))))
     (while (eq (car-safe (setq n (car np))) '*)
       (and (math-known-scalarp (nth 2 n) t)
-	   (math-simplify-divisor (cdr n) (cdr (cdr expr)) nover t))
+	   (math-simplify-divisor (cdr n) (cdr (cdr math-simplify-expr)) nover t))
       (setq np (cdr (cdr n))))
-    (math-simplify-divisor np (cdr (cdr expr)) nover t)
-    expr))
+    (math-simplify-divisor np (cdr (cdr math-simplify-expr)) nover t)
+    math-simplify-expr))
 
-(defun math-simplify-divisor (np dp nover dover)
+;; The variables math-simplify-divisor-nover and math-simplify-divisor-dover
+;; are local variables for math-simplify-divisor, but are used by
+;; math-simplify-one-divisor.
+(defvar math-simplify-divisor-nover)
+(defvar math-simplify-divisor-dover)
+
+(defun math-simplify-divisor (np dp math-simplify-divisor-nover 
+                                 math-simplify-divisor-dover)
   (cond ((eq (car-safe (car dp)) '/)
-	 (math-simplify-divisor np (cdr (car dp)) nover dover)
+	 (math-simplify-divisor np (cdr (car dp)) 
+                                math-simplify-divisor-nover 
+                                math-simplify-divisor-dover)
 	 (and (math-known-scalarp (nth 1 (car dp)) t)
 	      (math-simplify-divisor np (cdr (cdr (car dp)))
-				     nover (not dover))))
-	((or (or (eq (car expr) '/)
+				     math-simplify-divisor-nover 
+                                     (not math-simplify-divisor-dover))))
+	((or (or (eq (car math-simplify-expr) '/)
 		 (let ((signs (math-possible-signs (car np))))
 		   (or (memq signs '(1 4))
-		       (and (memq (car expr) '(calcFunc-eq calcFunc-neq))
+		       (and (memq (car math-simplify-expr) '(calcFunc-eq calcFunc-neq))
 			    (eq signs 5))
 		       math-living-dangerously)))
 	     (math-numberp (car np)))
-	 (let ((n (car np))
-	       d dd temp op
-	       (safe t) (scalar (math-known-scalarp n)))
+	 (let (d
+               (safe t) 
+               (scalar (math-known-scalarp (car np))))
 	   (while (and (eq (car-safe (setq d (car dp))) '*)
 		       safe)
 	     (math-simplify-one-divisor np (cdr d))
@@ -483,21 +513,25 @@
 	       (math-simplify-one-divisor np dp))))))
 
 (defun math-simplify-one-divisor (np dp)
-  (if (setq temp (math-combine-prod (car np) (car dp) nover dover t))
-      (progn
-	(and (not (memq (car expr) '(/ calcFunc-eq calcFunc-neq)))
-	     (math-known-negp (car dp))
-	     (setq op (assq (car expr) calc-tweak-eqn-table))
-	     (setcar expr (nth 1 op)))
-	(setcar np (if nover (math-div 1 temp) temp))
-	(setcar dp 1))
-    (and dover (not nover) (eq (car expr) '/)
-	 (eq (car-safe (car dp)) 'calcFunc-sqrt)
-	 (Math-integerp (nth 1 (car dp)))
-	 (progn
-	   (setcar np (math-mul (car np)
-				(list 'calcFunc-sqrt (nth 1 (car dp)))))
-	   (setcar dp (nth 1 (car dp)))))))
+  (let ((temp (math-combine-prod (car np) (car dp) math-simplify-divisor-nover 
+                                 math-simplify-divisor-dover t))
+        op)
+    (if temp 
+        (progn
+          (and (not (memq (car math-simplify-expr) '(/ calcFunc-eq calcFunc-neq)))
+               (math-known-negp (car dp))
+               (setq op (assq (car math-simplify-expr) calc-tweak-eqn-table))
+               (setcar math-simplify-expr (nth 1 op)))
+          (setcar np (if math-simplify-divisor-nover (math-div 1 temp) temp))
+          (setcar dp 1))
+      (and math-simplify-divisor-dover (not math-simplify-divisor-nover) 
+           (eq (car math-simplify-expr) '/)
+           (eq (car-safe (car dp)) 'calcFunc-sqrt)
+           (Math-integerp (nth 1 (car dp)))
+           (progn
+             (setcar np (math-mul (car np)
+                                  (list 'calcFunc-sqrt (nth 1 (car dp)))))
+             (setcar dp (nth 1 (car dp))))))))
 
 (defun math-common-constant-factor (expr)
   (if (Math-realp expr)
@@ -546,23 +580,23 @@
   (math-simplify-mod))
 
 (defun math-simplify-mod ()
-  (and (Math-realp (nth 2 expr))
-       (Math-posp (nth 2 expr))
-       (let ((lin (math-is-linear (nth 1 expr)))
+  (and (Math-realp (nth 2 math-simplify-expr))
+       (Math-posp (nth 2 math-simplify-expr))
+       (let ((lin (math-is-linear (nth 1 math-simplify-expr)))
 	     t1 t2 t3)
 	 (or (and lin
 		  (or (math-negp (car lin))
-		      (not (Math-lessp (car lin) (nth 2 expr))))
+		      (not (Math-lessp (car lin) (nth 2 math-simplify-expr))))
 		  (list '%
 			(list '+
 			      (math-mul (nth 1 lin) (nth 2 lin))
-			      (math-mod (car lin) (nth 2 expr)))
-			(nth 2 expr)))
+			      (math-mod (car lin) (nth 2 math-simplify-expr)))
+			(nth 2 math-simplify-expr)))
 	     (and lin
 		  (not (math-equal-int (nth 1 lin) 1))
 		  (math-num-integerp (nth 1 lin))
-		  (math-num-integerp (nth 2 expr))
-		  (setq t1 (calcFunc-gcd (nth 1 lin) (nth 2 expr)))
+		  (math-num-integerp (nth 2 math-simplify-expr))
+		  (setq t1 (calcFunc-gcd (nth 1 lin) (nth 2 math-simplify-expr)))
 		  (not (math-equal-int t1 1))
 		  (list '*
 			t1
@@ -572,47 +606,48 @@
 					      (nth 2 lin))
 				    (let ((calc-prefer-frac t))
 				      (math-div (car lin) t1)))
-			      (math-div (nth 2 expr) t1))))
-	     (and (math-equal-int (nth 2 expr) 1)
+			      (math-div (nth 2 math-simplify-expr) t1))))
+	     (and (math-equal-int (nth 2 math-simplify-expr) 1)
 		  (math-known-integerp (if lin
 					   (math-mul (nth 1 lin) (nth 2 lin))
-					 (nth 1 expr)))
+					 (nth 1 math-simplify-expr)))
 		  (if lin (math-mod (car lin) 1) 0))))))
 
 (math-defsimplify (calcFunc-eq calcFunc-neq calcFunc-lt
 			       calcFunc-gt calcFunc-leq calcFunc-geq)
-  (if (= (length expr) 3)
+  (if (= (length math-simplify-expr) 3)
       (math-simplify-ineq)))
 
 (defun math-simplify-ineq ()
-  (let ((np (cdr expr))
+  (let ((np (cdr math-simplify-expr))
 	n)
     (while (memq (car-safe (setq n (car np))) '(+ -))
-      (math-simplify-add-term (cdr (cdr n)) (cdr (cdr expr))
+      (math-simplify-add-term (cdr (cdr n)) (cdr (cdr math-simplify-expr))
 			      (eq (car n) '-) nil)
       (setq np (cdr n)))
-    (math-simplify-add-term np (cdr (cdr expr)) nil (eq np (cdr expr)))
+    (math-simplify-add-term np (cdr (cdr math-simplify-expr)) nil 
+                            (eq np (cdr math-simplify-expr)))
     (math-simplify-divide)
-    (let ((signs (math-possible-signs (cons '- (cdr expr)))))
-      (or (cond ((eq (car expr) 'calcFunc-eq)
+    (let ((signs (math-possible-signs (cons '- (cdr math-simplify-expr)))))
+      (or (cond ((eq (car math-simplify-expr) 'calcFunc-eq)
 		 (or (and (eq signs 2) 1)
 		     (and (memq signs '(1 4 5)) 0)))
-		((eq (car expr) 'calcFunc-neq)
+		((eq (car math-simplify-expr) 'calcFunc-neq)
 		 (or (and (eq signs 2) 0)
 		     (and (memq signs '(1 4 5)) 1)))
-		((eq (car expr) 'calcFunc-lt)
+		((eq (car math-simplify-expr) 'calcFunc-lt)
 		 (or (and (eq signs 1) 1)
 		     (and (memq signs '(2 4 6)) 0)))
-		((eq (car expr) 'calcFunc-gt)
+		((eq (car math-simplify-expr) 'calcFunc-gt)
 		 (or (and (eq signs 4) 1)
 		     (and (memq signs '(1 2 3)) 0)))
-		((eq (car expr) 'calcFunc-leq)
+		((eq (car math-simplify-expr) 'calcFunc-leq)
 		 (or (and (eq signs 4) 0)
 		     (and (memq signs '(1 2 3)) 1)))
-		((eq (car expr) 'calcFunc-geq)
+		((eq (car math-simplify-expr) 'calcFunc-geq)
 		 (or (and (eq signs 1) 0)
 		     (and (memq signs '(2 4 6)) 1))))
-	  expr))))
+	  math-simplify-expr))))
 
 (defun math-simplify-add-term (np dp minus lplain)
   (or (math-vectorp (car np))
@@ -644,25 +679,27 @@
 		(setcar dp (setq n (math-neg temp)))))))))
 
 (math-defsimplify calcFunc-sin
-  (or (and (eq (car-safe (nth 1 expr)) 'calcFunc-arcsin)
-	   (nth 1 (nth 1 expr)))
-      (and (math-looks-negp (nth 1 expr))
-	   (math-neg (list 'calcFunc-sin (math-neg (nth 1 expr)))))
+  (or (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arcsin)
+	   (nth 1 (nth 1 math-simplify-expr)))
+      (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (math-neg (list 'calcFunc-sin (math-neg (nth 1 math-simplify-expr)))))
       (and (eq calc-angle-mode 'rad)
-	   (let ((n (math-linear-in (nth 1 expr) '(var pi var-pi))))
+	   (let ((n (math-linear-in (nth 1 math-simplify-expr) '(var pi var-pi))))
 	     (and n
 		  (math-known-sin (car n) (nth 1 n) 120 0))))
       (and (eq calc-angle-mode 'deg)
-	   (let ((n (math-integer-plus (nth 1 expr))))
+	   (let ((n (math-integer-plus (nth 1 math-simplify-expr))))
 	     (and n
 		  (math-known-sin (car n) (nth 1 n) '(frac 2 3) 0))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arccos)
-	   (list 'calcFunc-sqrt (math-sub 1 (math-sqr (nth 1 (nth 1 expr))))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arctan)
-	   (math-div (nth 1 (nth 1 expr))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arccos)
+	   (list 'calcFunc-sqrt (math-sub 1 (math-sqr 
+                                             (nth 1 (nth 1 math-simplify-expr))))))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arctan)
+	   (math-div (nth 1 (nth 1 math-simplify-expr))
 		     (list 'calcFunc-sqrt
-			   (math-add 1 (math-sqr (nth 1 (nth 1 expr)))))))
-      (let ((m (math-should-expand-trig (nth 1 expr))))
+			   (math-add 1 (math-sqr 
+                                        (nth 1 (nth 1 math-simplify-expr)))))))
+      (let ((m (math-should-expand-trig (nth 1 math-simplify-expr))))
 	(and m (integerp (car m))
 	     (let ((n (car m)) (a (nth 1 m)))
 	       (list '+
@@ -672,25 +709,27 @@
 			   (list 'calcFunc-sin a))))))))
 
 (math-defsimplify calcFunc-cos
-  (or (and (eq (car-safe (nth 1 expr)) 'calcFunc-arccos)
-	   (nth 1 (nth 1 expr)))
-      (and (math-looks-negp (nth 1 expr))
-	   (list 'calcFunc-cos (math-neg (nth 1 expr))))
+  (or (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arccos)
+	   (nth 1 (nth 1 math-simplify-expr)))
+      (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (list 'calcFunc-cos (math-neg (nth 1 math-simplify-expr))))
       (and (eq calc-angle-mode 'rad)
-	   (let ((n (math-linear-in (nth 1 expr) '(var pi var-pi))))
+	   (let ((n (math-linear-in (nth 1 math-simplify-expr) '(var pi var-pi))))
 	     (and n
 		  (math-known-sin (car n) (nth 1 n) 120 300))))
       (and (eq calc-angle-mode 'deg)
-	   (let ((n (math-integer-plus (nth 1 expr))))
+	   (let ((n (math-integer-plus (nth 1 math-simplify-expr))))
 	     (and n
 		  (math-known-sin (car n) (nth 1 n) '(frac 2 3) 300))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arcsin)
-	   (list 'calcFunc-sqrt (math-sub 1 (math-sqr (nth 1 (nth 1 expr))))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arctan)
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arcsin)
+	   (list 'calcFunc-sqrt 
+                 (math-sub 1 (math-sqr (nth 1 (nth 1 math-simplify-expr))))))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arctan)
 	   (math-div 1
 		     (list 'calcFunc-sqrt
-			   (math-add 1 (math-sqr (nth 1 (nth 1 expr)))))))
-      (let ((m (math-should-expand-trig (nth 1 expr))))
+			   (math-add 1 
+                                     (math-sqr (nth 1 (nth 1 math-simplify-expr)))))))
+      (let ((m (math-should-expand-trig (nth 1 math-simplify-expr))))
 	(and m (integerp (car m))
 	     (let ((n (car m)) (a (nth 1 m)))
 	       (list '-
@@ -752,33 +791,33 @@
 		 (t nil))))))
 
 (math-defsimplify calcFunc-tan
-  (or (and (eq (car-safe (nth 1 expr)) 'calcFunc-arctan)
-	   (nth 1 (nth 1 expr)))
-      (and (math-looks-negp (nth 1 expr))
-	   (math-neg (list 'calcFunc-tan (math-neg (nth 1 expr)))))
+  (or (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arctan)
+	   (nth 1 (nth 1 math-simplify-expr)))
+      (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (math-neg (list 'calcFunc-tan (math-neg (nth 1 math-simplify-expr)))))
       (and (eq calc-angle-mode 'rad)
-	   (let ((n (math-linear-in (nth 1 expr) '(var pi var-pi))))
+	   (let ((n (math-linear-in (nth 1 math-simplify-expr) '(var pi var-pi))))
 	     (and n
 		  (math-known-tan (car n) (nth 1 n) 120))))
       (and (eq calc-angle-mode 'deg)
-	   (let ((n (math-integer-plus (nth 1 expr))))
+	   (let ((n (math-integer-plus (nth 1 math-simplify-expr))))
 	     (and n
 		  (math-known-tan (car n) (nth 1 n) '(frac 2 3)))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arcsin)
-	   (math-div (nth 1 (nth 1 expr))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arcsin)
+	   (math-div (nth 1 (nth 1 math-simplify-expr))
 		     (list 'calcFunc-sqrt
-			   (math-sub 1 (math-sqr (nth 1 (nth 1 expr)))))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arccos)
+			   (math-sub 1 (math-sqr (nth 1 (nth 1 math-simplify-expr)))))))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arccos)
 	   (math-div (list 'calcFunc-sqrt
-			   (math-sub 1 (math-sqr (nth 1 (nth 1 expr)))))
-		     (nth 1 (nth 1 expr))))
-      (let ((m (math-should-expand-trig (nth 1 expr))))
+			   (math-sub 1 (math-sqr (nth 1 (nth 1 math-simplify-expr)))))
+		     (nth 1 (nth 1 math-simplify-expr))))
+      (let ((m (math-should-expand-trig (nth 1 math-simplify-expr))))
 	(and m
 	     (if (equal (car m) '(frac 1 2))
 		 (math-div (math-sub 1 (list 'calcFunc-cos (nth 1 m)))
 			   (list 'calcFunc-sin (nth 1 m)))
-	       (math-div (list 'calcFunc-sin (nth 1 expr))
-			 (list 'calcFunc-cos (nth 1 expr))))))))
+	       (math-div (list 'calcFunc-sin (nth 1 math-simplify-expr))
+			 (list 'calcFunc-cos (nth 1 math-simplify-expr))))))))
 
 (defun math-known-tan (plus n mul)
   (setq n (math-mul n mul))
@@ -813,19 +852,20 @@
 		 (t nil))))))
 
 (math-defsimplify calcFunc-sinh
-  (or (and (eq (car-safe (nth 1 expr)) 'calcFunc-arcsinh)
-	   (nth 1 (nth 1 expr)))
-      (and (math-looks-negp (nth 1 expr))
-	   (math-neg (list 'calcFunc-sinh (math-neg (nth 1 expr)))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arccosh)
+  (or (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arcsinh)
+	   (nth 1 (nth 1 math-simplify-expr)))
+      (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (math-neg (list 'calcFunc-sinh (math-neg (nth 1 math-simplify-expr)))))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arccosh)
 	   math-living-dangerously
-	   (list 'calcFunc-sqrt (math-sub (math-sqr (nth 1 (nth 1 expr))) 1)))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arctanh)
+	   (list 'calcFunc-sqrt 
+                 (math-sub (math-sqr (nth 1 (nth 1 math-simplify-expr))) 1)))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arctanh)
 	   math-living-dangerously
-	   (math-div (nth 1 (nth 1 expr))
+	   (math-div (nth 1 (nth 1 math-simplify-expr))
 		     (list 'calcFunc-sqrt
-			   (math-sub 1 (math-sqr (nth 1 (nth 1 expr)))))))
-      (let ((m (math-should-expand-trig (nth 1 expr) t)))
+			   (math-sub 1 (math-sqr (nth 1 (nth 1 math-simplify-expr)))))))
+      (let ((m (math-should-expand-trig (nth 1 math-simplify-expr) t)))
 	(and m (integerp (car m))
 	     (let ((n (car m)) (a (nth 1 m)))
 	       (if (> n 1)
@@ -836,19 +876,20 @@
 			       (list 'calcFunc-sinh a)))))))))
 
 (math-defsimplify calcFunc-cosh
-  (or (and (eq (car-safe (nth 1 expr)) 'calcFunc-arccosh)
-	   (nth 1 (nth 1 expr)))
-      (and (math-looks-negp (nth 1 expr))
-	   (list 'calcFunc-cosh (math-neg (nth 1 expr))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arcsinh)
+  (or (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arccosh)
+	   (nth 1 (nth 1 math-simplify-expr)))
+      (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (list 'calcFunc-cosh (math-neg (nth 1 math-simplify-expr))))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arcsinh)
 	   math-living-dangerously
-	   (list 'calcFunc-sqrt (math-add (math-sqr (nth 1 (nth 1 expr))) 1)))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arctanh)
+	   (list 'calcFunc-sqrt 
+                 (math-add (math-sqr (nth 1 (nth 1 math-simplify-expr))) 1)))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arctanh)
 	   math-living-dangerously
 	   (math-div 1
 		     (list 'calcFunc-sqrt
-			   (math-sub 1 (math-sqr (nth 1 (nth 1 expr)))))))
-      (let ((m (math-should-expand-trig (nth 1 expr) t)))
+			   (math-sub 1 (math-sqr (nth 1 (nth 1 math-simplify-expr)))))))
+      (let ((m (math-should-expand-trig (nth 1 math-simplify-expr) t)))
 	(and m (integerp (car m))
 	     (let ((n (car m)) (a (nth 1 m)))
 	       (if (> n 1)
@@ -859,133 +900,136 @@
 			       (list 'calcFunc-sinh a)))))))))
 
 (math-defsimplify calcFunc-tanh
-  (or (and (eq (car-safe (nth 1 expr)) 'calcFunc-arctanh)
-	   (nth 1 (nth 1 expr)))
-      (and (math-looks-negp (nth 1 expr))
-	   (math-neg (list 'calcFunc-tanh (math-neg (nth 1 expr)))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arcsinh)
+  (or (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arctanh)
+	   (nth 1 (nth 1 math-simplify-expr)))
+      (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (math-neg (list 'calcFunc-tanh (math-neg (nth 1 math-simplify-expr)))))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arcsinh)
 	   math-living-dangerously
-	   (math-div (nth 1 (nth 1 expr))
+	   (math-div (nth 1 (nth 1 math-simplify-expr))
 		     (list 'calcFunc-sqrt
-			   (math-add (math-sqr (nth 1 (nth 1 expr))) 1))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-arccosh)
+			   (math-add (math-sqr (nth 1 (nth 1 math-simplify-expr))) 1))))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-arccosh)
 	   math-living-dangerously
 	   (math-div (list 'calcFunc-sqrt
-			   (math-sub (math-sqr (nth 1 (nth 1 expr))) 1))
-		     (nth 1 (nth 1 expr))))
-      (let ((m (math-should-expand-trig (nth 1 expr) t)))
+			   (math-sub (math-sqr (nth 1 (nth 1 math-simplify-expr))) 1))
+		     (nth 1 (nth 1 math-simplify-expr))))
+      (let ((m (math-should-expand-trig (nth 1 math-simplify-expr) t)))
 	(and m
 	     (if (equal (car m) '(frac 1 2))
 		 (math-div (math-sub (list 'calcFunc-cosh (nth 1 m)) 1)
 			   (list 'calcFunc-sinh (nth 1 m)))
-	       (math-div (list 'calcFunc-sinh (nth 1 expr))
-			 (list 'calcFunc-cosh (nth 1 expr))))))))
+	       (math-div (list 'calcFunc-sinh (nth 1 math-simplify-expr))
+			 (list 'calcFunc-cosh (nth 1 math-simplify-expr))))))))
 
 (math-defsimplify calcFunc-arcsin
-  (or (and (math-looks-negp (nth 1 expr))
-	   (math-neg (list 'calcFunc-arcsin (math-neg (nth 1 expr)))))
-      (and (eq (nth 1 expr) 1)
+  (or (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (math-neg (list 'calcFunc-arcsin (math-neg (nth 1 math-simplify-expr)))))
+      (and (eq (nth 1 math-simplify-expr) 1)
 	   (math-quarter-circle t))
-      (and (equal (nth 1 expr) '(frac 1 2))
+      (and (equal (nth 1 math-simplify-expr) '(frac 1 2))
 	   (math-div (math-half-circle t) 6))
       (and math-living-dangerously
-	   (eq (car-safe (nth 1 expr)) 'calcFunc-sin)
-	   (nth 1 (nth 1 expr)))
+	   (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-sin)
+	   (nth 1 (nth 1 math-simplify-expr)))
       (and math-living-dangerously
-	   (eq (car-safe (nth 1 expr)) 'calcFunc-cos)
+	   (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-cos)
 	   (math-sub (math-quarter-circle t)
-		     (nth 1 (nth 1 expr))))))
+		     (nth 1 (nth 1 math-simplify-expr))))))
 
 (math-defsimplify calcFunc-arccos
-  (or (and (eq (nth 1 expr) 0)
+  (or (and (eq (nth 1 math-simplify-expr) 0)
 	   (math-quarter-circle t))
-      (and (eq (nth 1 expr) -1)
+      (and (eq (nth 1 math-simplify-expr) -1)
 	   (math-half-circle t))
-      (and (equal (nth 1 expr) '(frac 1 2))
+      (and (equal (nth 1 math-simplify-expr) '(frac 1 2))
 	   (math-div (math-half-circle t) 3))
-      (and (equal (nth 1 expr) '(frac -1 2))
+      (and (equal (nth 1 math-simplify-expr) '(frac -1 2))
 	   (math-div (math-mul (math-half-circle t) 2) 3))
       (and math-living-dangerously
-	   (eq (car-safe (nth 1 expr)) 'calcFunc-cos)
-	   (nth 1 (nth 1 expr)))
+	   (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-cos)
+	   (nth 1 (nth 1 math-simplify-expr)))
       (and math-living-dangerously
-	   (eq (car-safe (nth 1 expr)) 'calcFunc-sin)
+	   (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-sin)
 	   (math-sub (math-quarter-circle t)
-		     (nth 1 (nth 1 expr))))))
+		     (nth 1 (nth 1 math-simplify-expr))))))
 
 (math-defsimplify calcFunc-arctan
-  (or (and (math-looks-negp (nth 1 expr))
-	   (math-neg (list 'calcFunc-arctan (math-neg (nth 1 expr)))))
-      (and (eq (nth 1 expr) 1)
+  (or (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (math-neg (list 'calcFunc-arctan (math-neg (nth 1 math-simplify-expr)))))
+      (and (eq (nth 1 math-simplify-expr) 1)
 	   (math-div (math-half-circle t) 4))
       (and math-living-dangerously
-	   (eq (car-safe (nth 1 expr)) 'calcFunc-tan)
-	   (nth 1 (nth 1 expr)))))
+	   (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-tan)
+	   (nth 1 (nth 1 math-simplify-expr)))))
 
 (math-defsimplify calcFunc-arcsinh
-  (or (and (math-looks-negp (nth 1 expr))
-	   (math-neg (list 'calcFunc-arcsinh (math-neg (nth 1 expr)))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-sinh)
+  (or (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (math-neg (list 'calcFunc-arcsinh (math-neg (nth 1 math-simplify-expr)))))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-sinh)
 	   (or math-living-dangerously
-	       (math-known-realp (nth 1 (nth 1 expr))))
-	   (nth 1 (nth 1 expr)))))
+	       (math-known-realp (nth 1 (nth 1 math-simplify-expr))))
+	   (nth 1 (nth 1 math-simplify-expr)))))
 
 (math-defsimplify calcFunc-arccosh
-  (and (eq (car-safe (nth 1 expr)) 'calcFunc-cosh)
+  (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-cosh)
        (or math-living-dangerously
-	   (math-known-realp (nth 1 (nth 1 expr))))
-       (nth 1 (nth 1 expr))))
+	   (math-known-realp (nth 1 (nth 1 math-simplify-expr))))
+       (nth 1 (nth 1 math-simplify-expr))))
 
 (math-defsimplify calcFunc-arctanh
-  (or (and (math-looks-negp (nth 1 expr))
-	   (math-neg (list 'calcFunc-arctanh (math-neg (nth 1 expr)))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-tanh)
+  (or (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (math-neg (list 'calcFunc-arctanh (math-neg (nth 1 math-simplify-expr)))))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-tanh)
 	   (or math-living-dangerously
-	       (math-known-realp (nth 1 (nth 1 expr))))
-	   (nth 1 (nth 1 expr)))))
+	       (math-known-realp (nth 1 (nth 1 math-simplify-expr))))
+	   (nth 1 (nth 1 math-simplify-expr)))))
 
 (math-defsimplify calcFunc-sqrt
   (math-simplify-sqrt))
 
 (defun math-simplify-sqrt ()
-  (or (and (eq (car-safe (nth 1 expr)) 'frac)
-	   (math-div (list 'calcFunc-sqrt (math-mul (nth 1 (nth 1 expr))
-						    (nth 2 (nth 1 expr))))
-		     (nth 2 (nth 1 expr))))
-      (let ((fac (if (math-objectp (nth 1 expr))
-		     (math-squared-factor (nth 1 expr))
-		   (math-common-constant-factor (nth 1 expr)))))
+  (or (and (eq (car-safe (nth 1 math-simplify-expr)) 'frac)
+	   (math-div (list 'calcFunc-sqrt 
+                           (math-mul (nth 1 (nth 1 math-simplify-expr))
+                                     (nth 2 (nth 1 math-simplify-expr))))
+		     (nth 2 (nth 1 math-simplify-expr))))
+      (let ((fac (if (math-objectp (nth 1 math-simplify-expr))
+		     (math-squared-factor (nth 1 math-simplify-expr))
+		   (math-common-constant-factor (nth 1 math-simplify-expr)))))
 	(and fac (not (eq fac 1))
 	     (math-mul (math-normalize (list 'calcFunc-sqrt fac))
 		       (math-normalize
 			(list 'calcFunc-sqrt
-			      (math-cancel-common-factor (nth 1 expr) fac))))))
+			      (math-cancel-common-factor 
+                               (nth 1 math-simplify-expr) fac))))))
       (and math-living-dangerously
-	   (or (and (eq (car-safe (nth 1 expr)) '-)
-		    (math-equal-int (nth 1 (nth 1 expr)) 1)
-		    (eq (car-safe (nth 2 (nth 1 expr))) '^)
-		    (math-equal-int (nth 2 (nth 2 (nth 1 expr))) 2)
-		    (or (and (eq (car-safe (nth 1 (nth 2 (nth 1 expr))))
+	   (or (and (eq (car-safe (nth 1 math-simplify-expr)) '-)
+		    (math-equal-int (nth 1 (nth 1 math-simplify-expr)) 1)
+		    (eq (car-safe (nth 2 (nth 1 math-simplify-expr))) '^)
+		    (math-equal-int (nth 2 (nth 2 (nth 1 math-simplify-expr))) 2)
+		    (or (and (eq (car-safe (nth 1 (nth 2 (nth 1 math-simplify-expr))))
 				 'calcFunc-sin)
 			     (list 'calcFunc-cos
-				   (nth 1 (nth 1 (nth 2 (nth 1 expr))))))
-			(and (eq (car-safe (nth 1 (nth 2 (nth 1 expr))))
+				   (nth 1 (nth 1 (nth 2 (nth 1 math-simplify-expr))))))
+			(and (eq (car-safe (nth 1 (nth 2 (nth 1 math-simplify-expr))))
 				 'calcFunc-cos)
 			     (list 'calcFunc-sin
-				   (nth 1 (nth 1 (nth 2 (nth 1 expr))))))))
-	       (and (eq (car-safe (nth 1 expr)) '-)
-		    (math-equal-int (nth 2 (nth 1 expr)) 1)
-		    (eq (car-safe (nth 1 (nth 1 expr))) '^)
-		    (math-equal-int (nth 2 (nth 1 (nth 1 expr))) 2)
-		    (and (eq (car-safe (nth 1 (nth 1 (nth 1 expr))))
+				   (nth 1 (nth 1 (nth 2 
+                                                      (nth 1 math-simplify-expr))))))))
+	       (and (eq (car-safe (nth 1 math-simplify-expr)) '-)
+		    (math-equal-int (nth 2 (nth 1 math-simplify-expr)) 1)
+		    (eq (car-safe (nth 1 (nth 1 math-simplify-expr))) '^)
+		    (math-equal-int (nth 2 (nth 1 (nth 1 math-simplify-expr))) 2)
+		    (and (eq (car-safe (nth 1 (nth 1 (nth 1 math-simplify-expr))))
 			     'calcFunc-cosh)
 			 (list 'calcFunc-sinh
-			       (nth 1 (nth 1 (nth 1 (nth 1 expr)))))))
-	       (and (eq (car-safe (nth 1 expr)) '+)
-		    (let ((a (nth 1 (nth 1 expr)))
-			  (b (nth 2 (nth 1 expr))))
+			       (nth 1 (nth 1 (nth 1 (nth 1 math-simplify-expr)))))))
+	       (and (eq (car-safe (nth 1 math-simplify-expr)) '+)
+		    (let ((a (nth 1 (nth 1 math-simplify-expr)))
+			  (b (nth 2 (nth 1 math-simplify-expr))))
 		      (and (or (and (math-equal-int a 1)
-				    (setq a b b (nth 1 (nth 1 expr))))
+				    (setq a b b (nth 1 (nth 1 math-simplify-expr))))
 			       (math-equal-int b 1))
 			   (eq (car-safe a) '^)
 			   (math-equal-int (nth 2 a) 2)
@@ -994,20 +1038,20 @@
 			       (and (eq (car-safe (nth 1 a)) 'calcFunc-tan)
 				    (list '/ 1 (list 'calcFunc-cos
 						     (nth 1 (nth 1 a)))))))))
-	       (and (eq (car-safe (nth 1 expr)) '^)
+	       (and (eq (car-safe (nth 1 math-simplify-expr)) '^)
 		    (list '^
-			  (nth 1 (nth 1 expr))
-			  (math-div (nth 2 (nth 1 expr)) 2)))
-	       (and (eq (car-safe (nth 1 expr)) 'calcFunc-sqrt)
-		    (list '^ (nth 1 (nth 1 expr)) (math-div 1 4)))
-	       (and (memq (car-safe (nth 1 expr)) '(* /))
-		    (list (car (nth 1 expr))
-			  (list 'calcFunc-sqrt (nth 1 (nth 1 expr)))
-			  (list 'calcFunc-sqrt (nth 2 (nth 1 expr)))))
-	       (and (memq (car-safe (nth 1 expr)) '(+ -))
-		    (not (math-any-floats (nth 1 expr)))
+			  (nth 1 (nth 1 math-simplify-expr))
+			  (math-div (nth 2 (nth 1 math-simplify-expr)) 2)))
+	       (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-sqrt)
+		    (list '^ (nth 1 (nth 1 math-simplify-expr)) (math-div 1 4)))
+	       (and (memq (car-safe (nth 1 math-simplify-expr)) '(* /))
+		    (list (car (nth 1 math-simplify-expr))
+			  (list 'calcFunc-sqrt (nth 1 (nth 1 math-simplify-expr)))
+			  (list 'calcFunc-sqrt (nth 2 (nth 1 math-simplify-expr)))))
+	       (and (memq (car-safe (nth 1 math-simplify-expr)) '(+ -))
+		    (not (math-any-floats (nth 1 math-simplify-expr)))
 		    (let ((f (calcFunc-factors (calcFunc-expand
-						(nth 1 expr)))))
+						(nth 1 math-simplify-expr)))))
 		      (and (math-vectorp f)
 			   (or (> (length f) 2)
 			       (> (nth 2 (nth 1 f)) 1))
@@ -1043,7 +1087,7 @@
 	fac)))
 
 (math-defsimplify calcFunc-exp
-  (math-simplify-exp (nth 1 expr)))
+  (math-simplify-exp (nth 1 math-simplify-expr)))
 
 (defun math-simplify-exp (x)
   (or (and (eq (car-safe x) 'calcFunc-ln)
@@ -1074,22 +1118,22 @@
 		  (list '+ c (list '* s '(var i var-i))))))))
 
 (math-defsimplify calcFunc-ln
-  (or (and (eq (car-safe (nth 1 expr)) 'calcFunc-exp)
+  (or (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-exp)
 	   (or math-living-dangerously
-	       (math-known-realp (nth 1 (nth 1 expr))))
-	   (nth 1 (nth 1 expr)))
-      (and (eq (car-safe (nth 1 expr)) '^)
-	   (equal (nth 1 (nth 1 expr)) '(var e var-e))
+	       (math-known-realp (nth 1 (nth 1 math-simplify-expr))))
+	   (nth 1 (nth 1 math-simplify-expr)))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) '^)
+	   (equal (nth 1 (nth 1 math-simplify-expr)) '(var e var-e))
 	   (or math-living-dangerously
-	       (math-known-realp (nth 2 (nth 1 expr))))
-	   (nth 2 (nth 1 expr)))
+	       (math-known-realp (nth 2 (nth 1 math-simplify-expr))))
+	   (nth 2 (nth 1 math-simplify-expr)))
       (and calc-symbolic-mode
-	   (math-known-negp (nth 1 expr))
-	   (math-add (list 'calcFunc-ln (math-neg (nth 1 expr)))
+	   (math-known-negp (nth 1 math-simplify-expr))
+	   (math-add (list 'calcFunc-ln (math-neg (nth 1 math-simplify-expr)))
 		     '(* (var pi var-pi) (var i var-i))))
       (and calc-symbolic-mode
-	   (math-known-imagp (nth 1 expr))
-	   (let* ((ip (calcFunc-im (nth 1 expr)))
+	   (math-known-imagp (nth 1 math-simplify-expr))
+	   (let* ((ip (calcFunc-im (nth 1 math-simplify-expr)))
 		  (ips (math-possible-signs ip)))
 	     (or (and (memq ips '(4 6))
 		      (math-add (list 'calcFunc-ln ip)
@@ -1103,83 +1147,91 @@
 
 (defun math-simplify-pow ()
   (or (and math-living-dangerously
-	   (or (and (eq (car-safe (nth 1 expr)) '^)
+	   (or (and (eq (car-safe (nth 1 math-simplify-expr)) '^)
 		    (list '^
-			  (nth 1 (nth 1 expr))
-			  (math-mul (nth 2 expr) (nth 2 (nth 1 expr)))))
-	       (and (eq (car-safe (nth 1 expr)) 'calcFunc-sqrt)
+			  (nth 1 (nth 1 math-simplify-expr))
+			  (math-mul (nth 2 math-simplify-expr) 
+                                    (nth 2 (nth 1 math-simplify-expr)))))
+	       (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-sqrt)
 		    (list '^
-			  (nth 1 (nth 1 expr))
-			  (math-div (nth 2 expr) 2)))
-	       (and (memq (car-safe (nth 1 expr)) '(* /))
-		    (list (car (nth 1 expr))
-			  (list '^ (nth 1 (nth 1 expr)) (nth 2 expr))
-			  (list '^ (nth 2 (nth 1 expr)) (nth 2 expr))))))
-      (and (math-equal-int (nth 1 expr) 10)
-	   (eq (car-safe (nth 2 expr)) 'calcFunc-log10)
-	   (nth 1 (nth 2 expr)))
-      (and (equal (nth 1 expr) '(var e var-e))
-	   (math-simplify-exp (nth 2 expr)))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-exp)
+			  (nth 1 (nth 1 math-simplify-expr))
+			  (math-div (nth 2 math-simplify-expr) 2)))
+	       (and (memq (car-safe (nth 1 math-simplify-expr)) '(* /))
+		    (list (car (nth 1 math-simplify-expr))
+			  (list '^ (nth 1 (nth 1 math-simplify-expr)) 
+                                (nth 2 math-simplify-expr))
+			  (list '^ (nth 2 (nth 1 math-simplify-expr)) 
+                                (nth 2 math-simplify-expr))))))
+      (and (math-equal-int (nth 1 math-simplify-expr) 10)
+	   (eq (car-safe (nth 2 math-simplify-expr)) 'calcFunc-log10)
+	   (nth 1 (nth 2 math-simplify-expr)))
+      (and (equal (nth 1 math-simplify-expr) '(var e var-e))
+	   (math-simplify-exp (nth 2 math-simplify-expr)))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-exp)
 	   (not math-integrating)
-	   (list 'calcFunc-exp (math-mul (nth 1 (nth 1 expr)) (nth 2 expr))))
-      (and (equal (nth 1 expr) '(var i var-i))
+	   (list 'calcFunc-exp (math-mul (nth 1 (nth 1 math-simplify-expr)) 
+                                         (nth 2 math-simplify-expr))))
+      (and (equal (nth 1 math-simplify-expr) '(var i var-i))
 	   (math-imaginary-i)
-	   (math-num-integerp (nth 2 expr))
-	   (let ((x (math-mod (math-trunc (nth 2 expr)) 4)))
+	   (math-num-integerp (nth 2 math-simplify-expr))
+	   (let ((x (math-mod (math-trunc (nth 2 math-simplify-expr)) 4)))
 	     (cond ((eq x 0) 1)
-		   ((eq x 1) (nth 1 expr))
+		   ((eq x 1) (nth 1 math-simplify-expr))
 		   ((eq x 2) -1)
-		   ((eq x 3) (math-neg (nth 1 expr))))))
+		   ((eq x 3) (math-neg (nth 1 math-simplify-expr))))))
       (and math-integrating
-	   (integerp (nth 2 expr))
-	   (>= (nth 2 expr) 2)
-	   (or (and (eq (car-safe (nth 1 expr)) 'calcFunc-cos)
-		    (math-mul (math-pow (nth 1 expr) (- (nth 2 expr) 2))
+	   (integerp (nth 2 math-simplify-expr))
+	   (>= (nth 2 math-simplify-expr) 2)
+	   (or (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-cos)
+		    (math-mul (math-pow (nth 1 math-simplify-expr) 
+                                        (- (nth 2 math-simplify-expr) 2))
 			      (math-sub 1
 					(math-sqr
 					 (list 'calcFunc-sin
-					       (nth 1 (nth 1 expr)))))))
-	       (and (eq (car-safe (nth 1 expr)) 'calcFunc-cosh)
-		    (math-mul (math-pow (nth 1 expr) (- (nth 2 expr) 2))
+					       (nth 1 (nth 1 math-simplify-expr)))))))
+	       (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-cosh)
+		    (math-mul (math-pow (nth 1 math-simplify-expr) 
+                                        (- (nth 2 math-simplify-expr) 2))
 			      (math-add 1
 					(math-sqr
 					 (list 'calcFunc-sinh
-					       (nth 1 (nth 1 expr)))))))))
-      (and (eq (car-safe (nth 2 expr)) 'frac)
-	   (Math-ratp (nth 1 expr))
-	   (Math-posp (nth 1 expr))
-	   (if (equal (nth 2 expr) '(frac 1 2))
-	       (list 'calcFunc-sqrt (nth 1 expr))
-	     (let ((flr (math-floor (nth 2 expr))))
+					       (nth 1 (nth 1 math-simplify-expr)))))))))
+      (and (eq (car-safe (nth 2 math-simplify-expr)) 'frac)
+	   (Math-ratp (nth 1 math-simplify-expr))
+	   (Math-posp (nth 1 math-simplify-expr))
+	   (if (equal (nth 2 math-simplify-expr) '(frac 1 2))
+	       (list 'calcFunc-sqrt (nth 1 math-simplify-expr))
+	     (let ((flr (math-floor (nth 2 math-simplify-expr))))
 	       (and (not (Math-zerop flr))
-		    (list '* (list '^ (nth 1 expr) flr)
-			  (list '^ (nth 1 expr)
-				(math-sub (nth 2 expr) flr)))))))
-      (and (eq (math-quarter-integer (nth 2 expr)) 2)
+		    (list '* (list '^ (nth 1 math-simplify-expr) flr)
+			  (list '^ (nth 1 math-simplify-expr)
+				(math-sub (nth 2 math-simplify-expr) flr)))))))
+      (and (eq (math-quarter-integer (nth 2 math-simplify-expr)) 2)
 	   (let ((temp (math-simplify-sqrt)))
 	     (and temp
-		  (list '^ temp (math-mul (nth 2 expr) 2)))))))
+		  (list '^ temp (math-mul (nth 2 math-simplify-expr) 2)))))))
 
 (math-defsimplify calcFunc-log10
-  (and (eq (car-safe (nth 1 expr)) '^)
-       (math-equal-int (nth 1 (nth 1 expr)) 10)
+  (and (eq (car-safe (nth 1 math-simplify-expr)) '^)
+       (math-equal-int (nth 1 (nth 1 math-simplify-expr)) 10)
        (or math-living-dangerously
-	   (math-known-realp (nth 2 (nth 1 expr))))
-       (nth 2 (nth 1 expr))))
+	   (math-known-realp (nth 2 (nth 1 math-simplify-expr))))
+       (nth 2 (nth 1 math-simplify-expr))))
 
 
 (math-defsimplify calcFunc-erf
-  (or (and (math-looks-negp (nth 1 expr))
-	   (math-neg (list 'calcFunc-erf (math-neg (nth 1 expr)))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-conj)
-	   (list 'calcFunc-conj (list 'calcFunc-erf (nth 1 (nth 1 expr)))))))
+  (or (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (math-neg (list 'calcFunc-erf (math-neg (nth 1 math-simplify-expr)))))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-conj)
+	   (list 'calcFunc-conj 
+                 (list 'calcFunc-erf (nth 1 (nth 1 math-simplify-expr)))))))
 
 (math-defsimplify calcFunc-erfc
-  (or (and (math-looks-negp (nth 1 expr))
-	   (math-sub 2 (list 'calcFunc-erfc (math-neg (nth 1 expr)))))
-      (and (eq (car-safe (nth 1 expr)) 'calcFunc-conj)
-	   (list 'calcFunc-conj (list 'calcFunc-erfc (nth 1 (nth 1 expr)))))))
+  (or (and (math-looks-negp (nth 1 math-simplify-expr))
+	   (math-sub 2 (list 'calcFunc-erfc (math-neg (nth 1 math-simplify-expr)))))
+      (and (eq (car-safe (nth 1 math-simplify-expr)) 'calcFunc-conj)
+	   (list 'calcFunc-conj 
+                 (list 'calcFunc-erfc (nth 1 (nth 1 math-simplify-expr)))))))
 
 
 (defun math-linear-in (expr term &optional always)
@@ -1325,19 +1377,25 @@
     thing))
 
 ;;; Substitute all occurrences of old for new in expr (non-destructive).
-(defun math-expr-subst (expr old new)
+
+;; The variables math-expr-subst-old and math-expr-subst-new are local
+;; for math-expr-subst, but used by math-expr-subst-rec.
+(defvar math-expr-subst-old)
+(defvar math-expr-subst-new)
+
+(defun math-expr-subst (expr math-expr-subst-old math-expr-subst-new)
   (math-expr-subst-rec expr))
 
 (defalias 'calcFunc-subst 'math-expr-subst)
 
 (defun math-expr-subst-rec (expr)
-  (cond ((equal expr old) new)
+  (cond ((equal expr math-expr-subst-old) math-expr-subst-new)
 	((Math-primp expr) expr)
 	((memq (car expr) '(calcFunc-deriv
 			    calcFunc-tderiv))
 	 (if (= (length expr) 2)
-	     (if (equal (nth 1 expr) old)
-		 (append expr (list new))
+	     (if (equal (nth 1 expr) math-expr-subst-old)
+		 (append expr (list math-expr-subst-new))
 	       expr)
 	   (list (car expr) (nth 1 expr)
 		 (math-expr-subst-rec (nth 2 expr)))))
@@ -1375,15 +1433,21 @@
       expr)))
 
 ;;; If expr is of the form "a + bx + cx^2 + ...", return the list (a b c ...),
-;;; else return nil if not in polynomial form.  If "loose", coefficients
-;;; may contain x, e.g., sin(x) + cos(x) x^2 is a loose polynomial in x.
-(defun math-is-polynomial (expr var &optional degree loose)
-  (let* ((math-poly-base-variable (if loose
-				      (if (eq loose 'gen) var '(var XXX XXX))
+;;; else return nil if not in polynomial form.  If "loose" (math-is-poly-loose), 
+;;; coefficients may contain x, e.g., sin(x) + cos(x) x^2 is a loose polynomial in x.
+
+;; The variables math-is-poly-degree and math-is-poly-loose are local to 
+;; math-is-polynomial, but are used by math-is-poly-rec
+(defvar math-is-poly-degree)
+(defvar math-is-poly-loose)
+
+(defun math-is-polynomial (expr var &optional math-is-poly-degree math-is-poly-loose)
+  (let* ((math-poly-base-variable (if math-is-poly-loose
+				      (if (eq math-is-poly-loose 'gen) var '(var XXX XXX))
 				    math-poly-base-variable))
 	 (poly (math-is-poly-rec expr math-poly-neg-powers)))
-    (and (or (null degree)
-	     (<= (length poly) (1+ degree)))
+    (and (or (null math-is-poly-degree)
+	     (<= (length poly) (1+ math-is-poly-degree)))
 	 poly)))
 
 (defun math-is-poly-rec (expr negpow)
@@ -1431,8 +1495,8 @@
 				(n pow)
 				(accum (list 1)))
 			    (and p1
-				 (or (null degree)
-				     (<= (* (1- (length p1)) n) degree))
+				 (or (null math-is-poly-degree)
+				     (<= (* (1- (length p1)) n) math-is-poly-degree))
 				 (progn
 				   (while (>= n 1)
 				     (setq accum (math-poly-mul accum p1)
@@ -1460,8 +1524,9 @@
 		(and p1
 		     (let ((p2 (math-is-poly-rec (nth 2 expr) negpow)))
 		       (and p2
-			    (or (null degree)
-				(<= (- (+ (length p1) (length p2)) 2) degree))
+			    (or (null math-is-poly-degree)
+				(<= (- (+ (length p1) (length p2)) 2) 
+                                    math-is-poly-degree))
 			    (math-poly-mul p1 p2))))))
 	     ((eq (car expr) '/)
 	      (and (or (not (math-poly-depends (nth 2 expr) var))
@@ -1481,7 +1546,7 @@
 	      (math-is-poly-rec (list '^ (nth 1 expr) '(frac 1 2)) negpow))
 	     (t nil))
        (and (or (not (math-poly-depends expr var))
-		loose)
+		math-is-poly-loose)
 	    (not (eq (car expr) 'vec))
 	    (list expr)))))
 
@@ -1517,13 +1582,18 @@
     (math-expr-depends expr var)))
 
 ;;; Find the variable (or sub-expression) which is the base of polynomial expr.
-(defun math-polynomial-base (mpb-top-expr &optional mpb-pred)
-  (or mpb-pred
-      (setq mpb-pred (function (lambda (base) (math-polynomial-p
+;; The variables math-poly-base-const-ok and math-poly-base-pred are
+;; local to math-polynomial-base, but are used by math-polynomial-base-rec.
+(defvar math-poly-base-const-ok)
+(defvar math-poly-base-pred)
+
+(defun math-polynomial-base (mpb-top-expr &optional math-poly-base-pred)
+  (or math-poly-base-pred
+      (setq math-poly-base-pred (function (lambda (base) (math-polynomial-p
 					       mpb-top-expr base)))))
-  (or (let ((const-ok nil))
+  (or (let ((math-poly-base-const-ok nil))
 	(math-polynomial-base-rec mpb-top-expr))
-      (let ((const-ok t))
+      (let ((math-poly-base-const-ok t))
 	(math-polynomial-base-rec mpb-top-expr))))
 
 (defun math-polynomial-base-rec (mpb-expr)
@@ -1537,8 +1607,8 @@
 		(math-polynomial-base-rec (nth 1 mpb-expr)))
 	   (and (eq (car mpb-expr) 'calcFunc-exp)
 		(math-polynomial-base-rec '(var e var-e)))
-	   (and (or const-ok (math-expr-contains-vars mpb-expr))
-		(funcall mpb-pred mpb-expr)
+	   (and (or math-poly-base-const-ok (math-expr-contains-vars mpb-expr))
+		(funcall math-poly-base-pred mpb-expr)
 		mpb-expr))))
 
 ;;; Return non-nil if expr refers to any variables.
--- a/lisp/calc/calc-ext.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/calc/calc-ext.el	Mon Nov 22 11:06:39 2004 +0000
@@ -3,8 +3,7 @@
 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
-;; Maintainers: D. Goel <deego@gnufans.org>
-;;              Colin Walters <walters@debian.org>
+;; Maintainer: Jay Belanger <belanger@truman.edu>
 
 ;; This file is part of GNU Emacs.
 
@@ -2601,7 +2600,7 @@
 				 (list 'get (list 'quote func) ''math-simplify)
 				 (list 'list
 				       (list 'function
-					     (append '(lambda (expr))
+					     (append '(lambda (math-simplify-expr))
 						     code)))))))
 		  (if (symbolp funcs) (list funcs) funcs))))
 (put 'math-defsimplify 'lisp-indent-hook 1)
--- a/lisp/calc/calc-poly.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/calc/calc-poly.el	Mon Nov 22 11:06:39 2004 +0000
@@ -3,8 +3,7 @@
 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
-;; Maintainers: D. Goel <deego@gnufans.org>
-;;              Colin Walters <walters@debian.org>
+;; Maintainer: Jay Belanger <belanger@truman.edu>
 
 ;; This file is part of GNU Emacs.
 
@@ -152,6 +151,12 @@
     (math-poly-gcd pn pd)))
 
 ;;; Return only quotient to top of stack (nil if zero)
+
+;; calc-poly-div-remainder is a local variable for 
+;; calc-poly-div (in calc-alg.el), but is used by
+;; calcFunc-pdiv, which is called by calc-poly-div.
+(defvar calc-poly-div-remainder)
+
 (defun calcFunc-pdiv (pn pd &optional base)
   (let* ((calc-prefer-frac t)
 	 (math-poly-modulus (math-poly-modulus pn pd))
--- a/lisp/calc/calc-prog.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/calc/calc-prog.el	Mon Nov 22 11:06:39 2004 +0000
@@ -3,8 +3,7 @@
 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
-;; Maintainers: D. Goel <deego@gnufans.org>
-;;              Colin Walters <walters@debian.org>
+;; Maintainer: Jay Belanger <belanger@truman.edu>
 
 ;; This file is part of GNU Emacs.
 
@@ -157,6 +156,16 @@
 		(error "No such user key is defined"))
 	    kmap))))
 
+
+;; math-integral-cache-state is originally declared in calcalg2.el,
+;; it is used in calc-user-define-variable.
+(defvar math-integral-cache-state)
+
+;; calc-user-formula-alist is local to calc-user-define-formula,
+;; calc-user-define-compostion and calc-finish-formula-edit,
+;; but is used by calc-fix-user-formula.
+(defvar calc-user-formula-alist)
+
 (defun calc-user-define-formula ()
   (interactive)
   (calc-wrapper
@@ -164,7 +173,7 @@
 	  (arglist nil)
 	  (is-lambda (and (eq (car-safe form) 'calcFunc-lambda)
 			  (>= (length form) 2)))
-	  odef key keyname cmd cmd-base func alist is-symb)
+	  odef key keyname cmd cmd-base func calc-user-formula-alist is-symb)
      (if is-lambda
 	 (setq arglist (mapcar (function (lambda (x) (nth 1 x)))
 			       (nreverse (cdr (reverse (cdr form)))))
@@ -238,26 +247,28 @@
 					(and cmd (symbol-name cmd))
 					(format "%05d" (% (random) 10000)))))))
      (if is-lambda
-	 (setq alist arglist)
+	 (setq calc-user-formula-alist arglist)
        (while
 	   (progn
-	     (setq alist (read-from-minibuffer "Function argument list: "
-					       (if arglist
-						   (prin1-to-string arglist)
-						 "()")
-					       minibuffer-local-map
-					       t))
-	     (and (not (calc-subsetp alist arglist))
+	     (setq calc-user-formula-alist 
+                   (read-from-minibuffer "Function argument list: "
+                                         (if arglist
+                                             (prin1-to-string arglist)
+                                           "()")
+                                         minibuffer-local-map
+                                         t))
+	     (and (not (calc-subsetp calc-user-formula-alist arglist))
 		  (not (y-or-n-p
 			"Okay for arguments that don't appear in formula to be ignored? "))))))
-     (setq is-symb (and alist
+     (setq is-symb (and calc-user-formula-alist
 			func
 			(y-or-n-p
 			 "Leave it symbolic for non-constant arguments? ")))
-     (setq alist (mapcar (function (lambda (x)
-				     (or (cdr (assq x '((nil . arg-nil)
-							(t . arg-t))))
-					 x))) alist))
+     (setq calc-user-formula-alist 
+           (mapcar (function (lambda (x)
+                               (or (cdr (assq x '((nil . arg-nil)
+                                                  (t . arg-t))))
+                                   x))) calc-user-formula-alist))
      (if cmd
 	 (progn
 	   (calc-need-macros)
@@ -267,7 +278,7 @@
 		       '(interactive)
 		       (list 'calc-wrapper
 			     (list 'calc-enter-result
-				   (length alist)
+				   (length calc-user-formula-alist)
 				   (let ((name (symbol-name (or func cmd))))
 				     (and (string-match
 					   "\\([^-][^-]?[^-]?[^-]?\\)[^-]*\\'"
@@ -276,16 +287,16 @@
 				   (list 'cons
 					 (list 'quote func)
 					 (list 'calc-top-list-n
-					       (length alist)))))))
+					       (length calc-user-formula-alist)))))))
 	   (put cmd 'calc-user-defn t)))
      (let ((body (list 'math-normalize (calc-fix-user-formula form))))
        (fset func
 	     (append
-	      (list 'lambda alist)
+	      (list 'lambda calc-user-formula-alist)
 	      (and is-symb
 		   (mapcar (function (lambda (v)
 				       (list 'math-check-const v t)))
-			   alist))
+			   calc-user-formula-alist))
 	      (list body))))
      (put func 'calc-user-defn form)
      (setq math-integral-cache-state nil)
@@ -324,7 +335,7 @@
 		    (memq (setq temp (or (cdr (assq (nth 1 f) '((nil . arg-nil)
 								(t . arg-t))))
 					 (nth 1 f)))
-			  alist))
+			  calc-user-formula-alist))
 	       temp)
 	      ((or (math-constp f) (eq (car f) 'var))
 	       (list 'quote f))
@@ -356,7 +367,7 @@
 	  (comps (get func 'math-compose-forms))
 	  entry entry2
 	  (arglist nil)
-	  (alist nil))
+	  (calc-user-formula-alist nil))
      (if (math-zerop comp)
 	 (if (setq entry (assq calc-language comps))
 	     (put func 'math-compose-forms (delq entry comps)))
@@ -364,22 +375,25 @@
        (setq arglist (sort arglist 'string-lessp))
        (while
 	   (progn
-	     (setq alist (read-from-minibuffer "Composition argument list: "
-					       (if arglist
-						   (prin1-to-string arglist)
-						 "()")
-					       minibuffer-local-map
-					       t))
-	     (and (not (calc-subsetp alist arglist))
+	     (setq calc-user-formula-alist 
+                   (read-from-minibuffer "Composition argument list: "
+                                         (if arglist
+                                             (prin1-to-string arglist)
+                                           "()")
+                                         minibuffer-local-map
+                                         t))
+	     (and (not (calc-subsetp calc-user-formula-alist arglist))
 		  (y-or-n-p
 		   "Okay for arguments that don't appear in formula to be invisible? "))))
        (or (setq entry (assq calc-language comps))
 	   (put func 'math-compose-forms
 		(cons (setq entry (list calc-language)) comps)))
-       (or (setq entry2 (assq (length alist) (cdr entry)))
+       (or (setq entry2 (assq (length calc-user-formula-alist) (cdr entry)))
 	   (setcdr entry
-		   (cons (setq entry2 (list (length alist))) (cdr entry))))
-       (setcdr entry2 (list 'lambda alist (calc-fix-user-formula comp))))
+		   (cons (setq entry2 
+                               (list (length calc-user-formula-alist))) (cdr entry))))
+       (setcdr entry2 
+               (list 'lambda calc-user-formula-alist (calc-fix-user-formula comp))))
      (calc-pop-stack 1)
      (calc-do-refresh))))
 
@@ -445,6 +459,8 @@
 			     lang)))
   (calc-show-edit-buffer))
 
+(defvar calc-original-buffer)
+
 (defun calc-finish-user-syntax-edit (lang)
   (let ((tab (calc-read-parse-table calc-original-buffer lang))
 	(entry (assq lang calc-user-parse-tables)))
@@ -458,6 +474,13 @@
 		(delq entry calc-user-parse-tables)))))
   (switch-to-buffer calc-original-buffer))
 
+;; The variable calc-lang is local to calc-write-parse-table, but is
+;; used by calc-write-parse-table-part which is called by 
+;; calc-write-parse-table.  The variable is also local to 
+;; calc-read-parse-table, but is used by calc-fix-token-name which
+;; is called (indirectly) by calc-read-parse-table.
+(defvar calc-lang)
+
 (defun calc-write-parse-table (tab calc-lang)
   (let ((p tab))
     (while p
@@ -876,7 +899,7 @@
 	    (goto-char (+ start (nth 1 val)))
 	    (error (nth 2 val))))
       (setcar (cdr body)
-	      (let ((alist (nth 1 (symbol-function func))))
+	      (let ((calc-user-formula-alist (nth 1 (symbol-function func))))
 		(calc-fix-user-formula val)))
       (put func 'calc-user-defn val))))
 
@@ -1277,20 +1300,33 @@
 
 
 (defvar calc-kbd-push-level 0)
+
+;; The variables var-q0 through var-q9 are the "quick" variables.
+(defvar var-q0 nil)
+(defvar var-q1 nil)
+(defvar var-q2 nil)
+(defvar var-q3 nil)
+(defvar var-q4 nil)
+(defvar var-q5 nil)
+(defvar var-q6 nil)
+(defvar var-q7 nil)
+(defvar var-q8 nil)
+(defvar var-q9 nil)
+
 (defun calc-kbd-push (arg)
   (interactive "P")
   (calc-wrapper
    (let* ((defs (and arg (> (prefix-numeric-value arg) 0)))
-	  (var-q0 (and (boundp 'var-q0) var-q0))
-	  (var-q1 (and (boundp 'var-q1) var-q1))
-	  (var-q2 (and (boundp 'var-q2) var-q2))
-	  (var-q3 (and (boundp 'var-q3) var-q3))
-	  (var-q4 (and (boundp 'var-q4) var-q4))
-	  (var-q5 (and (boundp 'var-q5) var-q5))
-	  (var-q6 (and (boundp 'var-q6) var-q6))
-	  (var-q7 (and (boundp 'var-q7) var-q7))
-	  (var-q8 (and (boundp 'var-q8) var-q8))
-	  (var-q9 (and (boundp 'var-q9) var-q9))
+	  (var-q0 var-q0)
+	  (var-q1 var-q1)
+	  (var-q2 var-q2)
+	  (var-q3 var-q3)
+	  (var-q4 var-q4)
+	  (var-q5 var-q5)
+	  (var-q6 var-q6)
+	  (var-q7 var-q7)
+	  (var-q8 var-q8)
+	  (var-q9 var-q9)
 	  (calc-internal-prec (if defs 12 calc-internal-prec))
 	  (calc-word-size (if defs 32 calc-word-size))
 	  (calc-angle-mode (if defs 'deg calc-angle-mode))
@@ -1613,7 +1649,7 @@
 	((eq (car a) 'var)
 	 (if (memq (nth 2 a) '(var-inf var-uinf var-nan)) 12 100))
 	((eq (car a) 'vec) (if (math-matrixp a) 102 101))
-	(t (math-calcFunc-to-var func))))
+	(t (math-calcFunc-to-var (car a)))))
 
 (defun calcFunc-integer (a)
   (if (Math-integerp a)
@@ -1868,7 +1904,12 @@
 	(list (cons 'catch (cons '(quote math-return) body)))
       body)))
 
-(defun math-define-body (body exp-env)
+;; The variable math-exp-env is local to math-define-body, but is
+;; used by math-define-exp, which is called (indirectly) by
+;; by math-define-body.
+(defvar math-exp-env)
+
+(defun math-define-body (body math-exp-env)
   (math-define-list body))
 
 (defun math-define-list (body &optional quote)
@@ -1897,7 +1938,7 @@
 		  (if (and (consp (nth 1 exp))
 			   (eq (car (nth 1 exp)) 'lambda))
 		      (cons 'quote
-			    (math-define-lambda (nth 1 exp) exp-env))
+			    (math-define-lambda (nth 1 exp) math-exp-env))
 		    exp))
 		 ((memq func '(let let* for foreach))
 		  (let ((head (nth 1 exp))
@@ -1914,7 +1955,7 @@
 				 (math-define-body body
 						   (nconc
 						    (math-define-let-env head)
-						    exp-env)))))))
+						    math-exp-env)))))))
 		 ((and (memq func '(setq setf))
 		       (math-complicated-lhs (cdr exp)))
 		  (if (> (length exp) 3)
@@ -1925,7 +1966,7 @@
 			(cons (nth 1 exp)
 			      (math-define-body (cdr (cdr exp))
 						(cons (nth 1 exp)
-						      exp-env)))))
+						      math-exp-env)))))
 		 ((eq func 'cond)
 		  (cons func
 			(math-define-cond (cdr exp))))
@@ -2023,13 +2064,13 @@
 				     (cons func args))
 				    (t
 				     (cons cfunc args)))))))))
-		 (t (cons func args)))))
+		 (t (cons func (math-define-list (cdr exp))))))) ;;args
 	((symbolp exp)
 	 (let ((prim (assq exp math-prim-vars))
 	       (name (symbol-name exp)))
 	   (cond (prim
 		  (cdr prim))
-		 ((memq exp exp-env)
+		 ((memq exp math-exp-env)
 		  exp)
 		 ((string-match "-" name)
 		  exp)
--- a/lisp/calc/calc-rewr.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/calc/calc-rewr.el	Mon Nov 22 11:06:39 2004 +0000
@@ -3,8 +3,7 @@
 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
-;; Maintainers: D. Goel <deego@gnufans.org>
-;;              Colin Walters <walters@debian.org>
+;; Maintainer: Jay Belanger <belanger@truman.edu>
 
 ;; This file is part of GNU Emacs.
 
@@ -36,6 +35,11 @@
 
 
 (defvar math-rewrite-default-iters 100)
+
+;; The variable calc-rewr-sel is local to calc-rewrite-selection and 
+;; calc-rewrite, but is used by calc-locate-selection-marker.
+(defvar calc-rewr-sel)
+
 (defun calc-rewrite-selection (rules-str &optional many prefix)
   (interactive "sRewrite rule(s): \np")
   (calc-slow-wrapper
@@ -43,9 +47,10 @@
    (let* ((num (max 1 (calc-locate-cursor-element (point))))
 	  (reselect t)
 	  (pop-rules nil)
+          rules
 	  (entry (calc-top num 'entry))
 	  (expr (car entry))
-	  (sel (calc-auto-selection entry))
+	  (calc-rewr-sel (calc-auto-selection entry))
 	  (math-rewrite-selections t)
 	  (math-rewrite-default-iters 1))
      (if (or (null rules-str) (equal rules-str "") (equal rules-str "$"))
@@ -73,10 +78,10 @@
      (if (eq many 0)
 	 (setq many '(var inf var-inf))
        (if many (setq many (prefix-numeric-value many))))
-     (if sel
+     (if calc-rewr-sel
 	 (setq expr (calc-replace-sub-formula (car entry)
-					      sel
-					      (list 'calcFunc-select sel)))
+					      calc-rewr-sel
+					      (list 'calcFunc-select calc-rewr-sel)))
        (setq expr (car entry)
 	     reselect nil
 	     math-rewrite-selections nil))
@@ -85,22 +90,22 @@
 		  (math-rewrite
 		   (calc-normalize expr)
 		   rules many)))
-	   sel nil
+	   calc-rewr-sel nil
 	   expr (calc-locate-select-marker expr))
-     (or (consp sel) (setq sel nil))
+     (or (consp calc-rewr-sel) (setq calc-rewr-sel nil))
      (if pop-rules (calc-pop-stack 1))
      (calc-pop-push-record-list 1 (or prefix "rwrt") (list expr)
 				(- num (if pop-rules 1 0))
-				(list (and reselect sel))))
+				(list (and reselect calc-rewr-sel))))
    (calc-handle-whys)))
 
-(defun calc-locate-select-marker (expr)    ; changes "sel"
+(defun calc-locate-select-marker (expr)
   (if (Math-primp expr)
       expr
     (if (and (eq (car expr) 'calcFunc-select)
 	     (= (length expr) 2))
 	(progn
-	  (setq sel (if sel t (nth 1 expr)))
+	  (setq calc-rewr-sel (if calc-rewr-sel t (nth 1 expr)))
 	  (nth 1 expr))
       (cons (car expr)
 	    (mapcar 'calc-locate-select-marker (cdr expr))))))
@@ -138,7 +143,7 @@
 	 (setq many '(var inf var-inf))
        (if many (setq many (prefix-numeric-value many))))
      (setq expr (calc-normalize (math-rewrite expr rules many)))
-     (let (sel)
+     (let (calc-rewr-sel)
        (setq expr (calc-locate-select-marker expr)))
      (calc-pop-push-record-list n "rwrt" (list expr)))
    (calc-handle-whys)))
@@ -165,33 +170,38 @@
        (calc-enter-result n "mtch" (math-match-patterns pat expr nil))))))
 
 
+(defvar math-mt-many)
 
-(defun math-rewrite (whole-expr rules &optional math-mt-many)
-  (let ((crules (math-compile-rewrites rules))
-	(heads (math-rewrite-heads whole-expr))
-	(trace-buffer (get-buffer "*Trace*"))
-	(calc-display-just 'center)
-	(calc-display-origin 39)
-	(calc-line-breaking 78)
-	(calc-line-numbering nil)
-	(calc-show-selections t)
-	(calc-why nil)
-	(math-mt-func (function
-                       (lambda (x)
-                         (let ((result (math-apply-rewrites x (cdr crules)
-                                                            heads crules)))
-                           (if result
-                               (progn
-                                 (if trace-buffer
-                                     (let ((fmt (math-format-stack-value
-                                                 (list result nil nil))))
-                                       (save-excursion
-                                         (set-buffer trace-buffer)
-                                         (insert "\nrewrite to\n" fmt "\n"))))
-                                 (setq heads (math-rewrite-heads result heads t))))
-                           result)))))
+;; The variable math-rewrite-whole-expr is local to math-rewrite,
+;; but is used by math-rewrite-phase
+(defvar math-rewrite-whole-expr)
+
+(defun math-rewrite (math-rewrite-whole-expr rules &optional math-mt-many)
+  (let* ((crules (math-compile-rewrites rules))
+         (heads (math-rewrite-heads math-rewrite-whole-expr))
+         (trace-buffer (get-buffer "*Trace*"))
+         (calc-display-just 'center)
+         (calc-display-origin 39)
+         (calc-line-breaking 78)
+         (calc-line-numbering nil)
+         (calc-show-selections t)
+         (calc-why nil)
+         (math-mt-func (function
+                        (lambda (x)
+                          (let ((result (math-apply-rewrites x (cdr crules)
+                                                             heads crules)))
+                            (if result
+                                (progn
+                                  (if trace-buffer
+                                      (let ((fmt (math-format-stack-value
+                                                  (list result nil nil))))
+                                        (save-excursion
+                                          (set-buffer trace-buffer)
+                                          (insert "\nrewrite to\n" fmt "\n"))))
+                                  (setq heads (math-rewrite-heads result heads t))))
+                            result)))))
     (if trace-buffer
-	(let ((fmt (math-format-stack-value (list whole-expr nil nil))))
+	(let ((fmt (math-format-stack-value (list math-rewrite-whole-expr nil nil))))
 	  (save-excursion
 	    (set-buffer trace-buffer)
 	    (setq truncate-lines t)
@@ -203,26 +213,27 @@
     (if (equal math-mt-many '(neg (var inf var-inf))) (setq math-mt-many -1000000))
     (math-rewrite-phase (nth 3 (car crules)))
     (if trace-buffer
-	(let ((fmt (math-format-stack-value (list whole-expr nil nil))))
+	(let ((fmt (math-format-stack-value (list math-rewrite-whole-expr nil nil))))
 	  (save-excursion
 	    (set-buffer trace-buffer)
 	    (insert "\nDone rewriting"
 		    (if (= math-mt-many 0) " (reached iteration limit)" "")
 		    ":\n" fmt "\n"))))
-    whole-expr))
+    math-rewrite-whole-expr))
 
 (defun math-rewrite-phase (sched)
   (while (and sched (/= math-mt-many 0))
     (if (listp (car sched))
-	(while (let ((save-expr whole-expr))
+	(while (let ((save-expr math-rewrite-whole-expr))
 		 (math-rewrite-phase (car sched))
-		 (not (equal whole-expr save-expr))))
+		 (not (equal math-rewrite-whole-expr save-expr))))
       (if (symbolp (car sched))
 	  (progn
-	    (setq whole-expr (math-normalize (list (car sched) whole-expr)))
+	    (setq math-rewrite-whole-expr 
+                  (math-normalize (list (car sched) math-rewrite-whole-expr)))
 	    (if trace-buffer
 		(let ((fmt (math-format-stack-value
-			    (list whole-expr nil nil))))
+			    (list math-rewrite-whole-expr nil nil))))
 		  (save-excursion
 		    (set-buffer trace-buffer)
 		    (insert "\ncall "
@@ -233,10 +244,10 @@
 	      (save-excursion
 		(set-buffer trace-buffer)
 		(insert (format "\n(Phase %d)\n" math-rewrite-phase))))
-	  (while (let ((save-expr whole-expr))
-		   (setq whole-expr (math-normalize
-				     (math-map-tree-rec whole-expr)))
-		   (not (equal whole-expr save-expr)))))))
+	  (while (let ((save-expr math-rewrite-whole-expr))
+		   (setq math-rewrite-whole-expr (math-normalize
+				     (math-map-tree-rec math-rewrite-whole-expr)))
+		   (not (equal math-rewrite-whole-expr save-expr)))))))
     (setq sched (cdr sched))))
 
 (defun calcFunc-rewrite (expr rules &optional many)
@@ -488,6 +499,28 @@
 
 (defvar math-rewrite-whole nil)
 (defvar math-make-import-list nil)
+
+;; The variable math-import-list is local to part of math-compile-rewrites,
+;; but is also used in a different part, and so the local version could
+;; be affected by the non-local version when math-compile-rewrites calls itself. 
+(defvar math-import-list nil)
+
+;; The variables math-regs, math-num-regs, math-prog-last, math-bound-vars, 
+;; math-conds, math-copy-neg, math-rhs, math-pattern, math-remembering and
+;; math-aliased-vars are local to math-compile-rewrites, 
+;; but are used by many functions math-rwcomp-*, which are called by 
+;; math-compile-rewrites.
+(defvar math-regs)
+(defvar math-num-regs)
+(defvar math-prog-last)
+(defvar math-bound-vars)
+(defvar math-conds)
+(defvar math-copy-neg)
+(defvar math-rhs)
+(defvar math-pattern)
+(defvar math-remembering)
+(defvar math-aliased-vars)
+
 (defun math-compile-rewrites (rules &optional name)
   (if (eq (car-safe rules) 'var)
       (let ((prop (get (nth 2 rules) 'math-rewrite-cache))
@@ -731,26 +764,34 @@
 	      (math-flatten-lands (nth 2 expr)))
     (list expr)))
 
+;; The variables math-rewrite-heads-heads (i.e.; heads for math-rewrite-heads)
+;; math-rewrite-heads-blanks and math-rewrite-heads-skips are local to 
+;; math-rewrite-heads, but used by math-rewrite-heads-rec, which is called by 
+;; math-rewrite-heads.
+(defvar math-rewrite-heads-heads)
+(defvar math-rewrite-heads-skips)
+(defvar math-rewrite-heads-blanks)
+
 (defun math-rewrite-heads (expr &optional more all)
-  (let ((heads more)
-	(skips (and (not all)
+  (let ((math-rewrite-heads-heads more)
+	(math-rewrite-heads-skips (and (not all)
 		    '(calcFunc-apply calcFunc-condition calcFunc-opt
 				     calcFunc-por calcFunc-pnot)))
-	(blanks (and (not all)
+	(math-rewrite-heads-blanks (and (not all)
 		     '(calcFunc-quote calcFunc-plain calcFunc-select
 				      calcFunc-cons calcFunc-rcons
 				      calcFunc-pand))))
     (or (Math-primp expr)
 	(math-rewrite-heads-rec expr))
-    heads))
+    math-rewrite-heads-heads))
 
 (defun math-rewrite-heads-rec (expr)
-  (or (memq (car expr) skips)
+  (or (memq (car expr) math-rewrite-heads-skips)
       (progn
-	(or (memq (car expr) heads)
-	    (memq (car expr) blanks)
+	(or (memq (car expr) math-rewrite-heads-heads)
+	    (memq (car expr) math-rewrite-heads-blanks)
 	    (memq 'algebraic (get (car expr) 'math-rewrite-props))
-	    (setq heads (cons (car expr) heads)))
+	    (setq math-rewrite-heads-heads (cons (car expr) math-rewrite-heads-heads)))
 	(while (setq expr (cdr expr))
 	  (or (Math-primp (car expr))
 	      (math-rewrite-heads-rec (car expr)))))))
@@ -793,21 +834,31 @@
 	(list 'neg (list 'calcFunc-register (nth 1 entry)))
       (list 'calcFunc-register (nth 1 entry)))))
 
-(defun math-rwcomp-substitute (expr old new)
-  (if (and (eq (car-safe old) 'var)
-	   (memq (car-safe new) '(var calcFunc-lambda)))
-      (let ((old-func (math-var-to-calcFunc old))
-	    (new-func (math-var-to-calcFunc new)))
+;; The variables math-rwcomp-subst-old, math-rwcomp-subst-new,
+;; math-rwcomp-subst-old-func and math-rwcomp-subst-new-func
+;; are local to math-rwcomp-substitute, but are used by
+;; math-rwcomp-subst-rec, which is called by math-rwcomp-substitute.
+(defvar math-rwcomp-subst-new)
+(defvar math-rwcomp-subst-old)
+(defvar math-rwcomp-subst-new-func)
+(defvar math-rwcomp-subst-old-func)
+
+(defun math-rwcomp-substitute (expr math-rwcomp-subst-old math-rwcomp-subst-new)
+  (if (and (eq (car-safe math-rwcomp-subst-old) 'var)
+	   (memq (car-safe math-rwcomp-subst-new) '(var calcFunc-lambda)))
+      (let ((math-rwcomp-subst-old-func (math-var-to-calcFunc math-rwcomp-subst-old))
+	    (math-rwcomp-subst-new-func (math-var-to-calcFunc math-rwcomp-subst-new)))
 	(math-rwcomp-subst-rec expr))
-    (let ((old-func nil))
+    (let ((math-rwcomp-subst-old-func nil))
       (math-rwcomp-subst-rec expr))))
 
 (defun math-rwcomp-subst-rec (expr)
-  (cond ((equal expr old) new)
+  (cond ((equal expr math-rwcomp-subst-old) math-rwcomp-subst-new)
 	((Math-primp expr) expr)
-	(t (if (eq (car expr) old-func)
-	       (math-build-call new-func (mapcar 'math-rwcomp-subst-rec
-						 (cdr expr)))
+	(t (if (eq (car expr) math-rwcomp-subst-old-func)
+	       (math-build-call math-rwcomp-subst-new-func 
+                                (mapcar 'math-rwcomp-subst-rec
+                                        (cdr expr)))
 	     (cons (car expr)
 		   (mapcar 'math-rwcomp-subst-rec (cdr expr)))))))
 
@@ -1268,22 +1319,18 @@
 (defun math-rwcomp-assoc-args (expr)
   (if (and (eq (car-safe (nth 1 expr)) (car expr))
 	   (= (length (nth 1 expr)) 3))
-      (math-rwcomp-assoc-args (nth 1 expr))
-    (setq math-args (cons (nth 1 expr) math-args)))
+      (math-rwcomp-assoc-args (nth 1 expr)))
   (if (and (eq (car-safe (nth 2 expr)) (car expr))
 	   (= (length (nth 2 expr)) 3))
-      (math-rwcomp-assoc-args (nth 2 expr))
-    (setq math-args (cons (nth 2 expr) math-args))))
+      (math-rwcomp-assoc-args (nth 2 expr))))
 
 (defun math-rwcomp-addsub-args (expr)
   (if (memq (car-safe (nth 1 expr)) '(+ -))
-      (math-rwcomp-addsub-args (nth 1 expr))
-    (setq math-args (cons (nth 1 expr) math-args)))
+      (math-rwcomp-addsub-args (nth 1 expr)))
   (if (eq (car expr) '-)
-      (setq math-args (cons (math-rwcomp-neg (nth 2 expr)) math-args))
+      ()
     (if (eq (car-safe (nth 2 expr)) '+)
-	(math-rwcomp-addsub-args (nth 2 expr))
-      (setq math-args (cons (nth 2 expr) math-args)))))
+	(math-rwcomp-addsub-args (nth 2 expr)))))
 
 (defun math-rwcomp-order (a b)
   (< (math-rwcomp-priority (car a))
@@ -1419,14 +1466,23 @@
 	      form
 	      '(setcar rules orig))))
 
-(setq math-rewrite-phase 1)
+(defvar math-rewrite-phase 1)
 
-(defun math-apply-rewrites (expr rules &optional heads ruleset)
+;; The variable math-apply-rw-regs is local to math-apply-rewrites,
+;; but is used by math-rwapply-replace-regs and math-rwapply-reg-looks-negp
+;; which are called by math-apply-rewrites.
+(defvar math-apply-rw-regs)
+
+;; The variable math-apply-rw-ruleset is local to math-apply-rewrites,
+;; but is used by math-rwapply-remember.
+(defvar math-apply-rw-ruleset)
+
+(defun math-apply-rewrites (expr rules &optional heads math-apply-rw-ruleset)
   (and
    (setq rules (cdr (or (assq (car-safe expr) rules)
 			(assq nil rules))))
    (let ((result nil)
-	 op regs inst part pc mark btrack
+	 op math-apply-rw-regs inst part pc mark btrack
 	 (tracing math-rwcomp-tracing)
 	 (phase math-rewrite-phase))
      (while rules
@@ -1437,35 +1493,37 @@
 	(and (setq part (nth 3 (car rules)))
 	     (not (memq phase part)))
 	(progn
-	  (setq regs (car (car rules))
+	  (setq math-apply-rw-regs (car (car rules))
 		pc (nth 1 (car rules))
 		btrack nil)
-	  (aset regs 0 expr)
+	  (aset math-apply-rw-regs 0 expr)
 	  (while pc
 
 	    (and tracing
 		 (progn (terpri) (princ (car pc))
 			(if (and (natnump (nth 1 (car pc)))
-				 (< (nth 1 (car pc)) (length regs)))
-			    (princ (format "\n  part = %s"
-					   (aref regs (nth 1 (car pc))))))))
+				 (< (nth 1 (car pc)) (length math-apply-rw-regs)))
+			    (princ 
+                             (format "\n  part = %s"
+                                     (aref math-apply-rw-regs (nth 1 (car pc))))))))
 
 	    (cond ((eq (setq op (car (setq inst (car pc)))) 'func)
-		   (if (and (consp (setq part (aref regs (car (cdr inst)))))
+		   (if (and (consp 
+                             (setq part (aref math-apply-rw-regs (car (cdr inst)))))
 			    (eq (car part)
 				(car (setq inst (cdr (cdr inst)))))
 			    (progn
 			      (while (and (setq inst (cdr inst)
 						part (cdr part))
 					  inst)
-				(aset regs (car inst) (car part)))
+				(aset math-apply-rw-regs (car inst) (car part)))
 			      (not (or inst part))))
 		       (setq pc (cdr pc))
 		     (math-rwfail)))
 
 		  ((eq op 'same)
-		   (if (or (equal (setq part (aref regs (nth 1 inst)))
-				  (setq mark (aref regs (nth 2 inst))))
+		   (if (or (equal (setq part (aref math-apply-rw-regs (nth 1 inst)))
+				  (setq mark (aref math-apply-rw-regs (nth 2 inst))))
 			   (Math-equal part mark))
 		       (setq pc (cdr pc))
 		     (math-rwfail)))
@@ -1474,22 +1532,23 @@
 			calc-matrix-mode
 			(not (eq calc-matrix-mode 'scalar))
 			(eq (car (nth 2 inst)) '*)
-			(consp (setq part (aref regs (car (cdr inst)))))
+			(consp (setq part (aref math-apply-rw-regs (car (cdr inst)))))
 			(eq (car part) '*)
 			(not (math-known-scalarp part)))
 		   (setq mark (nth 3 inst)
 			 pc (cdr pc))
 		   (if (aref mark 4)
 		       (progn
-			 (aset regs (nth 4 inst) (nth 2 part))
+			 (aset math-apply-rw-regs (nth 4 inst) (nth 2 part))
 			 (aset mark 1 (cdr (cdr part))))
-		     (aset regs (nth 4 inst) (nth 1 part))
+		     (aset math-apply-rw-regs (nth 4 inst) (nth 1 part))
 		     (aset mark 1 (cdr part)))
 		   (aset mark 0 (cdr part))
 		   (aset mark 2 0))
 
 		  ((eq op 'try)
-		   (if (and (consp (setq part (aref regs (car (cdr inst)))))
+		   (if (and (consp (setq part 
+                                         (aref math-apply-rw-regs (car (cdr inst)))))
 			    (memq (car part) (nth 2 inst))
 			    (= (length part) 3)
 			    (or (not (eq (car part) '/))
@@ -1525,7 +1584,7 @@
 					      op))
 			       btrack (cons pc btrack)
 			       pc (cdr pc))
-			 (aset regs (nth 2 inst) (car op))
+			 (aset math-apply-rw-regs (nth 2 inst) (car op))
 			 (aset mark 0 op)
 			 (aset mark 1 op)
 			 (aset mark 2 (if (cdr (cdr op)) 1 0)))
@@ -1537,12 +1596,12 @@
 			     (progn
 			       (setq mark (nth 3 inst)
 				     pc (cdr pc))
-			       (aset regs (nth 4 inst) (nth 1 part))
+			       (aset math-apply-rw-regs (nth 4 inst) (nth 1 part))
 			       (aset mark 1 -1)
 			       (aset mark 2 4))
 			   (setq mark (nth 3 inst)
 				 pc (cdr pc))
-			   (aset regs (nth 4 inst) part)
+			   (aset math-apply-rw-regs (nth 4 inst) part)
 			   (aset mark 2 3))
 		       (math-rwfail))))
 
@@ -1551,7 +1610,7 @@
 			 mark (nth 3 part)
 			 op (aref mark 2)
 			 pc (cdr pc))
-		   (aset regs (nth 2 inst)
+		   (aset math-apply-rw-regs (nth 2 inst)
 			 (cond
 			  ((eq op 0)
 			   (if (eq (aref mark 0) (aref mark 1))
@@ -1591,17 +1650,17 @@
 
 		  ((eq op 'select)
 		   (setq pc (cdr pc))
-		   (if (and (consp (setq part (aref regs (nth 1 inst))))
+		   (if (and (consp (setq part (aref math-apply-rw-regs (nth 1 inst))))
 			    (eq (car part) 'calcFunc-select))
-		       (aset regs (nth 2 inst) (nth 1 part))
+		       (aset math-apply-rw-regs (nth 2 inst) (nth 1 part))
 		     (if math-rewrite-selections
 			 (math-rwfail)
-		       (aset regs (nth 2 inst) part))))
+		       (aset math-apply-rw-regs (nth 2 inst) part))))
 
 		  ((eq op 'same-neg)
-		   (if (or (equal (setq part (aref regs (nth 1 inst)))
+		   (if (or (equal (setq part (aref math-apply-rw-regs (nth 1 inst)))
 				  (setq mark (math-neg
-					      (aref regs (nth 2 inst)))))
+					      (aref math-apply-rw-regs (nth 2 inst)))))
 			   (Math-equal part mark))
 		       (setq pc (cdr pc))
 		     (math-rwfail)))
@@ -1613,22 +1672,24 @@
 			 op (aref mark 2))
 		   (cond ((eq op 0)
 			  (if (setq op (cdr (aref mark 1)))
-			      (aset regs (nth 4 inst) (car (aset mark 1 op)))
+			      (aset math-apply-rw-regs (nth 4 inst) 
+                                    (car (aset mark 1 op)))
 			    (if (nth 5 inst)
 				(progn
 				  (aset mark 2 3)
-				  (aset regs (nth 4 inst)
-					(aref regs (nth 1 inst))))
+				  (aset math-apply-rw-regs (nth 4 inst)
+					(aref math-apply-rw-regs (nth 1 inst))))
 			      (math-rwfail t))))
 			 ((eq op 1)
 			  (if (setq op (cdr (aref mark 1)))
-			      (aset regs (nth 4 inst) (car (aset mark 1 op)))
+			      (aset math-apply-rw-regs (nth 4 inst) 
+                                    (car (aset mark 1 op)))
 			    (if (= (aref mark 3) 1)
 				(if (nth 5 inst)
 				    (progn
 				      (aset mark 2 3)
-				      (aset regs (nth 4 inst)
-					    (aref regs (nth 1 inst))))
+				      (aset math-apply-rw-regs (nth 4 inst)
+					    (aref math-apply-rw-regs (nth 1 inst))))
 				  (math-rwfail t))
 			      (aset mark 2 2)
 			      (aset mark 1 (cons nil (aref mark 0)))
@@ -1666,19 +1727,20 @@
 						   (list '- part
 							 (nth 1 (car mark)))
 						 (list op part (car mark))))))
-				(aset regs (nth 4 inst) part))
+				(aset math-apply-rw-regs (nth 4 inst) part))
 			    (if (nth 5 inst)
 				(progn
 				  (aset mark 2 3)
-				  (aset regs (nth 4 inst)
-					(aref regs (nth 1 inst))))
+				  (aset math-apply-rw-regs (nth 4 inst)
+					(aref math-apply-rw-regs (nth 1 inst))))
 			      (math-rwfail t))))
 			 ((eq op 4)
 			  (setq btrack (cdr btrack)))
 			 (t (math-rwfail t))))
 
 		  ((eq op 'integer)
-		   (if (Math-integerp (setq part (aref regs (nth 1 inst))))
+		   (if (Math-integerp (setq part 
+                                            (aref math-apply-rw-regs (nth 1 inst))))
 		       (setq pc (cdr pc))
 		     (if (Math-primp part)
 			 (math-rwfail)
@@ -1688,7 +1750,7 @@
 			 (math-rwfail)))))
 
 		  ((eq op 'real)
-		   (if (Math-realp (setq part (aref regs (nth 1 inst))))
+		   (if (Math-realp (setq part (aref math-apply-rw-regs (nth 1 inst))))
 		       (setq pc (cdr pc))
 		     (if (Math-primp part)
 			 (math-rwfail)
@@ -1698,7 +1760,7 @@
 			 (math-rwfail)))))
 
 		  ((eq op 'constant)
-		   (if (math-constp (setq part (aref regs (nth 1 inst))))
+		   (if (math-constp (setq part (aref math-apply-rw-regs (nth 1 inst))))
 		       (setq pc (cdr pc))
 		     (if (Math-primp part)
 			 (math-rwfail)
@@ -1708,7 +1770,8 @@
 			 (math-rwfail)))))
 
 		  ((eq op 'negative)
-		   (if (math-looks-negp (setq part (aref regs (nth 1 inst))))
+		   (if (math-looks-negp (setq part 
+                                              (aref math-apply-rw-regs (nth 1 inst))))
 		       (setq pc (cdr pc))
 		     (if (Math-primp part)
 			 (math-rwfail)
@@ -1718,15 +1781,16 @@
 			 (math-rwfail)))))
 
 		  ((eq op 'rel)
-		   (setq part (math-compare (aref regs (nth 1 inst))
-					    (aref regs (nth 3 inst)))
+		   (setq part (math-compare (aref math-apply-rw-regs (nth 1 inst))
+					    (aref math-apply-rw-regs (nth 3 inst)))
 			 op (nth 2 inst))
 		   (if (= part 2)
 		       (setq part (math-rweval
 				   (math-simplify
 				    (calcFunc-sign
-				     (math-sub (aref regs (nth 1 inst))
-					       (aref regs (nth 3 inst))))))))
+				     (math-sub 
+                                      (aref math-apply-rw-regs (nth 1 inst))
+                                      (aref math-apply-rw-regs (nth 3 inst))))))))
 		   (if (cond ((eq op 'calcFunc-eq)
 			      (eq part 0))
 			     ((eq op 'calcFunc-neq)
@@ -1743,44 +1807,48 @@
 		     (math-rwfail)))
 
 		  ((eq op 'func-def)
-		   (if (and (consp (setq part (aref regs (car (cdr inst)))))
-			    (eq (car part)
-				(car (setq inst (cdr (cdr inst))))))
+		   (if (and 
+                        (consp (setq part (aref math-apply-rw-regs (car (cdr inst)))))
+                        (eq (car part)
+                            (car (setq inst (cdr (cdr inst))))))
 		       (progn
 			 (setq inst (cdr inst)
 			       mark (car inst))
 			 (while (and (setq inst (cdr inst)
 					   part (cdr part))
 				     inst)
-			   (aset regs (car inst) (car part)))
+			   (aset math-apply-rw-regs (car inst) (car part)))
 			 (if (or inst part)
 			     (setq pc (cdr pc))
 			   (while (eq (car (car (setq pc (cdr pc))))
 				      'func-def))
 			   (setq pc (cdr pc))   ; skip over "func"
 			   (while mark
-			     (aset regs (cdr (car mark)) (car (car mark)))
+			     (aset math-apply-rw-regs (cdr (car mark)) (car (car mark)))
 			     (setq mark (cdr mark)))))
 		     (math-rwfail)))
 
 		  ((eq op 'func-opt)
-		   (if (or (not (and (consp
-				      (setq part (aref regs (car (cdr inst)))))
-				     (eq (car part) (nth 2 inst))))
+		   (if (or (not 
+                            (and 
+                             (consp
+                              (setq part (aref math-apply-rw-regs (car (cdr inst)))))
+                             (eq (car part) (nth 2 inst))))
 			   (and (= (length part) 2)
 				(setq part (nth 1 part))))
 		       (progn
 			 (setq mark (nth 3 inst))
-			 (aset regs (nth 4 inst) part)
+			 (aset math-apply-rw-regs (nth 4 inst) part)
 			 (while (eq (car (car (setq pc (cdr pc)))) 'func-def))
 			 (setq pc (cdr pc))   ; skip over "func"
 			 (while mark
-			   (aset regs (cdr (car mark)) (car (car mark)))
+			   (aset math-apply-rw-regs (cdr (car mark)) (car (car mark)))
 			   (setq mark (cdr mark))))
 		     (setq pc (cdr pc))))
 
 		  ((eq op 'mod)
-		   (if (if (Math-zerop (setq part (aref regs (nth 1 inst))))
+		   (if (if (Math-zerop 
+                            (setq part (aref math-apply-rw-regs (nth 1 inst))))
 			   (Math-zerop (nth 3 inst))
 			 (and (not (Math-zerop (nth 2 inst)))
 			      (progn
@@ -1793,34 +1861,38 @@
 		     (math-rwfail)))
 
 		  ((eq op 'apply)
-		   (if (and (consp (setq part (aref regs (car (cdr inst)))))
+		   (if (and (consp 
+                             (setq part (aref math-apply-rw-regs (car (cdr inst)))))
 			    (not (Math-objvecp part))
 			    (not (eq (car part) 'var)))
 		       (progn
-			 (aset regs (nth 2 inst)
+			 (aset math-apply-rw-regs (nth 2 inst)
 			       (math-calcFunc-to-var (car part)))
-			 (aset regs (nth 3 inst)
+			 (aset math-apply-rw-regs (nth 3 inst)
 			       (cons 'vec (cdr part)))
 			 (setq pc (cdr pc)))
 		     (math-rwfail)))
 
 		  ((eq op 'cons)
-		   (if (and (consp (setq part (aref regs (car (cdr inst)))))
+		   (if (and (consp 
+                             (setq part (aref math-apply-rw-regs (car (cdr inst)))))
 			    (eq (car part) 'vec)
 			    (cdr part))
 		       (progn
-			 (aset regs (nth 2 inst) (nth 1 part))
-			 (aset regs (nth 3 inst) (cons 'vec (cdr (cdr part))))
+			 (aset math-apply-rw-regs (nth 2 inst) (nth 1 part))
+			 (aset math-apply-rw-regs (nth 3 inst) 
+                               (cons 'vec (cdr (cdr part))))
 			 (setq pc (cdr pc)))
 		     (math-rwfail)))
 
 		  ((eq op 'rcons)
-		   (if (and (consp (setq part (aref regs (car (cdr inst)))))
+		   (if (and (consp 
+                             (setq part (aref math-apply-rw-regs (car (cdr inst)))))
 			    (eq (car part) 'vec)
 			    (cdr part))
 		       (progn
-			 (aset regs (nth 2 inst) (calcFunc-rhead part))
-			 (aset regs (nth 3 inst) (calcFunc-rtail part))
+			 (aset math-apply-rw-regs (nth 2 inst) (calcFunc-rhead part))
+			 (aset math-apply-rw-regs (nth 3 inst) (calcFunc-rtail part))
 			 (setq pc (cdr pc)))
 		     (math-rwfail)))
 
@@ -1833,19 +1905,20 @@
 		     (math-rwfail)))
 
 		  ((eq op 'let)
-		   (aset regs (nth 1 inst)
+		   (aset math-apply-rw-regs (nth 1 inst)
 			 (math-rweval
 			  (math-normalize
 			   (math-rwapply-replace-regs (nth 2 inst)))))
 		   (setq pc (cdr pc)))
 
 		  ((eq op 'copy)
-		   (aset regs (nth 2 inst) (aref regs (nth 1 inst)))
+		   (aset math-apply-rw-regs (nth 2 inst) 
+                         (aref math-apply-rw-regs (nth 1 inst)))
 		   (setq pc (cdr pc)))
 
 		  ((eq op 'copy-neg)
-		   (aset regs (nth 2 inst)
-			 (math-rwapply-neg (aref regs (nth 1 inst))))
+		   (aset math-apply-rw-regs (nth 2 inst)
+			 (math-rwapply-neg (aref math-apply-rw-regs (nth 1 inst))))
 		   (setq pc (cdr pc)))
 
 		  ((eq op 'alt)
@@ -1904,7 +1977,7 @@
   (cond ((Math-primp expr)
 	 expr)
 	((eq (car expr) 'calcFunc-register)
-	 (setq expr (aref regs (nth 1 expr)))
+	 (setq expr (aref math-apply-rw-regs (nth 1 expr)))
 	 (if (eq (car-safe expr) '*)
 	     (if (eq (nth 1 expr) -1)
 		 (math-neg (nth 2 expr))
@@ -1953,7 +2026,7 @@
 	 (math-rwapply-reg-neg (nth 1 expr)))
 	((and (eq (car expr) 'neg)
 	      (eq (car-safe (nth 1 expr)) 'calcFunc-register)
-	      (math-scalarp (aref regs (nth 1 (nth 1 expr)))))
+	      (math-scalarp (aref math-apply-rw-regs (nth 1 (nth 1 expr)))))
 	 (math-neg (math-rwapply-replace-regs (nth 1 expr))))
 	((and (eq (car expr) '+)
 	      (math-rwapply-reg-looks-negp (nth 1 expr)))
@@ -2001,14 +2074,14 @@
 	 (if (Math-primp (nth 1 expr))
 	     (nth 1 expr)
 	   (if (eq (car (nth 1 expr)) 'calcFunc-register)
-	       (aref regs (nth 1 (nth 1 expr)))
+	       (aref math-apply-rw-regs (nth 1 (nth 1 expr)))
 	     (cons (car (nth 1 expr)) (mapcar 'math-rwapply-replace-regs
 					      (cdr (nth 1 expr)))))))
 	(t (cons (car expr) (mapcar 'math-rwapply-replace-regs (cdr expr))))))
 
 (defun math-rwapply-reg-looks-negp (expr)
   (if (eq (car-safe expr) 'calcFunc-register)
-      (math-looks-negp (aref regs (nth 1 expr)))
+      (math-looks-negp (aref math-apply-rw-regs (nth 1 expr)))
     (if (memq (car-safe expr) '(* /))
 	(or (math-rwapply-reg-looks-negp (nth 1 expr))
 	    (math-rwapply-reg-looks-negp (nth 2 expr))))))
@@ -2025,8 +2098,8 @@
 				       (math-rwapply-reg-neg (nth 2 expr)))))))
 
 (defun math-rwapply-remember (old new)
-  (let ((varval (symbol-value (nth 2 (car ruleset))))
-	(rules (assq (car-safe old) ruleset)))
+  (let ((varval (symbol-value (nth 2 (car math-apply-rw-ruleset))))
+	(rules (assq (car-safe old) math-apply-rw-ruleset)))
     (if (and (eq (car-safe varval) 'vec)
 	     (not (memq (car-safe old) '(nil schedule + -)))
 	     rules)
--- a/lisp/calc/calc-sel.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/calc/calc-sel.el	Mon Nov 22 11:06:39 2004 +0000
@@ -39,6 +39,12 @@
 
 (defvar calc-keep-selection t)
 
+(defvar calc-selection-cache-entry nil)
+(defvar calc-selection-cache-num)
+(defvar calc-selection-cache-comp)
+(defvar calc-selection-cache-offset)
+(defvar calc-selection-true-num)
+
 (defun calc-select-here (num &optional once keep)
   (interactive "P")
   (calc-wrapper
@@ -141,26 +147,32 @@
 	 (calc-change-current-selection sel)
        (error "%d is not a valid sub-formula index" num)))))
 
-(defun calc-find-nth-part (expr num)
+;; The variables calc-fnp-op and calc-fnp-num are local to 
+;; calc-find-nth-part (and calc-select-previous) but used by 
+;; calc-find-nth-part-rec, which is called by them.
+(defvar calc-fnp-op)
+(defvar calc-fnp-num)
+
+(defun calc-find-nth-part (expr calc-fnp-num)
   (if (and calc-assoc-selections
 	   (assq (car-safe expr) calc-assoc-ops))
-      (let (op)
+      (let (calc-fnp-op)
 	(calc-find-nth-part-rec expr))
     (if (eq (car-safe expr) 'intv)
-	(and (>= num 1) (<= num 2) (nth (1+ num) expr))
-      (and (not (Math-primp expr)) (>= num 1) (< num (length expr))
-	   (nth num expr)))))
+	(and (>= calc-fnp-num 1) (<= calc-fnp-num 2) (nth (1+ calc-fnp-num) expr))
+      (and (not (Math-primp expr)) (>= calc-fnp-num 1) (< calc-fnp-num (length expr))
+	   (nth calc-fnp-num expr)))))
 
 (defun calc-find-nth-part-rec (expr)   ; uses num, op
-  (or (if (and (setq op (assq (car-safe (nth 1 expr)) calc-assoc-ops))
-	       (memq (car expr) (nth 1 op)))
+  (or (if (and (setq calc-fnp-op (assq (car-safe (nth 1 expr)) calc-assoc-ops))
+	       (memq (car expr) (nth 1 calc-fnp-op)))
 	  (calc-find-nth-part-rec (nth 1 expr))
-	(and (= (setq num (1- num)) 0)
+	(and (= (setq calc-fnp-num (1- calc-fnp-num)) 0)
 	     (nth 1 expr)))
-      (if (and (setq op (assq (car-safe (nth 2 expr)) calc-assoc-ops))
-	       (memq (car expr) (nth 2 op)))
+      (if (and (setq calc-fnp-op (assq (car-safe (nth 2 expr)) calc-assoc-ops))
+	       (memq (car expr) (nth 2 calc-fnp-op)))
 	  (calc-find-nth-part-rec (nth 2 expr))
-	(and (= (setq num (1- num)) 0)
+	(and (= (setq calc-fnp-num (1- calc-fnp-num)) 0)
 	     (nth 2 expr)))))
 
 (defun calc-select-next (num)
@@ -239,9 +251,9 @@
 	     (calc-change-current-selection (car entry))
 	   (let ((len (if (and calc-assoc-selections
 			       (assq (car (car entry)) calc-assoc-ops))
-			  (let (op (num 0))
+			  (let (calc-fnp-op (calc-fnp-num 0))
 			    (calc-find-nth-part-rec (car entry))
-			    (- 1 num))
+			    (- 1 calc-fnp-num))
 			(length (car entry)))))
 	     (calc-select-part (- len num)))))))))
 
@@ -326,6 +338,11 @@
 		"Displaying only selected part of formulas"
 	      "Displaying all but selected part of formulas"))))
 
+;; The variables calc-final-point-line and calc-final-point-column
+;; are declared in calc.el, and are used throughout.
+(defvar calc-final-point-line)
+(defvar calc-final-point-column)
+
 (defun calc-preserve-point ()
   (or (looking-at "\\.\n+\\'")
       (progn
@@ -357,7 +374,6 @@
 		"Selection treats a+b+c as a sum of three terms"
 	      "Selection treats a+b+c as (a+b)+c"))))
 
-(defvar calc-selection-cache-entry nil)
 (defun calc-prepare-selection (&optional num)
   (or num (setq num (calc-locate-cursor-element (point))))
   (setq calc-selection-true-num num
@@ -456,12 +472,18 @@
 	     (setq top (cdr top)))
 	   sel))))
 
-(defun calc-replace-sub-formula (expr old new)
-  (setq new (calc-encase-atoms new))
+;; The variables calc-rsf-old and calc-rsf-new are local to
+;; calc-replace-sub-formula, but used by calc-replace-sub-formula-rec,
+;; which is called by calc-replace-sub-formula.
+(defvar calc-rsf-old)
+(defvar calc-rsf-new)
+
+(defun calc-replace-sub-formula (expr calc-rsf-old calc-rsf-new)
+  (setq calc-rsf-new (calc-encase-atoms calc-rsf-new))
   (calc-replace-sub-formula-rec expr))
 
 (defun calc-replace-sub-formula-rec (expr)
-  (cond ((eq expr old) new)
+  (cond ((eq expr calc-rsf-old) calc-rsf-new)
 	((Math-primp expr) expr)
 	(t
 	 (cons (car expr)
@@ -581,10 +603,14 @@
 		      (calc-top-list m (- n m -1) 'sel))))
     (calc-pop-push-list n vals 1 sels)))
 
+;; The variable calc-sel-reselect is local to several functions
+;; which call calc-auto-selection.
+(defvar calc-sel-reselect)
+
 (defun calc-auto-selection (entry)
   (or (nth 2 entry)
       (progn
-	(and (boundp 'reselect) (setq reselect nil))
+	(setq calc-sel-reselect nil)
 	(calc-prepare-selection)
 	(calc-grow-assoc-formula (car entry) (calc-find-selected-part)))))
 
@@ -611,7 +637,7 @@
   (calc-wrapper
    (calc-preserve-point)
    (let* ((num (max 1 (calc-locate-cursor-element (point))))
-	  (reselect calc-keep-selection)
+	  (calc-sel-reselect calc-keep-selection)
 	  (entry (calc-top num 'entry))
 	  (expr (car entry))
 	  (sel (or (calc-auto-selection entry) expr))
@@ -626,7 +652,7 @@
 					 (list (calc-replace-sub-formula
 						expr sel alg))
 					 num
-					 (list (and reselect alg))))))
+					 (list (and calc-sel-reselect alg))))))
      (calc-handle-whys))))
 
 (defun calc-edit-selection ()
@@ -634,7 +660,7 @@
   (calc-wrapper
    (calc-preserve-point)
    (let* ((num (max 1 (calc-locate-cursor-element (point))))
-	  (reselect calc-keep-selection)
+	  (calc-sel-reselect calc-keep-selection)
 	  (entry (calc-top num 'entry))
 	  (expr (car entry))
 	  (sel (or (calc-auto-selection entry) expr))
@@ -642,10 +668,16 @@
      (let ((str (math-showing-full-precision
 		 (math-format-nice-expr sel (frame-width)))))
        (calc-edit-mode (list 'calc-finish-selection-edit
-			     num (list 'quote sel) reselect))
+			     num (list 'quote sel) calc-sel-reselect))
        (insert str "\n"))))
   (calc-show-edit-buffer))
 
+(defvar calc-original-buffer)
+
+;; The variable calc-edit-disp-trail is local to calc-edit-finish,
+;; in calc-yank.el.
+(defvar calc-edit-disp-trail)
+
 (defun calc-finish-selection-edit (num sel reselect)
   (let ((buf (current-buffer))
 	(str (buffer-substring (point) (point-max)))
@@ -659,7 +691,7 @@
 	    (error (nth 2 val))))
       (calc-wrapper
        (calc-preserve-point)
-       (if disp-trail
+       (if calc-edit-disp-trail
 	   (calc-trail-display 1 t))
        (setq val (calc-encase-atoms (calc-normalize val)))
        (let ((expr (calc-top num 'full)))
@@ -677,7 +709,7 @@
   (calc-slow-wrapper
    (calc-preserve-point)
    (let* ((num (max 1 (calc-locate-cursor-element (point))))
-	  (reselect calc-keep-selection)
+	  (calc-sel-reselect calc-keep-selection)
 	  (entry (calc-top num 'entry))
 	  (sel (or (calc-auto-selection entry) (car entry))))
      (calc-with-default-simplification
@@ -688,7 +720,7 @@
 				     (list (calc-replace-sub-formula
 					    (car entry) sel val))
 				     num
-				     (list (and reselect val))))))
+				     (list (and calc-sel-reselect val))))))
      (calc-handle-whys))))
 
 (defun calc-sel-expand-formula (arg)
@@ -696,7 +728,7 @@
   (calc-slow-wrapper
    (calc-preserve-point)
    (let* ((num (max 1 (calc-locate-cursor-element (point))))
-	  (reselect calc-keep-selection)
+	  (calc-sel-reselect calc-keep-selection)
 	  (entry (calc-top num 'entry))
 	  (sel (or (calc-auto-selection entry) (car entry))))
      (calc-with-default-simplification
@@ -713,7 +745,7 @@
 				     (list (calc-replace-sub-formula
 					    (car entry) sel val))
 				     num
-				     (list (and reselect val))))))
+				     (list (and calc-sel-reselect val))))))
      (calc-handle-whys))))
 
 (defun calc-sel-mult-both-sides (no-simp &optional divide)
@@ -721,7 +753,7 @@
   (calc-wrapper
    (calc-preserve-point)
    (let* ((num (max 1 (calc-locate-cursor-element (point))))
-	  (reselect calc-keep-selection)
+	  (calc-sel-reselect calc-keep-selection)
 	  (entry (calc-top num 'entry))
 	  (expr (car entry))
 	  (sel (or (calc-auto-selection entry) expr))
@@ -774,7 +806,7 @@
 				       (list (calc-replace-sub-formula
 					      expr sel alg))
 				       num
-				       (list (and reselect alg)))))
+				       (list (and calc-sel-reselect alg)))))
      (calc-handle-whys))))
 
 (defun calc-sel-div-both-sides (no-simp)
@@ -786,7 +818,7 @@
   (calc-wrapper
    (calc-preserve-point)
    (let* ((num (max 1 (calc-locate-cursor-element (point))))
-	  (reselect calc-keep-selection)
+	  (calc-sel-reselect calc-keep-selection)
 	  (entry (calc-top num 'entry))
 	  (expr (car entry))
 	  (sel (or (calc-auto-selection entry) expr))
@@ -818,7 +850,7 @@
 				       (list (calc-replace-sub-formula
 					      expr sel alg))
 				       num
-				       (list (and reselect alg)))))
+				       (list (and calc-sel-reselect alg)))))
      (calc-handle-whys))))
 
 (defun calc-sel-sub-both-sides (no-simp)
--- a/lisp/calc/calc-units.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/calc/calc-units.el	Mon Nov 22 11:06:39 2004 +0000
@@ -3,8 +3,7 @@
 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
-;; Maintainers: D. Goel <deego@gnufans.org>
-;;              Colin Walters <walters@debian.org>
+;; Maintainer: Jay Belanger <belanger@truman.edu>
 
 ;; This file is part of GNU Emacs.
 
@@ -940,18 +939,23 @@
     (math-simplify a)))
 (defalias 'calcFunc-usimplify 'math-simplify-units)
 
+;; The function created by math-defsimplify uses the variable
+;; math-simplify-expr, and so is used by functions in math-defsimplify
+(defvar math-simplify-expr)
+
 (math-defsimplify (+ -)
   (and math-simplifying-units
-       (math-units-in-expr-p (nth 1 expr) nil)
-       (let* ((units (math-extract-units (nth 1 expr)))
+       (math-units-in-expr-p (nth 1 math-simplify-expr) nil)
+       (let* ((units (math-extract-units (nth 1 math-simplify-expr)))
 	      (ratio (math-simplify (math-to-standard-units
-				     (list '/ (nth 2 expr) units) nil))))
+				     (list '/ (nth 2 math-simplify-expr) units) nil))))
 	 (if (math-units-in-expr-p ratio nil)
 	     (progn
-	       (calc-record-why "*Inconsistent units" expr)
-	       expr)
-	   (list '* (math-add (math-remove-units (nth 1 expr))
-			      (if (eq (car expr) '-) (math-neg ratio) ratio))
+	       (calc-record-why "*Inconsistent units" math-simplify-expr)
+	       math-simplify-expr)
+	   (list '* (math-add (math-remove-units (nth 1 math-simplify-expr))
+			      (if (eq (car math-simplify-expr) '-) 
+                                  (math-neg ratio) ratio))
 		 units)))))
 
 (math-defsimplify *
@@ -960,12 +964,12 @@
 (defun math-simplify-units-prod ()
   (and math-simplifying-units
        calc-autorange-units
-       (Math-realp (nth 1 expr))
-       (let* ((num (math-float (nth 1 expr)))
+       (Math-realp (nth 1 math-simplify-expr))
+       (let* ((num (math-float (nth 1 math-simplify-expr)))
 	      (xpon (calcFunc-xpon num))
-	      (unitp (cdr (cdr expr)))
+	      (unitp (cdr (cdr math-simplify-expr)))
 	      (unit (car unitp))
-	      (pow (if (eq (car expr) '*) 1 -1))
+	      (pow (if (eq (car math-simplify-expr) '*) 1 -1))
 	      u)
 	 (and (eq (car-safe unit) '*)
 	      (setq unitp (cdr unit)
@@ -1015,39 +1019,40 @@
 		     (or (not (eq p pref))
 			 (< xpon (+ pxpon (* (math-abs pow) 3))))
 		     (progn
-		       (setcar (cdr expr)
+		       (setcar (cdr math-simplify-expr)
 			       (let ((calc-prefer-frac nil))
-				 (calcFunc-scf (nth 1 expr)
+				 (calcFunc-scf (nth 1 math-simplify-expr)
 					       (- uxpon pxpon))))
 		       (setcar unitp pname)
-		       expr)))))))
+		       math-simplify-expr)))))))
 
 (math-defsimplify /
   (and math-simplifying-units
-       (let ((np (cdr expr))
+       (let ((np (cdr math-simplify-expr))
 	     (try-cancel-units 0)
 	     n nn)
-	 (setq n (if (eq (car-safe (nth 2 expr)) '*)
-		     (cdr (nth 2 expr))
-		   (nthcdr 2 expr)))
+	 (setq n (if (eq (car-safe (nth 2 math-simplify-expr)) '*)
+		     (cdr (nth 2 math-simplify-expr))
+		   (nthcdr 2 math-simplify-expr)))
 	 (if (math-realp (car n))
 	     (progn
-	       (setcar (cdr expr) (math-mul (nth 1 expr)
+	       (setcar (cdr math-simplify-expr) (math-mul (nth 1 math-simplify-expr)
 					    (let ((calc-prefer-frac nil))
 					      (math-div 1 (car n)))))
 	       (setcar n 1)))
 	 (while (eq (car-safe (setq n (car np))) '*)
-	   (math-simplify-units-divisor (cdr n) (cdr (cdr expr)))
+	   (math-simplify-units-divisor (cdr n) (cdr (cdr math-simplify-expr)))
 	   (setq np (cdr (cdr n))))
-	 (math-simplify-units-divisor np (cdr (cdr expr)))
+	 (math-simplify-units-divisor np (cdr (cdr math-simplify-expr)))
 	 (if (eq try-cancel-units 0)
 	     (let* ((math-simplifying-units nil)
-		    (base (math-simplify (math-to-standard-units expr nil))))
+		    (base (math-simplify 
+                           (math-to-standard-units math-simplify-expr nil))))
 	       (if (Math-numberp base)
-		   (setq expr base))))
-	 (if (eq (car-safe expr) '/)
+		   (setq math-simplify-expr base))))
+	 (if (eq (car-safe math-simplify-expr) '/)
 	     (math-simplify-units-prod))
-	 expr)))
+	 math-simplify-expr)))
 
 (defun math-simplify-units-divisor (np dp)
   (let ((n (car np))
@@ -1094,20 +1099,23 @@
 
 (math-defsimplify ^
   (and math-simplifying-units
-       (math-realp (nth 2 expr))
-       (if (memq (car-safe (nth 1 expr)) '(* /))
-	   (list (car (nth 1 expr))
-		 (list '^ (nth 1 (nth 1 expr)) (nth 2 expr))
-		 (list '^ (nth 2 (nth 1 expr)) (nth 2 expr)))
-	 (math-simplify-units-pow (nth 1 expr) (nth 2 expr)))))
+       (math-realp (nth 2 math-simplify-expr))
+       (if (memq (car-safe (nth 1 math-simplify-expr)) '(* /))
+	   (list (car (nth 1 math-simplify-expr))
+		 (list '^ (nth 1 (nth 1 math-simplify-expr)) 
+                       (nth 2 math-simplify-expr))
+		 (list '^ (nth 2 (nth 1 math-simplify-expr)) 
+                       (nth 2 math-simplify-expr)))
+	 (math-simplify-units-pow (nth 1 math-simplify-expr) 
+                                  (nth 2 math-simplify-expr)))))
 
 (math-defsimplify calcFunc-sqrt
   (and math-simplifying-units
-       (if (memq (car-safe (nth 1 expr)) '(* /))
-	   (list (car (nth 1 expr))
-		 (list 'calcFunc-sqrt (nth 1 (nth 1 expr)))
-		 (list 'calcFunc-sqrt (nth 2 (nth 1 expr))))
-	 (math-simplify-units-pow (nth 1 expr) '(frac 1 2)))))
+       (if (memq (car-safe (nth 1 math-simplify-expr)) '(* /))
+	   (list (car (nth 1 math-simplify-expr))
+		 (list 'calcFunc-sqrt (nth 1 (nth 1 math-simplify-expr)))
+		 (list 'calcFunc-sqrt (nth 2 (nth 1 math-simplify-expr))))
+	 (math-simplify-units-pow (nth 1 math-simplify-expr) '(frac 1 2)))))
 
 (math-defsimplify (calcFunc-floor
 		   calcFunc-ceil
@@ -1120,21 +1128,21 @@
 		   calcFunc-abs
 		   calcFunc-clean)
   (and math-simplifying-units
-       (= (length expr) 2)
-       (if (math-only-units-in-expr-p (nth 1 expr))
-	   (nth 1 expr)
-	 (if (and (memq (car-safe (nth 1 expr)) '(* /))
+       (= (length math-simplify-expr) 2)
+       (if (math-only-units-in-expr-p (nth 1 math-simplify-expr))
+	   (nth 1 math-simplify-expr)
+	 (if (and (memq (car-safe (nth 1 math-simplify-expr)) '(* /))
 		  (or (math-only-units-in-expr-p
-		       (nth 1 (nth 1 expr)))
+		       (nth 1 (nth 1 math-simplify-expr)))
 		      (math-only-units-in-expr-p
-		       (nth 2 (nth 1 expr)))))
-	     (list (car (nth 1 expr))
-		   (cons (car expr)
-			 (cons (nth 1 (nth 1 expr))
-			       (cdr (cdr expr))))
-		   (cons (car expr)
-			 (cons (nth 2 (nth 1 expr))
-			       (cdr (cdr expr)))))))))
+		       (nth 2 (nth 1 math-simplify-expr)))))
+	     (list (car (nth 1 math-simplify-expr))
+		   (cons (car math-simplify-expr)
+			 (cons (nth 1 (nth 1 math-simplify-expr))
+			       (cdr (cdr math-simplify-expr))))
+		   (cons (car math-simplify-expr)
+			 (cons (nth 2 (nth 1 math-simplify-expr))
+			       (cdr (cdr math-simplify-expr)))))))))
 
 (defun math-simplify-units-pow (a pow)
   (if (and (eq (car-safe a) '^)
@@ -1157,10 +1165,10 @@
 
 (math-defsimplify calcFunc-sin
   (and math-simplifying-units
-       (math-units-in-expr-p (nth 1 expr) nil)
+       (math-units-in-expr-p (nth 1 math-simplify-expr) nil)
        (let ((rad (math-simplify-units
 		   (math-evaluate-expr
-		    (math-to-standard-units (nth 1 expr) nil))))
+		    (math-to-standard-units (nth 1 math-simplify-expr) nil))))
 	     (calc-angle-mode 'rad))
 	 (and (eq (car-safe rad) '*)
 	      (math-realp (nth 1 rad))
@@ -1170,10 +1178,10 @@
 
 (math-defsimplify calcFunc-cos
   (and math-simplifying-units
-       (math-units-in-expr-p (nth 1 expr) nil)
+       (math-units-in-expr-p (nth 1 math-simplify-expr) nil)
        (let ((rad (math-simplify-units
 		   (math-evaluate-expr
-		    (math-to-standard-units (nth 1 expr) nil))))
+		    (math-to-standard-units (nth 1 math-simplify-expr) nil))))
 	     (calc-angle-mode 'rad))
 	 (and (eq (car-safe rad) '*)
 	      (math-realp (nth 1 rad))
@@ -1183,10 +1191,10 @@
 
 (math-defsimplify calcFunc-tan
   (and math-simplifying-units
-       (math-units-in-expr-p (nth 1 expr) nil)
+       (math-units-in-expr-p (nth 1 math-simplify-expr) nil)
        (let ((rad (math-simplify-units
 		   (math-evaluate-expr
-		    (math-to-standard-units (nth 1 expr) nil))))
+		    (math-to-standard-units (nth 1 math-simplify-expr) nil))))
 	     (calc-angle-mode 'rad))
 	 (and (eq (car-safe rad) '*)
 	      (math-realp (nth 1 rad))
--- a/lisp/calc/calc-yank.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/calc/calc-yank.el	Mon Nov 22 11:06:39 2004 +0000
@@ -492,6 +492,10 @@
       (newline)
     (calc-edit-finish)))
 
+;; The variable calc-edit-disp-trail is local to calc-edit finish, but
+;; is used by calc-finish-selection-edit and calc-finish-stack-edit.
+(defvar calc-edit-disp-trail)
+
 (defun calc-edit-finish (&optional keep)
   "Finish calc-edit mode.  Parse buffer contents and push them on the stack."
   (interactive "P")
@@ -507,7 +511,7 @@
 	(original calc-original-buffer)
 	(return calc-return-buffer)
 	(one-window calc-one-window)
-	(disp-trail calc-restore-trail))
+	(calc-edit-disp-trail calc-restore-trail))
     (save-excursion
       (when (or (null (buffer-name original))
 		(progn
@@ -527,7 +531,7 @@
     (if keep
 	(bury-buffer buf)
       (kill-buffer buf))
-    (if disp-trail
+    (if calc-edit-disp-trail
 	(calc-wrapper
 	 (calc-trail-display 1 t)))
     (message "")))
@@ -561,7 +565,7 @@
 	   (progn
 	     (set num (car vals))
 	     (calc-refresh-evaltos num))
-	 (if disp-trail
+	 (if calc-edit-disp-trail
 	     (calc-trail-display 1 t))
 	 (and vals
 	      (let ((calc-simplify-mode (if (eq last-command-char ?\C-j)
--- a/lisp/calc/calcalg2.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/calc/calcalg2.el	Mon Nov 22 11:06:39 2004 +0000
@@ -201,13 +201,19 @@
 				       (prefix-numeric-value nterms))))))
 
 
-(defun math-derivative (expr)   ; uses global values: deriv-var, deriv-total.
-  (cond ((equal expr deriv-var)
+;; The following are global variables used by math-derivative and some 
+;; related functions
+(defvar math-deriv-var)
+(defvar math-deriv-total)
+(defvar math-deriv-symb)
+
+(defun math-derivative (expr)
+  (cond ((equal expr math-deriv-var)
 	 1)
 	((or (Math-scalarp expr)
 	     (eq (car expr) 'sdev)
 	     (and (eq (car expr) 'var)
-		  (or (not deriv-total)
+		  (or (not math-deriv-total)
 		      (math-const-var expr)
 		      (progn
 			(math-setup-declarations)
@@ -279,20 +285,20 @@
 		      (let ((handler (get (car expr) 'math-derivative-n)))
 			(and handler
 			     (funcall handler expr)))))
-	       (and (not (eq deriv-symb 'pre-expand))
+	       (and (not (eq math-deriv-symb 'pre-expand))
 		    (let ((exp (math-expand-formula expr)))
 		      (and exp
-			   (or (let ((deriv-symb 'pre-expand))
+			   (or (let ((math-deriv-symb 'pre-expand))
 				 (catch 'math-deriv (math-derivative expr)))
 			       (math-derivative exp)))))
 	       (if (or (Math-objvecp expr)
 		       (eq (car expr) 'var)
 		       (not (symbolp (car expr))))
-		   (if deriv-symb
+		   (if math-deriv-symb
 		       (throw 'math-deriv nil)
-		     (list (if deriv-total 'calcFunc-tderiv 'calcFunc-deriv)
+		     (list (if math-deriv-total 'calcFunc-tderiv 'calcFunc-deriv)
 			   expr
-			   deriv-var))
+			   math-deriv-var))
 		 (let ((accum 0)
 		       (arg expr)
 		       (n 1)
@@ -322,7 +328,7 @@
 				   (let ((handler (get func prop)))
 				     (or (and prop handler
 					      (apply handler (cdr expr)))
-					 (if (and deriv-symb
+					 (if (and math-deriv-symb
 						  (not (get func
 							    'calc-user-defn)))
 					     (throw 'math-deriv nil)
@@ -330,27 +336,27 @@
 		     (setq n (1+ n)))
 		   accum))))))
 
-(defun calcFunc-deriv (expr deriv-var &optional deriv-value deriv-symb)
-  (let* ((deriv-total nil)
+(defun calcFunc-deriv (expr math-deriv-var &optional deriv-value math-deriv-symb)
+  (let* ((math-deriv-total nil)
 	 (res (catch 'math-deriv (math-derivative expr))))
     (or (eq (car-safe res) 'calcFunc-deriv)
 	(null res)
 	(setq res (math-normalize res)))
     (and res
 	 (if deriv-value
-	     (math-expr-subst res deriv-var deriv-value)
+	     (math-expr-subst res math-deriv-var deriv-value)
 	   res))))
 
-(defun calcFunc-tderiv (expr deriv-var &optional deriv-value deriv-symb)
+(defun calcFunc-tderiv (expr math-deriv-var &optional deriv-value math-deriv-symb)
   (math-setup-declarations)
-  (let* ((deriv-total t)
+  (let* ((math-deriv-total t)
 	 (res (catch 'math-deriv (math-derivative expr))))
     (or (eq (car-safe res) 'calcFunc-tderiv)
 	(null res)
 	(setq res (math-normalize res)))
     (and res
 	 (if deriv-value
-	     (math-expr-subst res deriv-var deriv-value)
+	     (math-expr-subst res math-deriv-var deriv-value)
 	   res))))
 
 (put 'calcFunc-inv\' 'math-derivative-1
@@ -540,7 +546,7 @@
 (put 'calcFunc-sum 'math-derivative-n
      (function
       (lambda (expr)
-	(if (math-expr-contains (cons 'vec (cdr (cdr expr))) deriv-var)
+	(if (math-expr-contains (cons 'vec (cdr (cdr expr))) math-deriv-var)
 	    (throw 'math-deriv nil)
 	  (cons 'calcFunc-sum
 		(cons (math-derivative (nth 1 expr))
@@ -549,7 +555,7 @@
 (put 'calcFunc-prod 'math-derivative-n
      (function
       (lambda (expr)
-	(if (math-expr-contains (cons 'vec (cdr (cdr expr))) deriv-var)
+	(if (math-expr-contains (cons 'vec (cdr (cdr expr))) math-deriv-var)
 	    (throw 'math-deriv nil)
 	  (math-mul expr
 		    (cons 'calcFunc-sum
@@ -561,7 +567,7 @@
      (function
       (lambda (expr)
 	(if (= (length expr) 3)
-	    (if (equal (nth 2 expr) deriv-var)
+	    (if (equal (nth 2 expr) math-deriv-var)
 		(nth 1 expr)
 	      (math-normalize
 	       (list 'calcFunc-integ
@@ -576,7 +582,7 @@
 					      (math-derivative (nth 4 expr)))
 				    (math-mul lower
 					      (math-derivative (nth 3 expr))))
-			  (if (equal (nth 2 expr) deriv-var)
+			  (if (equal (nth 2 expr) math-deriv-var)
 			      0
 			    (math-normalize
 			     (list 'calcFunc-integ
@@ -605,6 +611,21 @@
 (defvar math-integ-var-list (list math-integ-var))
 (defvar math-integ-var-list-list (list math-integ-var-list))
 
+;; math-integ-depth is a local variable for math-try-integral, but is used
+;; by math-integral and math-tracing-integral
+;; which are called (directly or indirectly) by math-try-integral.
+(defvar math-integ-depth)
+;; math-integ-level is a local variable for math-try-integral, but is used
+;; by math-integral, math-do-integral, math-tracing-integral, 
+;; math-sub-integration, math-integrate-by-parts and 
+;; math-integrate-by-substitution, which are called (directly or 
+;; indirectly) by math-try-integral.
+(defvar math-integ-level)
+;; math-integral-limit is a local variable for calcFunc-integ, but is
+;; used by math-tracing-integral, math-sub-integration and 
+;; math-try-integration. 
+(defvar math-integral-limit)
+
 (defmacro math-tracing-integral (&rest parts)
   (list 'and
 	'trace-buffer
@@ -629,28 +650,46 @@
 ;;;			 ( A parts )	  Currently working, integ-by-parts;
 ;;;			 ( A parts2 )	  Currently working, integ-by-parts;
 ;;;			 ( A cancelled )  Ignore this cache entry;
-;;;			 ( A [B] )        Same result as for cur-record = B.
+;;;			 ( A [B] )        Same result as for math-cur-record = B.
+
+;; math-cur-record is a local variable for math-try-integral, but is used
+;; by math-integral, math-replace-integral-parts and math-integrate-by-parts
+;; which are called (directly or indirectly) by math-try-integral, as well as
+;; by calc-dump-integral-cache
+(defvar math-cur-record)
+;; math-enable-subst and math-any-substs are local variables for
+;; calcFunc-integ, but are used by math-integral and math-try-integral.
+(defvar math-enable-subst)
+(defvar math-any-substs)
+
+;; math-integ-msg is a local variable for math-try-integral, but is
+;; used (both locally and non-locally) by math-integral.
+(defvar math-integ-msg)
+
+(defvar math-integral-cache nil)
+(defvar math-integral-cache-state nil)
+
 (defun math-integral (expr &optional simplify same-as-above)
-  (let* ((simp cur-record)
-	 (cur-record (assoc expr math-integral-cache))
+  (let* ((simp math-cur-record)
+	 (math-cur-record (assoc expr math-integral-cache))
 	 (math-integ-depth (1+ math-integ-depth))
 	 (val 'cancelled))
     (math-tracing-integral "Integrating "
 			   (math-format-value expr 1000)
 			   "...\n")
-    (and cur-record
+    (and math-cur-record
 	 (progn
 	   (math-tracing-integral "Found "
-				  (math-format-value (nth 1 cur-record) 1000))
-	   (and (consp (nth 1 cur-record))
-		(math-replace-integral-parts cur-record))
+				  (math-format-value (nth 1 math-cur-record) 1000))
+	   (and (consp (nth 1 math-cur-record))
+		(math-replace-integral-parts math-cur-record))
 	   (math-tracing-integral " => "
-				  (math-format-value (nth 1 cur-record) 1000)
+				  (math-format-value (nth 1 math-cur-record) 1000)
 				  "\n")))
-    (or (and cur-record
-	     (not (eq (nth 1 cur-record) 'cancelled))
-	     (or (not (integerp (nth 1 cur-record)))
-		 (>= (nth 1 cur-record) math-integ-level)))
+    (or (and math-cur-record
+	     (not (eq (nth 1 math-cur-record) 'cancelled))
+	     (or (not (integerp (nth 1 math-cur-record)))
+		 (>= (nth 1 math-cur-record) math-integ-level)))
 	(and (math-integral-contains-parts expr)
 	     (progn
 	       (setq val nil)
@@ -665,12 +704,12 @@
 					    "Working... Integrating %s"
 					    (math-format-flat-expr expr 0)))
 		      (message math-integ-msg)))
-		(if cur-record
-		    (setcar (cdr cur-record)
+		(if math-cur-record
+		    (setcar (cdr math-cur-record)
 			    (if same-as-above (vector simp) 'busy))
-		  (setq cur-record
+		  (setq math-cur-record
 			(list expr (if same-as-above (vector simp) 'busy))
-			math-integral-cache (cons cur-record
+			math-integral-cache (cons math-cur-record
 						  math-integral-cache)))
 		(if (eq simplify 'yes)
 		    (progn
@@ -692,12 +731,12 @@
 			      (setq val (math-integral simp 'no t))))))))
 	      (if (eq calc-display-working-message 'lots)
 		  (message math-integ-msg)))
-	  (setcar (cdr cur-record) (or val
+	  (setcar (cdr math-cur-record) (or val
 				       (if (or math-enable-subst
 					       (not math-any-substs))
 					   math-integ-level
 					 'cancelled)))))
-    (setq val cur-record)
+    (setq val math-cur-record)
     (while (vectorp (nth 1 val))
       (setq val (aref (nth 1 val) 0)))
     (setq val (if (memq (nth 1 val) '(parts parts2))
@@ -712,8 +751,6 @@
 			   (math-format-value val 1000)
 			   "\n")
     val))
-(defvar math-integral-cache nil)
-(defvar math-integral-cache-state nil)
 
 (defun math-integral-contains-parts (expr)
   (if (Math-primp expr)
@@ -735,37 +772,58 @@
 			  (progn
 			    (setcar expr (nth 1 (nth 2 (car expr))))
 			    (math-replace-integral-parts (cons 'foo expr)))
-			(setcar (cdr cur-record) 'cancelled)))
+			(setcar (cdr math-cur-record) 'cancelled)))
 	       (math-replace-integral-parts (car expr)))))))
 
 (defvar math-linear-subst-tried t
   "Non-nil means that a linear substitution has been tried.")
 
+;; The variable math-has-rules is a local variable for math-try-integral,
+;; but is used by math-do-integral, which is called (non-directly) by
+;; math-try-integral.
+(defvar math-has-rules)
+
+;; math-old-integ is a local variable for math-do-integral, but is
+;; used by math-sub-integration.
+(defvar math-old-integ)
+
+;; The variables math-t1, math-t2 and math-t3 are local to 
+;; math-do-integral, math-try-solve-for and math-decompose-poly, but
+;; are used by functions they call (directly or indirectly); 
+;; math-do-integral calls math-do-integral-methods;
+;; math-try-solve-for calls math-try-solve-prod, 
+;; math-solve-find-root-term and math-solve-find-root-in-prod;
+;; math-decompose-poly calls math-solve-poly-funny-powers and
+;; math-solve-crunch-poly.
+(defvar math-t1)
+(defvar math-t2)
+(defvar math-t3)
+
 (defun math-do-integral (expr)
   (let ((math-linear-subst-tried nil)
-        t1 t2)
+        math-t1 math-t2)
     (or (cond ((not (math-expr-contains expr math-integ-var))
 	       (math-mul expr math-integ-var))
 	      ((equal expr math-integ-var)
 	       (math-div (math-sqr expr) 2))
 	      ((eq (car expr) '+)
-	       (and (setq t1 (math-integral (nth 1 expr)))
-		    (setq t2 (math-integral (nth 2 expr)))
-		    (math-add t1 t2)))
+	       (and (setq math-t1 (math-integral (nth 1 expr)))
+		    (setq math-t2 (math-integral (nth 2 expr)))
+		    (math-add math-t1 math-t2)))
 	      ((eq (car expr) '-)
-	       (and (setq t1 (math-integral (nth 1 expr)))
-		    (setq t2 (math-integral (nth 2 expr)))
-		    (math-sub t1 t2)))
+	       (and (setq math-t1 (math-integral (nth 1 expr)))
+		    (setq math-t2 (math-integral (nth 2 expr)))
+		    (math-sub math-t1 math-t2)))
 	      ((eq (car expr) 'neg)
-	       (and (setq t1 (math-integral (nth 1 expr)))
-		    (math-neg t1)))
+	       (and (setq math-t1 (math-integral (nth 1 expr)))
+		    (math-neg math-t1)))
 	      ((eq (car expr) '*)
 	       (cond ((not (math-expr-contains (nth 1 expr) math-integ-var))
-		      (and (setq t1 (math-integral (nth 2 expr)))
-			   (math-mul (nth 1 expr) t1)))
+		      (and (setq math-t1 (math-integral (nth 2 expr)))
+			   (math-mul (nth 1 expr) math-t1)))
 		     ((not (math-expr-contains (nth 2 expr) math-integ-var))
-		      (and (setq t1 (math-integral (nth 1 expr)))
-			   (math-mul t1 (nth 2 expr))))
+		      (and (setq math-t1 (math-integral (nth 1 expr)))
+			   (math-mul math-t1 (nth 2 expr))))
 		     ((memq (car-safe (nth 1 expr)) '(+ -))
 		      (math-integral (list (car (nth 1 expr))
 					   (math-mul (nth 1 (nth 1 expr))
@@ -784,39 +842,39 @@
 	       (cond ((and (not (math-expr-contains (nth 1 expr)
 						    math-integ-var))
 			   (not (math-equal-int (nth 1 expr) 1)))
-		      (and (setq t1 (math-integral (math-div 1 (nth 2 expr))))
-			   (math-mul (nth 1 expr) t1)))
+		      (and (setq math-t1 (math-integral (math-div 1 (nth 2 expr))))
+			   (math-mul (nth 1 expr) math-t1)))
 		     ((not (math-expr-contains (nth 2 expr) math-integ-var))
-		      (and (setq t1 (math-integral (nth 1 expr)))
-			   (math-div t1 (nth 2 expr))))
+		      (and (setq math-t1 (math-integral (nth 1 expr)))
+			   (math-div math-t1 (nth 2 expr))))
 		     ((and (eq (car-safe (nth 1 expr)) '*)
 			   (not (math-expr-contains (nth 1 (nth 1 expr))
 						    math-integ-var)))
-		      (and (setq t1 (math-integral
+		      (and (setq math-t1 (math-integral
 				     (math-div (nth 2 (nth 1 expr))
 					       (nth 2 expr))))
-			   (math-mul t1 (nth 1 (nth 1 expr)))))
+			   (math-mul math-t1 (nth 1 (nth 1 expr)))))
 		     ((and (eq (car-safe (nth 1 expr)) '*)
 			   (not (math-expr-contains (nth 2 (nth 1 expr))
 						    math-integ-var)))
-		      (and (setq t1 (math-integral
+		      (and (setq math-t1 (math-integral
 				     (math-div (nth 1 (nth 1 expr))
 					       (nth 2 expr))))
-			   (math-mul t1 (nth 2 (nth 1 expr)))))
+			   (math-mul math-t1 (nth 2 (nth 1 expr)))))
 		     ((and (eq (car-safe (nth 2 expr)) '*)
 			   (not (math-expr-contains (nth 1 (nth 2 expr))
 						    math-integ-var)))
-		      (and (setq t1 (math-integral
+		      (and (setq math-t1 (math-integral
 				     (math-div (nth 1 expr)
 					       (nth 2 (nth 2 expr)))))
-			   (math-div t1 (nth 1 (nth 2 expr)))))
+			   (math-div math-t1 (nth 1 (nth 2 expr)))))
 		     ((and (eq (car-safe (nth 2 expr)) '*)
 			   (not (math-expr-contains (nth 2 (nth 2 expr))
 						    math-integ-var)))
-		      (and (setq t1 (math-integral
+		      (and (setq math-t1 (math-integral
 				     (math-div (nth 1 expr)
 					       (nth 1 (nth 2 expr)))))
-			   (math-div t1 (nth 2 (nth 2 expr)))))
+			   (math-div math-t1 (nth 2 (nth 2 expr)))))
 		     ((eq (car-safe (nth 2 expr)) 'calcFunc-exp)
 		      (math-integral
 		       (math-mul (nth 1 expr)
@@ -824,10 +882,10 @@
 				       (math-neg (nth 1 (nth 2 expr)))))))))
 	      ((eq (car expr) '^)
 	       (cond ((not (math-expr-contains (nth 1 expr) math-integ-var))
-		      (or (and (setq t1 (math-is-polynomial (nth 2 expr)
+		      (or (and (setq math-t1 (math-is-polynomial (nth 2 expr)
 							    math-integ-var 1))
 			       (math-div expr
-					 (math-mul (nth 1 t1)
+					 (math-mul (nth 1 math-t1)
 						   (math-normalize
 						    (list 'calcFunc-ln
 							  (nth 1 expr))))))
@@ -843,12 +901,12 @@
 			  (math-integral
 			   (list '/ 1 (math-pow (nth 1 expr) (- (nth 2 expr))))
 			   nil t)
-			(or (and (setq t1 (math-is-polynomial (nth 1 expr)
+			(or (and (setq math-t1 (math-is-polynomial (nth 1 expr)
 							      math-integ-var
 							      1))
-				 (setq t2 (math-add (nth 2 expr) 1))
-				 (math-div (math-pow (nth 1 expr) t2)
-					   (math-mul t2 (nth 1 t1))))
+				 (setq math-t2 (math-add (nth 2 expr) 1))
+				 (math-div (math-pow (nth 1 expr) math-t2)
+					   (math-mul math-t2 (nth 1 math-t1))))
 			    (and (Math-negp (nth 2 expr))
 				 (math-integral
 				  (math-div 1
@@ -859,49 +917,49 @@
 			    nil))))))
 
 	;; Integral of a polynomial.
-	(and (setq t1 (math-is-polynomial expr math-integ-var 20))
+	(and (setq math-t1 (math-is-polynomial expr math-integ-var 20))
 	     (let ((accum 0)
 		   (n 1))
-	       (while t1
+	       (while math-t1
 		 (if (setq accum (math-add accum
-					   (math-div (math-mul (car t1)
+					   (math-div (math-mul (car math-t1)
 							       (math-pow
 								math-integ-var
 								n))
 						     n))
-			   t1 (cdr t1))
+			   math-t1 (cdr math-t1))
 		     (setq n (1+ n))))
 	       accum))
 
 	;; Try looking it up!
 	(cond ((= (length expr) 2)
 	       (and (symbolp (car expr))
-		    (setq t1 (get (car expr) 'math-integral))
+		    (setq math-t1 (get (car expr) 'math-integral))
 		    (progn
-		      (while (and t1
-				  (not (setq t2 (funcall (car t1)
+		      (while (and math-t1
+				  (not (setq math-t2 (funcall (car math-t1)
 							 (nth 1 expr)))))
-			(setq t1 (cdr t1)))
-		      (and t2 (math-normalize t2)))))
+			(setq math-t1 (cdr math-t1)))
+		      (and math-t2 (math-normalize math-t2)))))
 	      ((= (length expr) 3)
 	       (and (symbolp (car expr))
-		    (setq t1 (get (car expr) 'math-integral-2))
+		    (setq math-t1 (get (car expr) 'math-integral-2))
 		    (progn
-		      (while (and t1
-				  (not (setq t2 (funcall (car t1)
+		      (while (and math-t1
+				  (not (setq math-t2 (funcall (car math-t1)
 							 (nth 1 expr)
 							 (nth 2 expr)))))
-			(setq t1 (cdr t1)))
-		      (and t2 (math-normalize t2))))))
+			(setq math-t1 (cdr math-t1)))
+		      (and math-t2 (math-normalize math-t2))))))
 
 	;; Integral of a rational function.
 	(and (math-ratpoly-p expr math-integ-var)
-	     (setq t1 (calcFunc-apart expr math-integ-var))
-	     (not (equal t1 expr))
-	     (math-integral t1))
+	     (setq math-t1 (calcFunc-apart expr math-integ-var))
+	     (not (equal math-t1 expr))
+	     (math-integral math-t1))
 
 	;; Try user-defined integration rules.
-	(and has-rules
+	(and math-has-rules
 	     (let ((math-old-integ (symbol-function 'calcFunc-integ))
 		   (input (list 'calcFunc-integtry expr math-integ-var))
 		   res part)
@@ -975,17 +1033,27 @@
 	       res)))
       (list 'calcFunc-integfailed expr)))
 
-(defun math-do-integral-methods (expr)
-  (let ((so-far math-integ-var-list-list)
+;; math-so-far is a local variable for math-do-integral-methods, but
+;; is used by math-integ-try-linear-substitutions and 
+;; math-integ-try-substitutions.
+(defvar math-so-far)
+
+;; math-integ-expr is a local variable for math-do-integral-methods,
+;; but is used by math-integ-try-linear-substitutions and 
+;; math-integ-try-substitutions.
+(defvar math-integ-expr)
+
+(defun math-do-integral-methods (math-integ-expr)
+  (let ((math-so-far math-integ-var-list-list)
 	rat-in)
 
     ;; Integration by substitution, for various likely sub-expressions.
     ;; (In first pass, we look only for sub-exprs that are linear in X.)
-    (or (math-integ-try-linear-substitutions expr)
-        (math-integ-try-substitutions expr)
+    (or (math-integ-try-linear-substitutions math-integ-expr)
+        (math-integ-try-substitutions math-integ-expr)
 
 	;; If function has sines and cosines, try tan(x/2) substitution.
-	(and (let ((p (setq rat-in (math-expr-rational-in expr))))
+	(and (let ((p (setq rat-in (math-expr-rational-in math-integ-expr))))
 	       (while (and p
 			   (memq (car (car p)) '(calcFunc-sin
 						 calcFunc-cos
@@ -993,10 +1061,10 @@
 			   (equal (nth 1 (car p)) math-integ-var))
 		 (setq p (cdr p)))
 	       (null p))
-	     (or (and (math-integ-parts-easy expr)
-		      (math-integ-try-parts expr t))
+	     (or (and (math-integ-parts-easy math-integ-expr)
+		      (math-integ-try-parts math-integ-expr t))
 		 (math-integrate-by-good-substitution
-		  expr (list 'calcFunc-tan (math-div math-integ-var 2)))))
+		  math-integ-expr (list 'calcFunc-tan (math-div math-integ-var 2)))))
 
 	;; If function has sinh and cosh, try tanh(x/2) substitution.
 	(and (let ((p rat-in))
@@ -1008,55 +1076,55 @@
 			   (equal (nth 1 (car p)) math-integ-var))
 		 (setq p (cdr p)))
 	       (null p))
-	     (or (and (math-integ-parts-easy expr)
-		      (math-integ-try-parts expr t))
+	     (or (and (math-integ-parts-easy math-integ-expr)
+		      (math-integ-try-parts math-integ-expr t))
 		 (math-integrate-by-good-substitution
-		  expr (list 'calcFunc-tanh (math-div math-integ-var 2)))))
+		  math-integ-expr (list 'calcFunc-tanh (math-div math-integ-var 2)))))
 
 	;; If function has square roots, try sin, tan, or sec substitution.
 	(and (let ((p rat-in))
-	       (setq t1 nil)
+	       (setq math-t1 nil)
 	       (while (and p
 			   (or (equal (car p) math-integ-var)
 			       (and (eq (car (car p)) 'calcFunc-sqrt)
-				    (setq t1 (math-is-polynomial
-					      (nth 1 (setq t2 (car p)))
+				    (setq math-t1 (math-is-polynomial
+					      (nth 1 (setq math-t2 (car p)))
 					      math-integ-var 2)))))
 		 (setq p (cdr p)))
-	       (and (null p) t1))
-	     (if (cdr (cdr t1))
-		 (if (math-guess-if-neg (nth 2 t1))
-		     (let* ((c (math-sqrt (math-neg (nth 2 t1))))
-			    (d (math-div (nth 1 t1) (math-mul -2 c)))
-			    (a (math-sqrt (math-add (car t1) (math-sqr d)))))
+	       (and (null p) math-t1))
+	     (if (cdr (cdr math-t1))
+		 (if (math-guess-if-neg (nth 2 math-t1))
+		     (let* ((c (math-sqrt (math-neg (nth 2 math-t1))))
+			    (d (math-div (nth 1 math-t1) (math-mul -2 c)))
+			    (a (math-sqrt (math-add (car math-t1) (math-sqr d)))))
 		       (math-integrate-by-good-substitution
-			expr (list 'calcFunc-arcsin
+			math-integ-expr (list 'calcFunc-arcsin
 				   (math-div-thru
 				    (math-add (math-mul c math-integ-var) d)
 				    a))))
-		   (let* ((c (math-sqrt (nth 2 t1)))
-			  (d (math-div (nth 1 t1) (math-mul 2 c)))
-			  (aa (math-sub (car t1) (math-sqr d))))
+		   (let* ((c (math-sqrt (nth 2 math-t1)))
+			  (d (math-div (nth 1 math-t1) (math-mul 2 c)))
+			  (aa (math-sub (car math-t1) (math-sqr d))))
 		     (if (and nil (not (and (eq d 0) (eq c 1))))
 			 (math-integrate-by-good-substitution
-			  expr (math-add (math-mul c math-integ-var) d))
+			  math-integ-expr (math-add (math-mul c math-integ-var) d))
 		       (if (math-guess-if-neg aa)
 			   (math-integrate-by-good-substitution
-			    expr (list 'calcFunc-arccosh
+			    math-integ-expr (list 'calcFunc-arccosh
 				       (math-div-thru
 					(math-add (math-mul c math-integ-var)
 						  d)
 					(math-sqrt (math-neg aa)))))
 			 (math-integrate-by-good-substitution
-			  expr (list 'calcFunc-arcsinh
+			  math-integ-expr (list 'calcFunc-arcsinh
 				     (math-div-thru
 				      (math-add (math-mul c math-integ-var)
 						d)
 				      (math-sqrt aa))))))))
-	       (math-integrate-by-good-substitution expr t2)) )
+	       (math-integrate-by-good-substitution math-integ-expr math-t2)) )
 
 	;; Try integration by parts.
-	(math-integ-try-parts expr)
+	(math-integ-try-parts math-integ-expr)
 
 	;; Give up.
 	nil)))
@@ -1076,6 +1144,15 @@
 	 (math-integ-parts-easy (nth 1 expr)))
 	(t t)))
 
+;; math-prev-parts-v is local to calcFunc-integ (as well as
+;; math-integrate-by-parts), but is used by math-integ-try-parts.
+(defvar math-prev-parts-v)
+
+;; math-good-parts is local to calcFunc-integ (as well as
+;; math-integ-try-parts), but is used by math-integrate-by-parts.
+(defvar math-good-parts)
+
+
 (defun math-integ-try-parts (expr &optional math-good-parts)
   ;; Integration by parts:
   ;;   integ(f(x) g(x),x) = f(x) h(x) - integ(h(x) f'(x),x)
@@ -1112,7 +1189,7 @@
     (and (>= math-integ-level 0)
 	 (unwind-protect
 	     (progn
-	       (setcar (cdr cur-record) 'parts)
+	       (setcar (cdr math-cur-record) 'parts)
 	       (math-tracing-integral "Integrating by parts, u = "
 				      (math-format-value u 1000)
 				      ", v' = "
@@ -1123,15 +1200,14 @@
 		    (setq temp (let ((math-prev-parts-v v))
 				 (math-integral (math-mul v temp) 'yes)))
 		    (setq temp (math-sub (math-mul u v) temp))
-		    (if (eq (nth 1 cur-record) 'parts)
+		    (if (eq (nth 1 math-cur-record) 'parts)
 			(calcFunc-expand temp)
-		      (setq v (list 'var 'PARTS cur-record)
-			    var-thing (list 'vec (math-sub v temp) v)
+		      (setq v (list 'var 'PARTS math-cur-record)
 			    temp (let (calc-next-why)
 				   (math-solve-for (math-sub v temp) 0 v nil)))
 		      (and temp (not (integerp temp))
 			   (math-simplify-extended temp)))))
-	   (setcar (cdr cur-record) 'busy)))))
+	   (setcar (cdr math-cur-record) 'busy)))))
 
 ;;; This tries two different formulations, hoping the algebraic simplifier
 ;;; will be strong enough to handle at least one.
@@ -1202,13 +1278,13 @@
 		  (while (and (setq sub-expr (cdr sub-expr))
 			      (or (not (math-linear-in (car sub-expr)
 						       math-integ-var))
-				  (assoc (car sub-expr) so-far)
+				  (assoc (car sub-expr) math-so-far)
 				  (progn
-				    (setq so-far (cons (list (car sub-expr))
-						       so-far))
+				    (setq math-so-far (cons (list (car sub-expr))
+						       math-so-far))
 				    (not (setq res
 					       (math-integrate-by-substitution
-						expr (car sub-expr))))))))
+						math-integ-expr (car sub-expr))))))))
 		  res))
 	   (let ((res nil))
 	     (while (and (setq sub-expr (cdr sub-expr))
@@ -1219,15 +1295,15 @@
 ;;; Recursively try different substitutions based on various sub-expressions.
 (defun math-integ-try-substitutions (sub-expr &optional allow-rat)
   (and (not (Math-primp sub-expr))
-       (not (assoc sub-expr so-far))
+       (not (assoc sub-expr math-so-far))
        (math-expr-contains sub-expr math-integ-var)
        (or (and (if (and (not (memq (car sub-expr) '(+ - * / neg)))
 			 (not (and (eq (car sub-expr) '^)
 				   (integerp (nth 2 sub-expr)))))
 		    (setq allow-rat t)
 		  (prog1 allow-rat (setq allow-rat nil)))
-		(not (eq sub-expr expr))
-		(or (math-integrate-by-substitution expr sub-expr)
+		(not (eq sub-expr math-integ-expr))
+		(or (math-integrate-by-substitution math-integ-expr sub-expr)
 		    (and (eq (car sub-expr) '^)
 			 (integerp (nth 2 sub-expr))
 			 (< (nth 2 sub-expr) 0)
@@ -1235,22 +1311,25 @@
 			  (math-pow (nth 1 sub-expr) (- (nth 2 sub-expr)))
 			  t))))
 	   (let ((res nil))
-	     (setq so-far (cons (list sub-expr) so-far))
+	     (setq math-so-far (cons (list sub-expr) math-so-far))
 	     (while (and (setq sub-expr (cdr sub-expr))
 			 (not (setq res (math-integ-try-substitutions
 					 (car sub-expr) allow-rat)))))
 	     res))))
 
+;; The variable math-expr-parts is local to math-expr-rational-in,
+;; but is used by math-expr-rational-in-rec
+
 (defun math-expr-rational-in (expr)
-  (let ((parts nil))
+  (let ((math-expr-parts nil))
     (math-expr-rational-in-rec expr)
-    (mapcar 'car parts)))
+    (mapcar 'car math-expr-parts)))
 
 (defun math-expr-rational-in-rec (expr)
   (cond ((Math-primp expr)
 	 (and (equal expr math-integ-var)
-	      (not (assoc expr parts))
-	      (setq parts (cons (list expr) parts))))
+	      (not (assoc expr math-expr-parts))
+	      (setq math-expr-parts (cons (list expr) math-expr-parts))))
 	((or (memq (car expr) '(+ - * / neg))
 	     (and (eq (car expr) '^) (integerp (nth 2 expr))))
 	 (math-expr-rational-in-rec (nth 1 expr))
@@ -1259,9 +1338,9 @@
 	      (eq (math-quarter-integer (nth 2 expr)) 2))
 	 (math-expr-rational-in-rec (list 'calcFunc-sqrt (nth 1 expr))))
 	(t
-	 (and (not (assoc expr parts))
+	 (and (not (assoc expr math-expr-parts))
 	      (math-expr-contains expr math-integ-var)
-	      (setq parts (cons (list expr) parts))))))
+	      (setq math-expr-parts (cons (list expr) math-expr-parts))))))
 
 (defun math-expr-calls (expr funcs &optional arg-contains)
   (if (consp expr)
@@ -1295,32 +1374,36 @@
   (let ((buf (current-buffer)))
     (unwind-protect
 	(let ((p math-integral-cache)
-	      cur-record)
+	      math-cur-record)
 	  (display-buffer (get-buffer-create "*Integral Cache*"))
 	  (set-buffer (get-buffer "*Integral Cache*"))
 	  (erase-buffer)
 	  (while p
-	    (setq cur-record (car p))
-	    (or arg (math-replace-integral-parts cur-record))
-	    (insert (math-format-flat-expr (car cur-record) 0)
+	    (setq math-cur-record (car p))
+	    (or arg (math-replace-integral-parts math-cur-record))
+	    (insert (math-format-flat-expr (car math-cur-record) 0)
 		    " --> "
-		    (if (symbolp (nth 1 cur-record))
-			(concat "(" (symbol-name (nth 1 cur-record)) ")")
-		      (math-format-flat-expr (nth 1 cur-record) 0))
+		    (if (symbolp (nth 1 math-cur-record))
+			(concat "(" (symbol-name (nth 1 math-cur-record)) ")")
+		      (math-format-flat-expr (nth 1 math-cur-record) 0))
 		    "\n")
 	    (setq p (cdr p)))
 	  (goto-char (point-min)))
       (set-buffer buf))))
 
+;; The variable math-max-integral-limit is local to calcFunc-integ,
+;; but is used by math-try-integral.
+(defvar math-max-integral-limit)
+
 (defun math-try-integral (expr)
   (let ((math-integ-level math-integral-limit)
 	(math-integ-depth 0)
 	(math-integ-msg "Working...done")
-	(cur-record nil)   ; a technicality
+	(math-cur-record nil)   ; a technicality
 	(math-integrating t)
 	(calc-prefer-frac t)
 	(calc-symbolic-mode t)
-	(has-rules (calc-has-rules 'var-IntegRules)))
+	(math-has-rules (calc-has-rules 'var-IntegRules)))
     (or (math-integral expr 'yes)
 	(and math-any-substs
 	     (setq math-enable-subst t)
@@ -1330,6 +1413,8 @@
 		   math-integ-level math-integral-limit)
 	     (math-integral expr 'yes)))))
 
+(defvar var-IntegLimit nil)
+
 (defun calcFunc-integ (expr var &optional low high)
   (cond
    ;; Do these even if the parts turn out not to be integrable.
@@ -1392,8 +1477,7 @@
       (or (equal state math-integral-cache-state)
 	  (setq math-integral-cache-state state
 		math-integral-cache nil)))
-    (let* ((math-max-integral-limit (or (and (boundp 'var-IntegLimit)
-					     (natnump var-IntegLimit)
+    (let* ((math-max-integral-limit (or (and (natnump var-IntegLimit)
 					     var-IntegLimit)
 					3))
 	   (math-integral-limit 1)
@@ -1714,22 +1798,29 @@
 
 (defvar math-tabulate-initial nil)
 (defvar math-tabulate-function nil)
-(defun calcFunc-table (expr var &optional low high step)
-  (or low (setq low '(neg (var inf var-inf)) high '(var inf var-inf)))
-  (or high (setq high low low 1))
-  (and (or (math-infinitep low) (math-infinitep high))
+
+;; The variables calc-low and calc-high are local to calcFunc-table, 
+;; but are used by math-scan-for-limits.
+(defvar calc-low)
+(defvar calc-high)
+
+(defun calcFunc-table (expr var &optional calc-low calc-high step)
+  (or calc-low 
+      (setq calc-low '(neg (var inf var-inf)) calc-high '(var inf var-inf)))
+  (or calc-high (setq calc-high calc-low calc-low 1))
+  (and (or (math-infinitep calc-low) (math-infinitep calc-high))
        (not step)
        (math-scan-for-limits expr))
   (and step (math-zerop step) (math-reject-arg step 'nonzerop))
-  (let ((known (+ (if (Math-objectp low) 1 0)
-		  (if (Math-objectp high) 1 0)
+  (let ((known (+ (if (Math-objectp calc-low) 1 0)
+		  (if (Math-objectp calc-high) 1 0)
 		  (if (or (null step) (Math-objectp step)) 1 0)))
 	(count '(var inf var-inf))
 	vec)
     (or (= known 2)   ; handy optimization
-	(equal high '(var inf var-inf))
+	(equal calc-high '(var inf var-inf))
 	(progn
-	  (setq count (math-div (math-sub high low) (or step 1)))
+	  (setq count (math-div (math-sub calc-high calc-low) (or step 1)))
 	  (or (Math-objectp count)
 	      (setq count (math-simplify count)))
 	  (if (Math-messy-integerp count)
@@ -1745,30 +1836,30 @@
 		      (math-expr-subst expr var '(var DUMMY var-DUMMY))))
 	  (while (>= count 0)
 	    (setq math-working-step (1+ math-working-step)
-		  var-DUMMY low
+		  var-DUMMY calc-low
 		  vec (cond ((eq math-tabulate-function 'calcFunc-sum)
 			     (math-add vec (math-evaluate-expr expr)))
 			    ((eq math-tabulate-function 'calcFunc-prod)
 			     (math-mul vec (math-evaluate-expr expr)))
 			    (t
 			     (cons (math-evaluate-expr expr) vec)))
-		  low (math-add low (or step 1))
+		  calc-low (math-add calc-low (or step 1))
 		  count (1- count)))
 	  (if math-tabulate-function
 	      vec
 	    (cons 'vec (nreverse vec))))
       (if (Math-integerp count)
-	  (calc-record-why 'fixnump high)
-	(if (Math-num-integerp low)
-	    (if (Math-num-integerp high)
+	  (calc-record-why 'fixnump calc-high)
+	(if (Math-num-integerp calc-low)
+	    (if (Math-num-integerp calc-high)
 		(calc-record-why 'integerp step)
-	      (calc-record-why 'integerp high))
-	  (calc-record-why 'integerp low)))
+	      (calc-record-why 'integerp calc-high))
+	  (calc-record-why 'integerp calc-low)))
       (append (list (or math-tabulate-function 'calcFunc-table)
 		    expr var)
-	      (and (not (and (equal low '(neg (var inf var-inf)))
-			     (equal high '(var inf var-inf))))
-		   (list low high))
+	      (and (not (and (equal calc-low '(neg (var inf var-inf)))
+			     (equal calc-high '(var inf var-inf))))
+		   (list calc-low calc-high))
 	      (and step (list step))))))
 
 (defun math-scan-for-limits (x)
@@ -1785,8 +1876,8 @@
 		high-val (math-realp high-val))
 	   (and (Math-lessp high-val low-val)
 		(setq temp low-val low-val high-val high-val temp))
-	   (setq low (math-max low (math-ceiling low-val))
-		 high (math-min high (math-floor high-val)))))
+	   (setq calc-low (math-max calc-low (math-ceiling low-val))
+		 calc-high (math-min calc-high (math-floor high-val)))))
 	(t
 	 (while (setq x (cdr x))
 	   (math-scan-for-limits (car x))))))
@@ -2173,15 +2264,29 @@
 
 
 (defvar math-solve-ranges nil)
-;;; Attempt to reduce lhs = rhs to solve-var = rhs', where solve-var appears
-;;; in lhs but not in rhs or rhs'; return rhs'.
-;;; Uses global values: solve-*.
-(defun math-try-solve-for (lhs rhs &optional sign no-poly)
-  (let (t1 t2 t3)
-    (cond ((equal lhs solve-var)
-	   (setq math-solve-sign sign)
-	   (if (eq solve-full 'all)
-	       (let ((vec (list 'vec (math-evaluate-expr rhs)))
+(defvar math-solve-sign)
+;;; Attempt to reduce math-solve-lhs = math-solve-rhs to 
+;;; math-solve-var = math-solve-rhs', where math-solve-var appears
+;;; in math-solve-lhs but not in math-solve-rhs or math-solve-rhs'; 
+;;; return math-solve-rhs'.
+;;; Uses global values: math-solve-var, math-solve-full.
+(defvar math-solve-var)
+(defvar math-solve-full)
+
+;; The variables math-solve-lhs, math-solve-rhs and math-try-solve-sign 
+;; are local to math-try-solve-for,  but are used by math-try-solve-prod.  
+;; (math-solve-lhs and math-solve-rhs are is also local to 
+;; math-decompose-poly, but used by math-solve-poly-funny-powers.)
+(defvar math-solve-lhs)
+(defvar math-solve-rhs)
+
+(defun math-try-solve-for 
+  (math-solve-lhs math-solve-rhs &optional math-try-solve-sign no-poly)
+  (let (math-t1 math-t2 math-t3)
+    (cond ((equal math-solve-lhs math-solve-var)
+	   (setq math-solve-sign math-try-solve-sign)
+	   (if (eq math-solve-full 'all)
+	       (let ((vec (list 'vec (math-evaluate-expr math-solve-rhs)))
 		     newvec var p)
 		 (while math-solve-ranges
 		   (setq p (car math-solve-ranges)
@@ -2194,238 +2299,253 @@
 		   (setq vec newvec
 			 math-solve-ranges (cdr math-solve-ranges)))
 		 (math-normalize vec))
-	     rhs))
-	  ((Math-primp lhs)
+	     math-solve-rhs))
+	  ((Math-primp math-solve-lhs)
 	   nil)
-	  ((and (eq (car lhs) '-)
-		(eq (car-safe (nth 1 lhs)) (car-safe (nth 2 lhs)))
-		(Math-zerop rhs)
-		(= (length (nth 1 lhs)) 2)
-		(= (length (nth 2 lhs)) 2)
-		(setq t1 (get (car (nth 1 lhs)) 'math-inverse))
-		(setq t2 (funcall t1 '(var SOLVEDUM SOLVEDUM)))
-		(eq (math-expr-contains-count t2 '(var SOLVEDUM SOLVEDUM)) 1)
-		(setq t3 (math-solve-above-dummy t2))
-		(setq t1 (math-try-solve-for (math-sub (nth 1 (nth 1 lhs))
-						       (math-expr-subst
-							t2 t3
-							(nth 1 (nth 2 lhs))))
-					     0)))
-	   t1)
-	  ((eq (car lhs) 'neg)
-	   (math-try-solve-for (nth 1 lhs) (math-neg rhs)
-			       (and sign (- sign))))
-	  ((and (not (eq solve-full 't)) (math-try-solve-prod)))
+	  ((and (eq (car math-solve-lhs) '-)
+		(eq (car-safe (nth 1 math-solve-lhs)) (car-safe (nth 2 math-solve-lhs)))
+		(Math-zerop math-solve-rhs)
+		(= (length (nth 1 math-solve-lhs)) 2)
+		(= (length (nth 2 math-solve-lhs)) 2)
+		(setq math-t1 (get (car (nth 1 math-solve-lhs)) 'math-inverse))
+		(setq math-t2 (funcall math-t1 '(var SOLVEDUM SOLVEDUM)))
+		(eq (math-expr-contains-count math-t2 '(var SOLVEDUM SOLVEDUM)) 1)
+		(setq math-t3 (math-solve-above-dummy math-t2))
+		(setq math-t1 (math-try-solve-for 
+                               (math-sub (nth 1 (nth 1 math-solve-lhs))
+                                         (math-expr-subst
+                                          math-t2 math-t3
+                                          (nth 1 (nth 2 math-solve-lhs))))
+                               0)))
+	   math-t1)
+	  ((eq (car math-solve-lhs) 'neg)
+	   (math-try-solve-for (nth 1 math-solve-lhs) (math-neg math-solve-rhs)
+			       (and math-try-solve-sign (- math-try-solve-sign))))
+	  ((and (not (eq math-solve-full 't)) (math-try-solve-prod)))
 	  ((and (not no-poly)
-		(setq t2 (math-decompose-poly lhs solve-var 15 rhs)))
-	   (setq t1 (cdr (nth 1 t2))
-		 t1 (let ((math-solve-ranges math-solve-ranges))
-		      (cond ((= (length t1) 5)
-			     (apply 'math-solve-quartic (car t2) t1))
-			    ((= (length t1) 4)
-			     (apply 'math-solve-cubic (car t2) t1))
-			    ((= (length t1) 3)
-			     (apply 'math-solve-quadratic (car t2) t1))
-			    ((= (length t1) 2)
-			     (apply 'math-solve-linear (car t2) sign t1))
-			    (solve-full
-			     (math-poly-all-roots (car t2) t1))
+		(setq math-t2 
+                      (math-decompose-poly math-solve-lhs 
+                                           math-solve-var 15 math-solve-rhs)))
+	   (setq math-t1 (cdr (nth 1 math-t2))
+		 math-t1 (let ((math-solve-ranges math-solve-ranges))
+		      (cond ((= (length math-t1) 5)
+			     (apply 'math-solve-quartic (car math-t2) math-t1))
+			    ((= (length math-t1) 4)
+			     (apply 'math-solve-cubic (car math-t2) math-t1))
+			    ((= (length math-t1) 3)
+			     (apply 'math-solve-quadratic (car math-t2) math-t1))
+			    ((= (length math-t1) 2)
+			     (apply 'math-solve-linear 
+                                    (car math-t2) math-try-solve-sign math-t1))
+			    (math-solve-full
+			     (math-poly-all-roots (car math-t2) math-t1))
 			    (calc-symbolic-mode nil)
 			    (t
 			     (math-try-solve-for
-			      (car t2)
-			      (math-poly-any-root (reverse t1) 0 t)
+			      (car math-t2)
+			      (math-poly-any-root (reverse math-t1) 0 t)
 			      nil t)))))
-	   (if t1
-	       (if (eq (nth 2 t2) 1)
-		   t1
-		 (math-solve-prod t1 (math-try-solve-for (nth 2 t2) 0 nil t)))
+	   (if math-t1
+	       (if (eq (nth 2 math-t2) 1)
+		   math-t1
+		 (math-solve-prod math-t1 (math-try-solve-for (nth 2 math-t2) 0 nil t)))
 	     (calc-record-why "*Unable to find a symbolic solution")
 	     nil))
-	  ((and (math-solve-find-root-term lhs nil)
-		(eq (math-expr-contains-count lhs t1) 1))   ; just in case
+	  ((and (math-solve-find-root-term math-solve-lhs nil)
+		(eq (math-expr-contains-count math-solve-lhs math-t1) 1))   ; just in case
 	   (math-try-solve-for (math-simplify
-				(math-sub (if (or t3 (math-evenp t2))
-					      (math-pow t1 t2)
-					    (math-neg (math-pow t1 t2)))
+				(math-sub (if (or math-t3 (math-evenp math-t2))
+					      (math-pow math-t1 math-t2)
+					    (math-neg (math-pow math-t1 math-t2)))
 					  (math-expand-power
 					   (math-sub (math-normalize
 						      (math-expr-subst
-						       lhs t1 0))
-						     rhs)
-					   t2 solve-var)))
+						       math-solve-lhs math-t1 0))
+						     math-solve-rhs)
+					   math-t2 math-solve-var)))
 			       0))
-	  ((eq (car lhs) '+)
-	   (cond ((not (math-expr-contains (nth 1 lhs) solve-var))
-		  (math-try-solve-for (nth 2 lhs)
-				      (math-sub rhs (nth 1 lhs))
-				      sign))
-		 ((not (math-expr-contains (nth 2 lhs) solve-var))
-		  (math-try-solve-for (nth 1 lhs)
-				      (math-sub rhs (nth 2 lhs))
-				      sign))))
-	  ((eq (car lhs) 'calcFunc-eq)
-	   (math-try-solve-for (math-sub (nth 1 lhs) (nth 2 lhs))
-			       rhs sign no-poly))
-	  ((eq (car lhs) '-)
-	   (cond ((or (and (eq (car-safe (nth 1 lhs)) 'calcFunc-sin)
-			   (eq (car-safe (nth 2 lhs)) 'calcFunc-cos))
-		      (and (eq (car-safe (nth 1 lhs)) 'calcFunc-cos)
-			   (eq (car-safe (nth 2 lhs)) 'calcFunc-sin)))
-		  (math-try-solve-for (math-sub (nth 1 lhs)
-						(list (car (nth 1 lhs))
+	  ((eq (car math-solve-lhs) '+)
+	   (cond ((not (math-expr-contains (nth 1 math-solve-lhs) math-solve-var))
+		  (math-try-solve-for (nth 2 math-solve-lhs)
+				      (math-sub math-solve-rhs (nth 1 math-solve-lhs))
+				      math-try-solve-sign))
+		 ((not (math-expr-contains (nth 2 math-solve-lhs) math-solve-var))
+		  (math-try-solve-for (nth 1 math-solve-lhs)
+				      (math-sub math-solve-rhs (nth 2 math-solve-lhs))
+				      math-try-solve-sign))))
+	  ((eq (car math-solve-lhs) 'calcFunc-eq)
+	   (math-try-solve-for (math-sub (nth 1 math-solve-lhs) (nth 2 math-solve-lhs))
+			       math-solve-rhs math-try-solve-sign no-poly))
+	  ((eq (car math-solve-lhs) '-)
+	   (cond ((or (and (eq (car-safe (nth 1 math-solve-lhs)) 'calcFunc-sin)
+			   (eq (car-safe (nth 2 math-solve-lhs)) 'calcFunc-cos))
+		      (and (eq (car-safe (nth 1 math-solve-lhs)) 'calcFunc-cos)
+			   (eq (car-safe (nth 2 math-solve-lhs)) 'calcFunc-sin)))
+		  (math-try-solve-for (math-sub (nth 1 math-solve-lhs)
+						(list (car (nth 1 math-solve-lhs))
 						      (math-sub
 						       (math-quarter-circle t)
-						       (nth 1 (nth 2 lhs)))))
-				      rhs))
-		 ((not (math-expr-contains (nth 1 lhs) solve-var))
-		  (math-try-solve-for (nth 2 lhs)
-				      (math-sub (nth 1 lhs) rhs)
-				      (and sign (- sign))))
-		 ((not (math-expr-contains (nth 2 lhs) solve-var))
-		  (math-try-solve-for (nth 1 lhs)
-				      (math-add rhs (nth 2 lhs))
-				      sign))))
-	  ((and (eq solve-full 't) (math-try-solve-prod)))
-	  ((and (eq (car lhs) '%)
-		(not (math-expr-contains (nth 2 lhs) solve-var)))
-	   (math-try-solve-for (nth 1 lhs) (math-add rhs
+						       (nth 1 (nth 2 math-solve-lhs)))))
+				      math-solve-rhs))
+		 ((not (math-expr-contains (nth 1 math-solve-lhs) math-solve-var))
+		  (math-try-solve-for (nth 2 math-solve-lhs)
+				      (math-sub (nth 1 math-solve-lhs) math-solve-rhs)
+				      (and math-try-solve-sign 
+                                           (- math-try-solve-sign))))
+		 ((not (math-expr-contains (nth 2 math-solve-lhs) math-solve-var))
+		  (math-try-solve-for (nth 1 math-solve-lhs)
+				      (math-add math-solve-rhs (nth 2 math-solve-lhs))
+				      math-try-solve-sign))))
+	  ((and (eq math-solve-full 't) (math-try-solve-prod)))
+	  ((and (eq (car math-solve-lhs) '%)
+		(not (math-expr-contains (nth 2 math-solve-lhs) math-solve-var)))
+	   (math-try-solve-for (nth 1 math-solve-lhs) (math-add math-solve-rhs
 						     (math-solve-get-int
-						      (nth 2 lhs)))))
-	  ((eq (car lhs) 'calcFunc-log)
-	   (cond ((not (math-expr-contains (nth 2 lhs) solve-var))
-		  (math-try-solve-for (nth 1 lhs) (math-pow (nth 2 lhs) rhs)))
-		 ((not (math-expr-contains (nth 1 lhs) solve-var))
-		  (math-try-solve-for (nth 2 lhs) (math-pow
-						   (nth 1 lhs)
-						   (math-div 1 rhs))))))
-	  ((and (= (length lhs) 2)
-		(symbolp (car lhs))
-		(setq t1 (get (car lhs) 'math-inverse))
-		(setq t2 (funcall t1 rhs)))
-	   (setq t1 (get (car lhs) 'math-inverse-sign))
-	   (math-try-solve-for (nth 1 lhs) (math-normalize t2)
-			       (and sign t1
-				    (if (integerp t1)
-					(* t1 sign)
-				      (funcall t1 lhs sign)))))
-	  ((and (symbolp (car lhs))
-		(setq t1 (get (car lhs) 'math-inverse-n))
-		(setq t2 (funcall t1 lhs rhs)))
-	   t2)
-	  ((setq t1 (math-expand-formula lhs))
-	   (math-try-solve-for t1 rhs sign))
+						      (nth 2 math-solve-lhs)))))
+	  ((eq (car math-solve-lhs) 'calcFunc-log)
+	   (cond ((not (math-expr-contains (nth 2 math-solve-lhs) math-solve-var))
+		  (math-try-solve-for (nth 1 math-solve-lhs) 
+                                      (math-pow (nth 2 math-solve-lhs) math-solve-rhs)))
+		 ((not (math-expr-contains (nth 1 math-solve-lhs) math-solve-var))
+		  (math-try-solve-for (nth 2 math-solve-lhs) (math-pow
+						   (nth 1 math-solve-lhs)
+						   (math-div 1 math-solve-rhs))))))
+	  ((and (= (length math-solve-lhs) 2)
+		(symbolp (car math-solve-lhs))
+		(setq math-t1 (get (car math-solve-lhs) 'math-inverse))
+		(setq math-t2 (funcall math-t1 math-solve-rhs)))
+	   (setq math-t1 (get (car math-solve-lhs) 'math-inverse-sign))
+	   (math-try-solve-for (nth 1 math-solve-lhs) (math-normalize math-t2)
+			       (and math-try-solve-sign math-t1
+				    (if (integerp math-t1)
+					(* math-t1 math-try-solve-sign)
+				      (funcall math-t1 math-solve-lhs 
+                                               math-try-solve-sign)))))
+	  ((and (symbolp (car math-solve-lhs))
+		(setq math-t1 (get (car math-solve-lhs) 'math-inverse-n))
+		(setq math-t2 (funcall math-t1 math-solve-lhs math-solve-rhs)))
+	   math-t2)
+	  ((setq math-t1 (math-expand-formula math-solve-lhs))
+	   (math-try-solve-for math-t1 math-solve-rhs math-try-solve-sign))
 	  (t
-	   (calc-record-why "*No inverse known" lhs)
+	   (calc-record-why "*No inverse known" math-solve-lhs)
 	   nil))))
 
 
 (defun math-try-solve-prod ()
-  (cond ((eq (car lhs) '*)
-	 (cond ((not (math-expr-contains (nth 1 lhs) solve-var))
-		(math-try-solve-for (nth 2 lhs)
-				    (math-div rhs (nth 1 lhs))
-				    (math-solve-sign sign (nth 1 lhs))))
-	       ((not (math-expr-contains (nth 2 lhs) solve-var))
-		(math-try-solve-for (nth 1 lhs)
-				    (math-div rhs (nth 2 lhs))
-				    (math-solve-sign sign (nth 2 lhs))))
-	       ((Math-zerop rhs)
+  (cond ((eq (car math-solve-lhs) '*)
+	 (cond ((not (math-expr-contains (nth 1 math-solve-lhs) math-solve-var))
+		(math-try-solve-for (nth 2 math-solve-lhs)
+				    (math-div math-solve-rhs (nth 1 math-solve-lhs))
+				    (math-solve-sign math-try-solve-sign 
+                                                     (nth 1 math-solve-lhs))))
+	       ((not (math-expr-contains (nth 2 math-solve-lhs) math-solve-var))
+		(math-try-solve-for (nth 1 math-solve-lhs)
+				    (math-div math-solve-rhs (nth 2 math-solve-lhs))
+				    (math-solve-sign math-try-solve-sign 
+                                                     (nth 2 math-solve-lhs))))
+	       ((Math-zerop math-solve-rhs)
 		(math-solve-prod (let ((math-solve-ranges math-solve-ranges))
-				   (math-try-solve-for (nth 2 lhs) 0))
-				 (math-try-solve-for (nth 1 lhs) 0)))))
-	((eq (car lhs) '/)
-	 (cond ((not (math-expr-contains (nth 1 lhs) solve-var))
-		(math-try-solve-for (nth 2 lhs)
-				    (math-div (nth 1 lhs) rhs)
-				    (math-solve-sign sign (nth 1 lhs))))
-	       ((not (math-expr-contains (nth 2 lhs) solve-var))
-		(math-try-solve-for (nth 1 lhs)
-				    (math-mul rhs (nth 2 lhs))
-				    (math-solve-sign sign (nth 2 lhs))))
-	       ((setq t1 (math-try-solve-for (math-sub (nth 1 lhs)
-						       (math-mul (nth 2 lhs)
-								 rhs))
+				   (math-try-solve-for (nth 2 math-solve-lhs) 0))
+				 (math-try-solve-for (nth 1 math-solve-lhs) 0)))))
+	((eq (car math-solve-lhs) '/)
+	 (cond ((not (math-expr-contains (nth 1 math-solve-lhs) math-solve-var))
+		(math-try-solve-for (nth 2 math-solve-lhs)
+				    (math-div (nth 1 math-solve-lhs) math-solve-rhs)
+				    (math-solve-sign math-try-solve-sign 
+                                                     (nth 1 math-solve-lhs))))
+	       ((not (math-expr-contains (nth 2 math-solve-lhs) math-solve-var))
+		(math-try-solve-for (nth 1 math-solve-lhs)
+				    (math-mul math-solve-rhs (nth 2 math-solve-lhs))
+				    (math-solve-sign math-try-solve-sign 
+                                                     (nth 2 math-solve-lhs))))
+	       ((setq math-t1 (math-try-solve-for (math-sub (nth 1 math-solve-lhs)
+						       (math-mul (nth 2 math-solve-lhs)
+								 math-solve-rhs))
 					     0))
-		t1)))
-	((eq (car lhs) '^)
-	 (cond ((not (math-expr-contains (nth 1 lhs) solve-var))
+		math-t1)))
+	((eq (car math-solve-lhs) '^)
+	 (cond ((not (math-expr-contains (nth 1 math-solve-lhs) math-solve-var))
 		(math-try-solve-for
-		 (nth 2 lhs)
+		 (nth 2 math-solve-lhs)
 		 (math-add (math-normalize
-			    (list 'calcFunc-log rhs (nth 1 lhs)))
+			    (list 'calcFunc-log math-solve-rhs (nth 1 math-solve-lhs)))
 			   (math-div
 			    (math-mul 2
 				      (math-mul '(var pi var-pi)
 						(math-solve-get-int
 						 '(var i var-i))))
 			    (math-normalize
-			     (list 'calcFunc-ln (nth 1 lhs)))))))
-	       ((not (math-expr-contains (nth 2 lhs) solve-var))
-		(cond ((and (integerp (nth 2 lhs))
-			    (>= (nth 2 lhs) 2)
-			    (setq t1 (math-integer-log2 (nth 2 lhs))))
-		       (setq t2 rhs)
-		       (if (and (eq solve-full t)
-				(math-known-realp (nth 1 lhs)))
+			     (list 'calcFunc-ln (nth 1 math-solve-lhs)))))))
+	       ((not (math-expr-contains (nth 2 math-solve-lhs) math-solve-var))
+		(cond ((and (integerp (nth 2 math-solve-lhs))
+			    (>= (nth 2 math-solve-lhs) 2)
+			    (setq math-t1 (math-integer-log2 (nth 2 math-solve-lhs))))
+		       (setq math-t2 math-solve-rhs)
+		       (if (and (eq math-solve-full t)
+				(math-known-realp (nth 1 math-solve-lhs)))
 			   (progn
-			     (while (>= (setq t1 (1- t1)) 0)
-			       (setq t2 (list 'calcFunc-sqrt t2)))
-			     (setq t2 (math-solve-get-sign t2)))
-			 (while (>= (setq t1 (1- t1)) 0)
-			   (setq t2 (math-solve-get-sign
+			     (while (>= (setq math-t1 (1- math-t1)) 0)
+			       (setq math-t2 (list 'calcFunc-sqrt math-t2)))
+			     (setq math-t2 (math-solve-get-sign math-t2)))
+			 (while (>= (setq math-t1 (1- math-t1)) 0)
+			   (setq math-t2 (math-solve-get-sign
 				     (math-normalize
-				      (list 'calcFunc-sqrt t2))))))
+				      (list 'calcFunc-sqrt math-t2))))))
 		       (math-try-solve-for
-			(nth 1 lhs)
-			(math-normalize t2)))
-		      ((math-looks-negp (nth 2 lhs))
+			(nth 1 math-solve-lhs)
+			(math-normalize math-t2)))
+		      ((math-looks-negp (nth 2 math-solve-lhs))
 		       (math-try-solve-for
-			(list '^ (nth 1 lhs) (math-neg (nth 2 lhs)))
-			(math-div 1 rhs)))
-		      ((and (eq solve-full t)
-			    (Math-integerp (nth 2 lhs))
-			    (math-known-realp (nth 1 lhs)))
-		       (setq t1 (math-normalize
-				 (list 'calcFunc-nroot rhs (nth 2 lhs))))
-		       (if (math-evenp (nth 2 lhs))
-			   (setq t1 (math-solve-get-sign t1)))
+			(list '^ (nth 1 math-solve-lhs) 
+                              (math-neg (nth 2 math-solve-lhs)))
+			(math-div 1 math-solve-rhs)))
+		      ((and (eq math-solve-full t)
+			    (Math-integerp (nth 2 math-solve-lhs))
+			    (math-known-realp (nth 1 math-solve-lhs)))
+		       (setq math-t1 (math-normalize
+				 (list 'calcFunc-nroot math-solve-rhs 
+                                       (nth 2 math-solve-lhs))))
+		       (if (math-evenp (nth 2 math-solve-lhs))
+			   (setq math-t1 (math-solve-get-sign math-t1)))
 		       (math-try-solve-for
-			(nth 1 lhs) t1
-			(and sign
-			     (math-oddp (nth 2 lhs))
-			     (math-solve-sign sign (nth 2 lhs)))))
+			(nth 1 math-solve-lhs) math-t1
+			(and math-try-solve-sign
+			     (math-oddp (nth 2 math-solve-lhs))
+			     (math-solve-sign math-try-solve-sign 
+                                              (nth 2 math-solve-lhs)))))
 		      (t (math-try-solve-for
-			  (nth 1 lhs)
+			  (nth 1 math-solve-lhs)
 			  (math-mul
 			   (math-normalize
 			    (list 'calcFunc-exp
-				  (if (Math-realp (nth 2 lhs))
+				  (if (Math-realp (nth 2 math-solve-lhs))
 				      (math-div (math-mul
 						 '(var pi var-pi)
 						 (math-solve-get-int
 						  '(var i var-i)
-						  (and (integerp (nth 2 lhs))
+						  (and (integerp (nth 2 math-solve-lhs))
 						       (math-abs
-							(nth 2 lhs)))))
-						(math-div (nth 2 lhs) 2))
+							(nth 2 math-solve-lhs)))))
+						(math-div (nth 2 math-solve-lhs) 2))
 				    (math-div (math-mul
 					       2
 					       (math-mul
 						'(var pi var-pi)
 						(math-solve-get-int
 						 '(var i var-i)
-						 (and (integerp (nth 2 lhs))
+						 (and (integerp (nth 2 math-solve-lhs))
 						      (math-abs
-						       (nth 2 lhs))))))
-					      (nth 2 lhs)))))
+						       (nth 2 math-solve-lhs))))))
+					      (nth 2 math-solve-lhs)))))
 			   (math-normalize
 			    (list 'calcFunc-nroot
-				  rhs
-				  (nth 2 lhs))))
-			  (and sign
-			       (math-oddp (nth 2 lhs))
-			       (math-solve-sign sign (nth 2 lhs)))))))))
+				  math-solve-rhs
+				  (nth 2 math-solve-lhs))))
+			  (and math-try-solve-sign
+			       (math-oddp (nth 2 math-solve-lhs))
+			       (math-solve-sign math-try-solve-sign 
+                                                (nth 2 math-solve-lhs)))))))))
 	(t nil)))
 
 (defun math-solve-prod (lsoln rsoln)
@@ -2433,9 +2553,9 @@
 	 rsoln)
 	((null rsoln)
 	 lsoln)
-	((eq solve-full 'all)
+	((eq math-solve-full 'all)
 	 (cons 'vec (append (cdr lsoln) (cdr rsoln))))
-	(solve-full
+	(math-solve-full
 	 (list 'calcFunc-if
 	       (list 'calcFunc-gt (math-solve-get-sign 1) 0)
 	       lsoln
@@ -2443,34 +2563,38 @@
 	(t lsoln)))
 
 ;;; This deals with negative, fractional, and symbolic powers of "x".
+;; The variable math-solve-b is local to math-decompose-poly,
+;; but is used by math-solve-poly-funny-powers.
+
 (defun math-solve-poly-funny-powers (sub-rhs)    ; uses "t1", "t2"
-  (setq t1 lhs)
+  (setq math-t1 math-solve-lhs)
   (let ((pp math-poly-neg-powers)
 	fac)
     (while pp
       (setq fac (math-pow (car pp) (or math-poly-mult-powers 1))
-	    t1 (math-mul t1 fac)
-	    rhs (math-mul rhs fac)
+	    math-t1 (math-mul math-t1 fac)
+	    math-solve-rhs (math-mul math-solve-rhs fac)
 	    pp (cdr pp))))
-  (if sub-rhs (setq t1 (math-sub t1 rhs)))
+  (if sub-rhs (setq math-t1 (math-sub math-t1 math-solve-rhs)))
   (let ((math-poly-neg-powers nil))
-    (setq t2 (math-mul (or math-poly-mult-powers 1)
+    (setq math-t2 (math-mul (or math-poly-mult-powers 1)
 		       (let ((calc-prefer-frac t))
 			 (math-div 1 math-poly-frac-powers)))
-	  t1 (math-is-polynomial (math-simplify (calcFunc-expand t1)) b 50))))
+	  math-t1 (math-is-polynomial 
+                   (math-simplify (calcFunc-expand math-t1)) math-solve-b 50))))
 
 ;;; This converts "a x^8 + b x^5 + c x^2" to "(a (x^3)^2 + b (x^3) + c) * x^2".
 (defun math-solve-crunch-poly (max-degree)   ; uses "t1", "t3"
   (let ((count 0))
-    (while (and t1 (Math-zerop (car t1)))
-      (setq t1 (cdr t1)
+    (while (and math-t1 (Math-zerop (car math-t1)))
+      (setq math-t1 (cdr math-t1)
 	    count (1+ count)))
-    (and t1
-	 (let* ((degree (1- (length t1)))
+    (and math-t1
+	 (let* ((degree (1- (length math-t1)))
 		(scale degree))
-	   (while (and (> scale 1) (= (car t3) 1))
+	   (while (and (> scale 1) (= (car math-t3) 1))
 	     (and (= (% degree scale) 0)
-		  (let ((p t1)
+		  (let ((p math-t1)
 			(n 0)
 			(new-t1 nil)
 			(okay t))
@@ -2482,11 +2606,12 @@
 		      (setq p (cdr p)
 			    n (1+ n)))
 		    (if okay
-			(setq t3 (cons scale (cdr t3))
-			      t1 new-t1))))
+			(setq math-t3 (cons scale (cdr math-t3))
+			      math-t1 new-t1))))
 	     (setq scale (1- scale)))
-	   (setq t3 (list (math-mul (car t3) t2) (math-mul count t2)))
-	   (<= (1- (length t1)) max-degree)))))
+	   (setq math-t3 (list (math-mul (car math-t3) math-t2) 
+                               (math-mul count math-t2)))
+	   (<= (1- (length math-t1)) max-degree)))))
 
 (defun calcFunc-poly (expr var &optional degree)
   (if degree
@@ -2509,37 +2634,38 @@
 	(cons 'vec d)
       (math-reject-arg expr "Expected a polynomial"))))
 
-(defun math-decompose-poly (lhs solve-var degree sub-rhs)
-  (let ((rhs (or sub-rhs 1))
-	t1 t2 t3)
-    (setq t2 (math-polynomial-base
-	      lhs
+(defun math-decompose-poly (math-solve-lhs math-solve-var degree sub-rhs)
+  (let ((math-solve-rhs (or sub-rhs 1))
+	math-t1 math-t2 math-t3)
+    (setq math-t2 (math-polynomial-base
+	      math-solve-lhs
 	      (function
-	       (lambda (b)
+	       (lambda (math-solve-b)
 		 (let ((math-poly-neg-powers '(1))
 		       (math-poly-mult-powers nil)
 		       (math-poly-frac-powers 1)
 		       (math-poly-exp-base t))
-		   (and (not (equal b lhs))
-			(or (not (memq (car-safe b) '(+ -))) sub-rhs)
-			(setq t3 '(1 0) t2 1
-			      t1 (math-is-polynomial lhs b 50))
+		   (and (not (equal math-solve-b math-solve-lhs))
+			(or (not (memq (car-safe math-solve-b) '(+ -))) sub-rhs)
+			(setq math-t3 '(1 0) math-t2 1
+			      math-t1 (math-is-polynomial math-solve-lhs 
+                                                          math-solve-b 50))
 			(if (and (equal math-poly-neg-powers '(1))
 				 (memq math-poly-mult-powers '(nil 1))
 				 (eq math-poly-frac-powers 1)
 				 sub-rhs)
-			    (setq t1 (cons (math-sub (car t1) rhs)
-					   (cdr t1)))
+			    (setq math-t1 (cons (math-sub (car math-t1) math-solve-rhs)
+					   (cdr math-t1)))
 			  (math-solve-poly-funny-powers sub-rhs))
 			(math-solve-crunch-poly degree)
-			(or (math-expr-contains b solve-var)
-			    (math-expr-contains (car t3) solve-var))))))))
-    (if t2
-	(list (math-pow t2 (car t3))
-	      (cons 'vec t1)
+			(or (math-expr-contains math-solve-b math-solve-var)
+			    (math-expr-contains (car math-t3) math-solve-var))))))))
+    (if math-t2
+	(list (math-pow math-t2 (car math-t3))
+	      (cons 'vec math-t1)
 	      (if sub-rhs
-		  (math-pow t2 (nth 1 t3))
-		(math-div (math-pow t2 (nth 1 t3)) rhs))))))
+		  (math-pow math-t2 (nth 1 math-t3))
+		(math-div (math-pow math-t2 (nth 1 math-t3)) math-solve-rhs))))))
 
 (defun math-solve-linear (var sign b a)
   (math-try-solve-for var
@@ -2623,9 +2749,9 @@
    var
    (let* ((asqr (math-sqr a))
 	  (asqr4 (math-div asqr 4))
-	  (y (let ((solve-full nil)
+	  (y (let ((math-solve-full nil)
 		   calc-next-why)
-	       (math-solve-cubic solve-var
+	       (math-solve-cubic math-solve-var
 				 (math-sub (math-sub
 					    (math-mul 4 (math-mul b d))
 					    (math-mul asqr d))
@@ -2665,6 +2791,14 @@
 
 (defvar math-symbolic-solve nil)
 (defvar math-int-coefs nil)
+
+;; The variable math-int-threshold is local to math-poly-all-roots,
+;; but is used by math-poly-newton-root.
+(defvar math-int-threshold)
+;; The variables math-int-scale, math-int-factors and math-double-roots
+;; are local to math-poly-all-roots, but are used by math-poly-integer-root.
+(defvar math-int-scale)
+
 (defun math-poly-all-roots (var p &optional math-factoring)
   (catch 'ouch
     (let* ((math-symbolic-solve calc-symbolic-mode)
@@ -2718,10 +2852,10 @@
 		      deg (1- deg))))
 	    (setq p (reverse def-p))))
       (if (> deg 1)
-	  (let ((solve-var '(var DUMMY var-DUMMY))
+	  (let ((math-solve-var '(var DUMMY var-DUMMY))
 		(math-solve-sign nil)
 		(math-solve-ranges nil)
-		(solve-full 'all))
+		(math-solve-full 'all))
 	    (if (= (length p) (length math-int-coefs))
 		(setq p (reverse math-int-coefs)))
 	    (setq roots (append (cdr (apply (cond ((= deg 2)
@@ -2730,7 +2864,7 @@
 						   'math-solve-cubic)
 						  (t
 						   'math-solve-quartic))
-					    solve-var p))
+					    math-solve-var p))
 				roots)))
 	(if (> deg 0)
 	    (setq roots (cons (math-div (math-neg (car p)) (nth 1 p))
@@ -2744,7 +2878,7 @@
 	(let ((vec nil) res)
 	  (while roots
 	    (let ((root (car roots))
-		  (solve-full (and solve-full 'all)))
+		  (math-solve-full (and math-solve-full 'all)))
 	      (if (math-floatp root)
 		  (setq root (math-poly-any-root orig-p root t)))
 	      (setq vec (append vec
@@ -2754,7 +2888,7 @@
 	  (setq vec (cons 'vec (nreverse vec)))
 	  (if math-symbolic-solve
 	      (setq vec (math-normalize vec)))
-	  (if (eq solve-full t)
+	  (if (eq math-solve-full t)
 	      (list 'calcFunc-subscr
 		    vec
 		    (math-solve-get-int 1 (1- (length orig-p)) 1))
@@ -2972,8 +3106,8 @@
 
 (defun math-solve-find-root-term (x neg)    ; sets "t2", "t3"
   (if (math-solve-find-root-in-prod x)
-      (setq t3 neg
-	    t1 x)
+      (setq math-t3 neg
+	    math-t1 x)
     (and (memq (car-safe x) '(+ -))
 	 (or (math-solve-find-root-term (nth 1 x) neg)
 	     (math-solve-find-root-term (nth 2 x)
@@ -2981,33 +3115,39 @@
 
 (defun math-solve-find-root-in-prod (x)
   (and (consp x)
-       (math-expr-contains x solve-var)
+       (math-expr-contains x math-solve-var)
        (or (and (eq (car x) 'calcFunc-sqrt)
-		(setq t2 2))
+		(setq math-t2 2))
 	   (and (eq (car x) '^)
 		(or (and (memq (math-quarter-integer (nth 2 x)) '(1 2 3))
-			 (setq t2 2))
+			 (setq math-t2 2))
 		    (and (eq (car-safe (nth 2 x)) 'frac)
 			 (eq (nth 2 (nth 2 x)) 3)
-			 (setq t2 3))))
+			 (setq math-t2 3))))
 	   (and (memq (car x) '(* /))
-		(or (and (not (math-expr-contains (nth 1 x) solve-var))
+		(or (and (not (math-expr-contains (nth 1 x) math-solve-var))
 			 (math-solve-find-root-in-prod (nth 2 x)))
-		    (and (not (math-expr-contains (nth 2 x) solve-var))
+		    (and (not (math-expr-contains (nth 2 x) math-solve-var))
 			 (math-solve-find-root-in-prod (nth 1 x))))))))
 
+;; The variable math-solve-vars is local to math-solve-system, 
+;; but is used by math-solve-system-rec.
+(defvar math-solve-vars)
 
-(defun math-solve-system (exprs solve-vars solve-full)
+;; The variable math-solve-simplifying is local to math-solve-system
+;; and math-solve-system-rec, but is used by math-solve-system-subst.
+
+(defun math-solve-system (exprs math-solve-vars math-solve-full)
   (setq exprs (mapcar 'list (if (Math-vectorp exprs)
 				(cdr exprs)
 			      (list exprs)))
-	solve-vars (if (Math-vectorp solve-vars)
-		       (cdr solve-vars)
-		     (list solve-vars)))
+	math-solve-vars (if (Math-vectorp math-solve-vars)
+		       (cdr math-solve-vars)
+		     (list math-solve-vars)))
   (or (let ((math-solve-simplifying nil))
-	(math-solve-system-rec exprs solve-vars nil))
+	(math-solve-system-rec exprs math-solve-vars nil))
       (let ((math-solve-simplifying t))
-	(math-solve-system-rec exprs solve-vars nil))))
+	(math-solve-system-rec exprs math-solve-vars nil))))
 
 ;;; The following backtracking solver works by choosing a variable
 ;;; and equation, and trying to solve the equation for the variable.
@@ -3020,20 +3160,26 @@
 ;;; To support calcFunc-roots, entries in eqn-list and solns are
 ;;; actually lists of equations.
 
+;; The variables math-solve-system-res and math-solve-system-vv are
+;; local to math-solve-system-rec, but are used by math-solve-system-subst.
+(defvar math-solve-system-vv)
+(defvar math-solve-system-res)
+
+
 (defun math-solve-system-rec (eqn-list var-list solns)
   (if var-list
       (let ((v var-list)
-	    (res nil))
+	    (math-solve-system-res nil))
 
 	;; Try each variable in turn.
 	(while
 	    (and
 	     v
-	     (let* ((vv (car v))
+	     (let* ((math-solve-system-vv (car v))
 		    (e eqn-list)
-		    (elim (eq (car-safe vv) 'calcFunc-elim)))
+		    (elim (eq (car-safe math-solve-system-vv) 'calcFunc-elim)))
 	       (if elim
-		   (setq vv (nth 1 vv)))
+		   (setq math-solve-system-vv (nth 1 math-solve-system-vv)))
 
 	       ;; Try each equation in turn.
 	       (while
@@ -3042,26 +3188,27 @@
 		    (let ((e2 (car e))
 			  (eprev nil)
 			  res2)
-		      (setq res nil)
+		      (setq math-solve-system-res nil)
 
-		      ;; Try to solve for vv the list of equations e2.
+		      ;; Try to solve for math-solve-system-vv the list of equations e2.
 		      (while (and e2
 				  (setq res2 (or (and (eq (car e2) eprev)
 						      res2)
-						 (math-solve-for (car e2) 0 vv
-								 solve-full))))
+						 (math-solve-for (car e2) 0 
+                                                                 math-solve-system-vv
+								 math-solve-full))))
 			(setq eprev (car e2)
-			      res (cons (if (eq solve-full 'all)
+			      math-solve-system-res (cons (if (eq math-solve-full 'all)
 					    (cdr res2)
 					  (list res2))
-					res)
+					math-solve-system-res)
 			      e2 (cdr e2)))
 		      (if e2
-			  (setq res nil)
+			  (setq math-solve-system-res nil)
 
 			;; Found a solution.  Now try other variables.
-			(setq res (nreverse res)
-			      res (math-solve-system-rec
+			(setq math-solve-system-res (nreverse math-solve-system-res)
+			      math-solve-system-res (math-solve-system-rec
 				   (mapcar
 				    'math-solve-system-subst
 				    (delq (car e)
@@ -3078,20 +3225,22 @@
 					     solns)))
 				     (if elim
 					 s
-				       (cons (cons vv (apply 'append res))
+				       (cons (cons 
+                                              math-solve-system-vv 
+                                              (apply 'append math-solve-system-res))
 					     s)))))
-			(not res))))
+			(not math-solve-system-res))))
 		 (setq e (cdr e)))
-	       (not res)))
+	       (not math-solve-system-res)))
 	  (setq v (cdr v)))
-	res)
+	math-solve-system-res)
 
     ;; Eliminated all variables, so now put solution into the proper format.
     (setq solns (sort solns
 		      (function
 		       (lambda (x y)
-			 (not (memq (car x) (memq (car y) solve-vars)))))))
-    (if (eq solve-full 'all)
+			 (not (memq (car x) (memq (car y) math-solve-vars)))))))
+    (if (eq math-solve-full 'all)
 	(math-transpose
 	 (math-normalize
 	  (cons 'vec
@@ -3106,21 +3255,26 @@
 
 (defun math-solve-system-subst (x)    ; uses "res" and "v"
   (let ((accum nil)
-	(res2 res))
+	(res2 math-solve-system-res))
     (while x
       (setq accum (nconc accum
 			 (mapcar (function
 				  (lambda (r)
 				    (if math-solve-simplifying
 					(math-simplify
-					 (math-expr-subst (car x) vv r))
-				      (math-expr-subst (car x) vv r))))
+					 (math-expr-subst 
+                                          (car x) math-solve-system-vv r))
+				      (math-expr-subst 
+                                       (car x) math-solve-system-vv r))))
 				 (car res2)))
 	    x (cdr x)
 	    res2 (cdr res2)))
     accum))
 
 
+;; calc-command-flags is declared in calc.el
+(defvar calc-command-flags)
+
 (defun math-get-from-counter (name)
   (let ((ctr (assq name calc-command-flags)))
     (if ctr
@@ -3129,6 +3283,8 @@
 	    calc-command-flags (cons ctr calc-command-flags)))
     (cdr ctr)))
 
+(defvar var-GenCount)
+
 (defun math-solve-get-sign (val)
   (setq val (math-simplify val))
   (if (and (eq (car-safe val) '*)
@@ -3139,17 +3295,17 @@
 	 (setq val (math-normalize (list '^
 					 (nth 1 (nth 1 val))
 					 (math-div (nth 2 (nth 1 val)) 2)))))
-    (if solve-full
+    (if math-solve-full
 	(if (and (calc-var-value 'var-GenCount)
 		 (Math-natnump var-GenCount)
-		 (not (eq solve-full 'all)))
+		 (not (eq math-solve-full 'all)))
 	    (prog1
 		(math-mul (list 'calcFunc-as var-GenCount) val)
 	      (setq var-GenCount (math-add var-GenCount 1))
 	      (calc-refresh-evaltos 'var-GenCount))
 	  (let* ((var (concat "s" (int-to-string (math-get-from-counter 'solve-sign))))
 		 (var2 (list 'var (intern var) (intern (concat "var-" var)))))
-	    (if (eq solve-full 'all)
+	    (if (eq math-solve-full 'all)
 		(setq math-solve-ranges (cons (list var2 1 -1)
 					      math-solve-ranges)))
 	    (math-mul var2 val)))
@@ -3157,10 +3313,10 @@
       val)))
 
 (defun math-solve-get-int (val &optional range first)
-  (if solve-full
+  (if math-solve-full
       (if (and (calc-var-value 'var-GenCount)
 	       (Math-natnump var-GenCount)
-	       (not (eq solve-full 'all)))
+	       (not (eq math-solve-full 'all)))
 	  (prog1
 	      (math-mul val (list 'calcFunc-an var-GenCount))
 	    (setq var-GenCount (math-add var-GenCount 1))
@@ -3168,7 +3324,7 @@
 	(let* ((var (concat "n" (int-to-string
 				 (math-get-from-counter 'solve-int))))
 	       (var2 (list 'var (intern var) (intern (concat "var-" var)))))
-	  (if (and range (eq solve-full 'all))
+	  (if (and range (eq math-solve-full 'all))
 	      (setq math-solve-ranges (cons (cons var2
 						  (cdr (calcFunc-index
 							range (or first 0))))
@@ -3191,15 +3347,15 @@
     (if (memq (car expr) '(* /))
 	(math-looks-evenp (nth 1 expr)))))
 
-(defun math-solve-for (lhs rhs solve-var solve-full &optional sign)
-  (if (math-expr-contains rhs solve-var)
-      (math-solve-for (math-sub lhs rhs) 0 solve-var solve-full)
-    (and (math-expr-contains lhs solve-var)
+(defun math-solve-for (lhs rhs math-solve-var math-solve-full &optional sign)
+  (if (math-expr-contains rhs math-solve-var)
+      (math-solve-for (math-sub lhs rhs) 0 math-solve-var math-solve-full)
+    (and (math-expr-contains lhs math-solve-var)
 	 (math-with-extra-prec 1
-	   (let* ((math-poly-base-variable solve-var)
+	   (let* ((math-poly-base-variable math-solve-var)
 		  (res (math-try-solve-for lhs rhs sign)))
-	     (if (and (eq solve-full 'all)
-		      (math-known-realp solve-var))
+	     (if (and (eq math-solve-full 'all)
+		      (math-known-realp math-solve-var))
 		 (let ((old-len (length res))
 		       new-len)
 		   (setq res (delq nil
--- a/lisp/calc/calcalg3.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/calc/calcalg3.el	Mon Nov 22 11:06:39 2004 +0000
@@ -3,8 +3,7 @@
 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
-;; Maintainers: D. Goel <deego@gnufans.org>
-;;              Colin Walters <walters@debian.org>
+;; Maintainer: Jay Belanger <belanger@truman.edu>
 
 ;; This file is part of GNU Emacs.
 
@@ -99,8 +98,15 @@
        (calc-enter-result 1 "poli" (list 'calcFunc-polint data
 					 (calc-top 1)))))))
 
+;; The variables calc-curve-nvars, calc-curve-varnames, calc-curve-model and calc-curve-coefnames are local to calc-curve-fit, but are
+;; used by calc-get-fit-variables which is called by calc-curve-fit.
+(defvar calc-curve-nvars)
+(defvar calc-curve-varnames)
+(defvar calc-curve-model)
+(defvar calc-curve-coefnames)
 
-(defun calc-curve-fit (arg &optional model coefnames varnames)
+(defun calc-curve-fit (arg &optional calc-curve-model 
+                           calc-curve-coefnames calc-curve-varnames)
   (interactive "P")
   (calc-slow-wrapper
    (setq calc-aborted-prefix nil)
@@ -108,7 +114,7 @@
 		 (if (calc-is-hyperbolic) 'calcFunc-efit
 		   'calcFunc-fit)))
 	 key (which 0)
-	 n nvars temp data
+	 n calc-curve-nvars temp data
 	 (homog nil)
 	 (msgs '( "(Press ? for help)"
 		  "1 = linear or multilinear"
@@ -120,7 +126,7 @@
 		  "g = (a/b sqrt(2 pi)) exp(-0.5*((x-c)/b)^2)"
 		  "h prefix = homogeneous model (no constant term)"
 		  "' = alg entry, $ = stack, u = Model1, U = Model2")))
-     (while (not model)
+     (while (not calc-curve-model)
        (message "Fit to model: %s:%s"
 		(nth which msgs)
 		(if homog " h" ""))
@@ -150,44 +156,50 @@
 		      (t (error "Bad prefix argument")))
 		(or (math-matrixp data) (not (cdr (cdr data)))
 		    (error "Data matrix is not a matrix!"))
-		(setq nvars (- (length data) 2)
-		      coefnames nil
-		      varnames nil)
+		(setq calc-curve-nvars (- (length data) 2)
+		      calc-curve-coefnames nil
+		      calc-curve-varnames nil)
 		nil))
 	     ((= key ?1)  ; linear or multilinear
-	      (calc-get-fit-variables nvars (1+ nvars) (and homog 0))
-	      (setq model (math-mul coefnames
-				    (cons 'vec (cons 1 (cdr varnames))))))
+	      (calc-get-fit-variables calc-curve-nvars 
+                                      (1+ calc-curve-nvars) (and homog 0))
+	      (setq calc-curve-model (math-mul calc-curve-coefnames
+				    (cons 'vec (cons 1 (cdr calc-curve-varnames))))))
 	     ((and (>= key ?2) (<= key ?9))   ; polynomial
 	      (calc-get-fit-variables 1 (- key ?0 -1) (and homog 0))
-	      (setq model (math-build-polynomial-expr (cdr coefnames)
-						      (nth 1 varnames))))
+	      (setq calc-curve-model 
+                    (math-build-polynomial-expr (cdr calc-curve-coefnames)
+                                                (nth 1 calc-curve-varnames))))
 	     ((= key ?i)  ; exact polynomial
 	      (calc-get-fit-variables 1 (1- (length (nth 1 data)))
 				      (and homog 0))
-	      (setq model (math-build-polynomial-expr (cdr coefnames)
-						      (nth 1 varnames))))
+	      (setq calc-curve-model 
+                    (math-build-polynomial-expr (cdr calc-curve-coefnames)
+                                                (nth 1 calc-curve-varnames))))
 	     ((= key ?p)  ; power law
-	      (calc-get-fit-variables nvars (1+ nvars) (and homog 1))
-	      (setq model (math-mul (nth 1 coefnames)
+	      (calc-get-fit-variables calc-curve-nvars 
+                                      (1+ calc-curve-nvars) (and homog 1))
+	      (setq calc-curve-model (math-mul (nth 1 calc-curve-coefnames)
 				    (calcFunc-reduce
 				     '(var mul var-mul)
 				     (calcFunc-map
 				      '(var pow var-pow)
-				      varnames
-				      (cons 'vec (cdr (cdr coefnames))))))))
+				      calc-curve-varnames
+				      (cons 'vec (cdr (cdr calc-curve-coefnames))))))))
 	     ((= key ?^)  ; exponential law
-	      (calc-get-fit-variables nvars (1+ nvars) (and homog 1))
-	      (setq model (math-mul (nth 1 coefnames)
+	      (calc-get-fit-variables calc-curve-nvars 
+                                      (1+ calc-curve-nvars) (and homog 1))
+	      (setq calc-curve-model (math-mul (nth 1 calc-curve-coefnames)
 				    (calcFunc-reduce
 				     '(var mul var-mul)
 				     (calcFunc-map
 				      '(var pow var-pow)
-				      (cons 'vec (cdr (cdr coefnames)))
-				      varnames)))))
+				      (cons 'vec (cdr (cdr calc-curve-coefnames)))
+				      calc-curve-varnames)))))
 	     ((memq key '(?e ?E))
-	      (calc-get-fit-variables nvars (1+ nvars) (and homog 1))
-	      (setq model (math-mul (nth 1 coefnames)
+	      (calc-get-fit-variables calc-curve-nvars 
+                                      (1+ calc-curve-nvars) (and homog 1))
+	      (setq calc-curve-model (math-mul (nth 1 calc-curve-coefnames)
 				    (calcFunc-reduce
 				     '(var mul var-mul)
 				     (calcFunc-map
@@ -198,45 +210,50 @@
 					  (^ 10 (var a var-a))))
 				      (calcFunc-map
 				       '(var mul var-mul)
-				       (cons 'vec (cdr (cdr coefnames)))
-				       varnames))))))
+				       (cons 'vec (cdr (cdr calc-curve-coefnames)))
+				       calc-curve-varnames))))))
 	     ((memq key '(?x ?X))
-	      (calc-get-fit-variables nvars (1+ nvars) (and homog 0))
-	      (setq model (math-mul coefnames
-				    (cons 'vec (cons 1 (cdr varnames)))))
-	      (setq model (if (eq key ?x)
-			      (list 'calcFunc-exp model)
-			    (list '^ 10 model))))
+	      (calc-get-fit-variables calc-curve-nvars 
+                                      (1+ calc-curve-nvars) (and homog 0))
+	      (setq calc-curve-model (math-mul calc-curve-coefnames
+				    (cons 'vec (cons 1 (cdr calc-curve-varnames)))))
+	      (setq calc-curve-model (if (eq key ?x)
+			      (list 'calcFunc-exp calc-curve-model)
+			    (list '^ 10 calc-curve-model))))
 	     ((memq key '(?l ?L))
-	      (calc-get-fit-variables nvars (1+ nvars) (and homog 0))
-	      (setq model (math-mul coefnames
+	      (calc-get-fit-variables calc-curve-nvars 
+                                      (1+ calc-curve-nvars) (and homog 0))
+	      (setq calc-curve-model (math-mul calc-curve-coefnames
 				    (cons 'vec
 					  (cons 1 (cdr (calcFunc-map
 							(if (eq key ?l)
 							    '(var ln var-ln)
 							  '(var log10
 								var-log10))
-							varnames)))))))
+							calc-curve-varnames)))))))
 	     ((= key ?q)
-	      (calc-get-fit-variables nvars (1+ (* 2 nvars)) (and homog 0))
-	      (let ((c coefnames)
-		    (v varnames))
-		(setq model (nth 1 c))
+	      (calc-get-fit-variables calc-curve-nvars 
+                                      (1+ (* 2 calc-curve-nvars)) (and homog 0))
+	      (let ((c calc-curve-coefnames)
+		    (v calc-curve-varnames))
+		(setq calc-curve-model (nth 1 c))
 		(while (setq v (cdr v) c (cdr (cdr c)))
-		  (setq model (math-add
-			       model
+		  (setq calc-curve-model (math-add
+			       calc-curve-model
 			       (list '*
 				     (car c)
 				     (list '^
 					   (list '- (car v) (nth 1 c))
 					   2)))))))
 	     ((= key ?g)
-	      (setq model (math-read-expr "(AFit / BFit sqrt(2 pi)) exp(-0.5 * ((XFit - CFit) / BFit)^2)")
-		    varnames '(vec (var XFit var-XFit))
-		    coefnames '(vec (var AFit var-AFit)
+	      (setq calc-curve-model 
+                    (math-read-expr "(AFit / BFit sqrt(2 pi)) exp(-0.5 * ((XFit - CFit) / BFit)^2)")
+		    calc-curve-varnames '(vec (var XFit var-XFit))
+		    calc-curve-coefnames '(vec (var AFit var-AFit)
 				    (var BFit var-BFit)
 				    (var CFit var-CFit)))
-	      (calc-get-fit-variables 1 (1- (length coefnames)) (and homog 1)))
+	      (calc-get-fit-variables 1 (1- (length calc-curve-coefnames)) 
+                                      (and homog 1)))
 	     ((memq key '(?\$ ?\' ?u ?U))
 	      (let* ((defvars nil)
 		     (record-entry nil))
@@ -244,74 +261,78 @@
 		    (let* ((calc-dollar-values calc-arg-values)
 			   (calc-dollar-used 0)
 			   (calc-hashes-used 0))
-		      (setq model (calc-do-alg-entry "" "Model formula: "))
-		      (if (/= (length model) 1)
+		      (setq calc-curve-model (calc-do-alg-entry "" "Model formula: "))
+		      (if (/= (length calc-curve-model) 1)
 			  (error "Bad format"))
-		      (setq model (car model)
+		      (setq calc-curve-model (car calc-curve-model)
 			    record-entry t)
 		      (if (> calc-dollar-used 0)
-			  (setq coefnames
+			  (setq calc-curve-coefnames
 				(cons 'vec
 				      (nthcdr (- (length calc-arg-values)
 						 calc-dollar-used)
 					      (reverse calc-arg-values))))
 			(if (> calc-hashes-used 0)
-			    (setq coefnames
+			    (setq calc-curve-coefnames
 				  (cons 'vec (calc-invent-args
 					      calc-hashes-used))))))
 		  (progn
-		    (setq model (cond ((eq key ?u)
+		    (setq calc-curve-model (cond ((eq key ?u)
 				       (calc-var-value 'var-Model1))
 				      ((eq key ?U)
 				       (calc-var-value 'var-Model2))
 				      (t (calc-top 1))))
-		    (or model (error "User model not yet defined"))
-		    (if (math-vectorp model)
-			(if (and (memq (length model) '(3 4))
-				 (not (math-objvecp (nth 1 model)))
-				 (math-vectorp (nth 2 model))
-				 (or (null (nth 3 model))
-				     (math-vectorp (nth 3 model))))
-			    (setq varnames (nth 2 model)
-				  coefnames (or (nth 3 model)
-						(cons 'vec
-						      (math-all-vars-but
-						       model varnames)))
-				  model (nth 1 model))
+		    (or calc-curve-model (error "User model not yet defined"))
+		    (if (math-vectorp calc-curve-model)
+			(if (and (memq (length calc-curve-model) '(3 4))
+				 (not (math-objvecp (nth 1 calc-curve-model)))
+				 (math-vectorp (nth 2 calc-curve-model))
+				 (or (null (nth 3 calc-curve-model))
+				     (math-vectorp (nth 3 calc-curve-model))))
+			    (setq calc-curve-varnames (nth 2 calc-curve-model)
+				  calc-curve-coefnames 
+                                  (or (nth 3 calc-curve-model)
+                                      (cons 'vec
+                                            (math-all-vars-but
+                                             calc-curve-model calc-curve-varnames)))
+				  calc-curve-model (nth 1 calc-curve-model))
 			  (error "Incorrect model specifier")))))
-		(or varnames
-		    (let ((with-y (eq (car-safe model) 'calcFunc-eq)))
-		      (if coefnames
-			  (calc-get-fit-variables (if with-y (1+ nvars) nvars)
-						  (1- (length coefnames))
-						  (math-all-vars-but
-						   model coefnames)
-						  nil with-y)
-			(let* ((coefs (math-all-vars-but model nil))
+		(or calc-curve-varnames
+		    (let ((with-y (eq (car-safe calc-curve-model) 'calcFunc-eq)))
+		      (if calc-curve-coefnames
+			  (calc-get-fit-variables 
+                           (if with-y (1+ calc-curve-nvars) calc-curve-nvars)
+                           (1- (length calc-curve-coefnames))
+                           (math-all-vars-but
+                            calc-curve-model calc-curve-coefnames)
+                           nil with-y)
+			(let* ((coefs (math-all-vars-but calc-curve-model nil))
 			       (vars nil)
-			       (n (- (length coefs) nvars (if with-y 2 1)))
+			       (n (- (length coefs) calc-curve-nvars (if with-y 2 1)))
 			       p)
 			  (if (< n 0)
 			      (error "Not enough variables in model"))
 			  (setq p (nthcdr n coefs))
 			  (setq vars (cdr p))
 			  (setcdr p nil)
-			  (calc-get-fit-variables (if with-y (1+ nvars) nvars)
-						  (length coefs)
-						  vars coefs with-y)))))
+			  (calc-get-fit-variables 
+                           (if with-y (1+ calc-curve-nvars) calc-curve-nvars)
+                           (length coefs)
+                           vars coefs with-y)))))
 		(if record-entry
-		    (calc-record (list 'vec model varnames coefnames)
+		    (calc-record (list 'vec calc-curve-model 
+                                       calc-curve-varnames calc-curve-coefnames)
 				 "modl"))))
 	     (t (beep))))
      (let ((calc-fit-to-trail t))
        (calc-enter-result n (substring (symbol-name func) 9)
-			  (list func model
-				(if (= (length varnames) 2)
-				    (nth 1 varnames)
-				  varnames)
-				(if (= (length coefnames) 2)
-				    (nth 1 coefnames)
-				  coefnames)
+			  (list func calc-curve-model
+				(if (= (length calc-curve-varnames) 2)
+				    (nth 1 calc-curve-varnames)
+				  calc-curve-varnames)
+				(if (= (length calc-curve-coefnames) 2)
+				    (nth 1 calc-curve-coefnames)
+				  calc-curve-coefnames)
 				data))
        (if (consp calc-fit-to-trail)
 	   (calc-record (calc-normalize calc-fit-to-trail) "parm"))))))
@@ -340,7 +361,7 @@
       (calc-invent-variables num but t base))))
 
 (defun calc-get-fit-variables (nv nc &optional defv defc with-y homog)
-  (or (= nv (if with-y (1+ nvars) nvars))
+  (or (= nv (if with-y (1+ calc-curve-nvars) calc-curve-nvars))
       (error "Wrong number of data vectors for this type of model"))
   (if (integerp defv)
       (setq homog defv
@@ -388,12 +409,12 @@
 	(error "Expected %d parameter variable%s" nc (if (= nc 1) "" "s")))
     (if homog
 	(setq coefs (cons 'vec (cons homog (cdr coefs)))))
-    (if varnames
-	(setq model (math-multi-subst model (cdr varnames) (cdr vars))))
-    (if coefnames
-	(setq model (math-multi-subst model (cdr coefnames) (cdr coefs))))
-    (setq varnames vars
-	  coefnames coefs)))
+    (if calc-curve-varnames
+	(setq calc-curve-model (math-multi-subst calc-curve-model (cdr calc-curve-varnames) (cdr vars))))
+    (if calc-curve-coefnames
+	(setq calc-curve-model (math-multi-subst calc-curve-model (cdr calc-curve-coefnames) (cdr coefs))))
+    (setq calc-curve-varnames vars
+	  calc-curve-coefnames coefs)))
 
 
 
@@ -401,6 +422,9 @@
 ;;; The following algorithms are from Numerical Recipes chapter 9.
 
 ;;; "rtnewt" with safety kludges
+
+(defvar var-DUMMY)
+
 (defun math-newton-root (expr deriv guess orig-guess limit)
   (math-working "newton" guess)
   (let* ((var-DUMMY guess)
@@ -494,14 +518,20 @@
 				   low vlow high vhigh))))))
 
 ;;; Search for a root in an interval with no overt zero crossing.
+
+;; The variable math-root-widen is local to math-find-root, but
+;; is used by math-search-root, which is called (directly and
+;; indirectly) by math-find-root.
+(defvar math-root-widen)
+
 (defun math-search-root (expr deriv low vlow high vhigh)
   (let (found)
-    (if root-widen
+    (if math-root-widen
 	(let ((iters 0)
-	      (iterlim (if (eq root-widen 'point)
+	      (iterlim (if (eq math-root-widen 'point)
 			   (+ calc-internal-prec 10)
 			 20))
-	      (factor (if (eq root-widen 'point)
+	      (factor (if (eq math-root-widen 'point)
 			  '(float 9 0)
 			'(float 16 -1)))
 	      (prev nil) vprev waslow
@@ -600,6 +630,9 @@
     (list 'vec mid vmid)))
 
 ;;; "mnewt"
+
+(defvar math-root-vars [(var DUMMY var-DUMMY)])
+
 (defun math-newton-multi (expr jacob n guess orig-guess limit)
   (let ((m -1)
 	(p guess)
@@ -624,9 +657,8 @@
 	  (math-reject-arg nil "*Newton's method failed to converge"))
       (list 'vec next expr-val))))
 
-(defvar math-root-vars [(var DUMMY var-DUMMY)])
 
-(defun math-find-root (expr var guess root-widen)
+(defun math-find-root (expr var guess math-root-widen)
   (if (eq (car-safe expr) 'vec)
       (let ((n (1- (length expr)))
 	    (calc-symbolic-mode nil)
@@ -710,7 +742,7 @@
 		    var-DUMMY guess
 		    vlow (math-evaluate-expr expr)
 		    vhigh vlow
-		    root-widen 'point)
+		    math-root-widen 'point)
 	    (if (eq (car guess) 'intv)
 		(progn
 		  (or (math-constp guess) (math-reject-arg guess 'constp))
@@ -752,6 +784,8 @@
 
 ;;; The following algorithms come from Numerical Recipes, chapter 10.
 
+(defvar math-min-vars [(var DUMMY var-DUMMY)])
+
 (defun math-min-eval (expr a)
   (if (Math-vectorp a)
       (let ((m -1))
@@ -894,7 +928,7 @@
 	(tol (list 'float 1 (- -1 prec)))
 	(zeps (list 'float 1 (- -5 prec)))
 	(e '(float 0 0))
-	u vu xm tol1 tol2 etemp p q r xv xw)
+	d u vu xm tol1 tol2 etemp p q r xv xw)
     (while (progn
 	     (setq xm (math-mul-float '(float 5 -1)
 				      (math-add-float a b))
@@ -1056,8 +1090,6 @@
     (list (math-add line-p xi) xi (nth 2 res))))
 
 
-(defvar math-min-vars [(var DUMMY var-DUMMY)])
-
 (defun math-find-minimum (expr var guess min-widen)
   (let* ((calc-symbolic-mode nil)
 	 (n 0)
@@ -1072,7 +1104,7 @@
 	(math-dimension-error))
     (while (setq var (cdr var) guess (cdr guess))
       (or (eq (car-safe (car var)) 'var)
-	  (math-reject-arg (car vg) "*Expected a variable"))
+	  (math-reject-arg (car var) "*Expected a variable"))
       (or (math-expr-contains expr (car var))
 	  (math-reject-arg (car var)
 			   "*Formula does not contain specified variable"))
@@ -1314,6 +1346,12 @@
 
 
 ;;; Open Romberg method; "qromo" in section 4.4.
+
+;; The variable math-ninteg-temp is local to math-ninteg-romberg,
+;; but is used by math-ninteg-midpoint, which is used by 
+;; math-ninteg-romberg.
+(defvar math-ninteg-temp)
+
 (defun math-ninteg-romberg (func expr lo hi mode)
   (let ((curh '(float 1 0))
 	(h nil)
@@ -1321,7 +1359,7 @@
 	(j 0)
 	(ss nil)
 	(prec calc-internal-prec)
-	(integ-temp nil))
+	(math-ninteg-temp nil))
     (math-with-extra-prec 2
       ;; Limit on "j" loop must be 14 or less to keep "it" from overflowing.
       (or (while (and (null ss) (<= (setq j (1+ j)) 8))
@@ -1332,8 +1370,7 @@
 		  (if (math-lessp (math-abs (nth 1 res))
 				  (calcFunc-scf (math-abs (car res))
 						(- prec)))
-		      (setq math-ninteg-convergence j
-			    ss (car res)))))
+		      (setq ss (car res)))))
 	    (if (>= j 5)
 		(setq s (cdr s)
 		      h (cdr h)))
@@ -1354,15 +1391,15 @@
     res))
 
 
-(defun math-ninteg-midpoint (expr lo hi mode)    ; uses "integ-temp"
+(defun math-ninteg-midpoint (expr lo hi mode)    ; uses "math-ninteg-temp"
   (if (eq mode 'inf)
       (let ((math-infinite-mode t) temp)
 	(setq temp (math-div 1 lo)
 	      lo (math-div 1 hi)
 	      hi temp)))
-  (if integ-temp
-      (let* ((it3 (* 3 (car integ-temp)))
-	     (math-working-step-2 (* 2 (car integ-temp)))
+  (if math-ninteg-temp
+      (let* ((it3 (* 3 (car math-ninteg-temp)))
+	     (math-working-step-2 (* 2 (car math-ninteg-temp)))
 	     (math-working-step 0)
 	     (range (math-sub hi lo))
 	     (del (math-div range (math-float it3)))
@@ -1371,7 +1408,7 @@
 	     (x (math-add lo (math-mul '(float 5 -1) del)))
 	     (sum '(float 0 0))
 	     (j 0) temp)
-	(while (<= (setq j (1+ j)) (car integ-temp))
+	(while (<= (setq j (1+ j)) (car math-ninteg-temp))
 	  (setq math-working-step (1+ math-working-step)
 		temp (math-ninteg-evaluate expr x mode)
 		math-working-step (1+ math-working-step)
@@ -1379,17 +1416,17 @@
 						  expr (math-add x del2)
 						  mode)))
 		x (math-add x del3)))
-	(setq integ-temp (list it3
-			       (math-add (math-div (nth 1 integ-temp)
-						   '(float 3 0))
-					 (math-mul sum del)))))
-    (setq integ-temp (list 1 (math-mul
-			      (math-sub hi lo)
-			      (math-ninteg-evaluate
-			       expr
-			       (math-mul (math-add lo hi) '(float 5 -1))
-			       mode)))))
-  (nth 1 integ-temp))
+	(setq math-ninteg-temp (list it3
+                                     (math-add (math-div (nth 1 math-ninteg-temp)
+                                                         '(float 3 0))
+                                               (math-mul sum del)))))
+    (setq math-ninteg-temp (list 1 (math-mul
+                                    (math-sub hi lo)
+                                    (math-ninteg-evaluate
+                                     expr
+                                     (math-mul (math-add lo hi) '(float 5 -1))
+                                     mode)))))
+  (nth 1 math-ninteg-temp))
 
 
 
@@ -1427,13 +1464,21 @@
     (math-with-extra-prec 2
       (math-general-fit expr vars coefs data 'full))))
 
+;; The variables math-fit-first-var, math-fit-first-coef and
+;; math-fit-new-coefs are local to math-general-fit, but are used by
+;; calcFunc-fitvar, calcFunc-fitparam and calcFunc-fitdummy 
+;; (respectively), which are used by math-general-fit.
+(defvar math-fit-first-var)
+(defvar math-fit-first-coef)
+(defvar math-fit-new-coefs)
+
 (defun math-general-fit (expr vars coefs data mode)
   (let ((calc-simplify-mode nil)
 	(math-dummy-counter math-dummy-counter)
 	(math-in-fit 1)
 	(extended (eq mode 'full))
-	(first-coef math-dummy-counter)
-	first-var
+	(math-fit-first-coef math-dummy-counter)
+	math-fit-first-var
 	(plain-expr expr)
 	orig-expr
 	have-sdevs need-chisq chisq
@@ -1441,7 +1486,7 @@
 	(y-filter nil)
 	y-dummy
 	(coef-filters nil)
-	new-coefs
+	math-fit-new-coefs
 	(xy-values nil)
 	(weights nil)
 	(var-YVAL nil) (var-YVALX nil)
@@ -1496,8 +1541,8 @@
       (setq dummy (math-dummy-variable)
 	    expr (math-expr-subst expr (car p)
 				  (list 'calcFunc-fitparam
-					(- math-dummy-counter first-coef)))))
-    (setq first-var math-dummy-counter
+					(- math-dummy-counter math-fit-first-coef)))))
+    (setq math-fit-first-var math-dummy-counter
 	  p vars)
     (while (setq p (cdr p))
       (or (eq (car-safe (car p)) 'var)
@@ -1505,8 +1550,8 @@
       (setq dummy (math-dummy-variable)
 	    expr (math-expr-subst expr (car p)
 				  (list 'calcFunc-fitvar
-					(- math-dummy-counter first-var)))))
-    (if (< math-dummy-counter (+ first-var v))
+					(- math-dummy-counter math-fit-first-var)))))
+    (if (< math-dummy-counter (+ math-fit-first-var v))
 	(setq dummy (math-dummy-variable))) ; dependent variable may be unnamed
     (setq y-dummy dummy
 	  orig-expr expr)
@@ -1565,7 +1610,7 @@
 		  (setq sigmasqr (math-add (math-sqr (nth 2 xval))
 					   (or sigmasqr 0))
 			xval (nth 1 xval))))
-	    (set (nth 2 (aref math-dummy-vars (+ first-var j))) xval)
+	    (set (nth 2 (aref math-dummy-vars (+ math-fit-first-var j))) xval)
 	    (setq j (1+ j)))
 
 	  ;; Compute Y value for this data point.
@@ -1656,8 +1701,8 @@
 		    xy-values (cdr xy-values)))))
 
       ;; Convert coefficients back into original terms.
-      (setq new-coefs (copy-sequence beta))
-      (let* ((bp new-coefs)
+      (setq math-fit-new-coefs (copy-sequence beta))
+      (let* ((bp math-fit-new-coefs)
 	     (cp covar)
 	     (sigdat 1)
 	     (math-in-fit 3)
@@ -1673,9 +1718,9 @@
 			  (math-sqrt (math-mul (nth (setq j (1+ j))
 						    (car (setq cp (cdr cp))))
 					       sigdat))))))
-	(setq new-coefs (math-evaluate-expr coef-filters))
+	(setq math-fit-new-coefs (math-evaluate-expr coef-filters))
 	(if calc-fit-to-trail
-	    (let ((bp new-coefs)
+	    (let ((bp math-fit-new-coefs)
 		  (cp coefs)
 		  (vec nil))
 	      (while (setq bp (cdr bp) cp (cdr cp))
@@ -1695,7 +1740,7 @@
 		    (setq vec (cons (list 'calcFunc-fitparam n) vec)
 			  n (1- n)))
 		  vec)
-		(append (cdr new-coefs) (cdr vars))))
+		(append (cdr math-fit-new-coefs) (cdr vars))))
 
     ;; Package the result.
     (math-normalize
@@ -1719,20 +1764,20 @@
 (defun calcFunc-fitvar (x)
   (if (>= math-in-fit 2)
       (progn
-	(setq x (aref math-dummy-vars (+ first-var x -1)))
+	(setq x (aref math-dummy-vars (+ math-fit-first-var x -1)))
 	(or (calc-var-value (nth 2 x)) x))
     (math-reject-arg x)))
 
 (defun calcFunc-fitparam (x)
   (if (>= math-in-fit 2)
       (progn
-	(setq x (aref math-dummy-vars (+ first-coef x -1)))
+	(setq x (aref math-dummy-vars (+ math-fit-first-coef x -1)))
 	(or (calc-var-value (nth 2 x)) x))
     (math-reject-arg x)))
 
 (defun calcFunc-fitdummy (x)
   (if (= math-in-fit 3)
-      (nth x new-coefs)
+      (nth x math-fit-new-coefs)
     (math-reject-arg x)))
 
 (defun calcFunc-hasfitvars (expr)
@@ -1759,19 +1804,25 @@
     (sort (mapcar 'car vars)
 	  (function (lambda (x y) (string< (nth 1 x) (nth 1 y)))))))
 
+;; The variables math-all-vars-vars (the vars for math-all-vars) and
+;; math-all-vars-found are local to math-all-vars-in, but are used by 
+;; math-all-vars-rec which is called by math-all-vars-in.
+(defvar math-all-vars-vars)
+(defvar math-all-vars-found)
+
 (defun math-all-vars-in (expr)
-  (let ((vars nil)
-	found)
+  (let ((math-all-vars-vars nil)
+	math-all-vars-found)
     (math-all-vars-rec expr)
-    vars))
+    math-all-vars-vars))
 
 (defun math-all-vars-rec (expr)
   (if (Math-primp expr)
       (if (eq (car-safe expr) 'var)
 	  (or (math-const-var expr)
-	      (if (setq found (assoc expr vars))
-		  (setcdr found (1+ (cdr found)))
-		(setq vars (cons (cons expr 1) vars)))))
+	      (if (setq math-all-vars-found (assoc expr math-all-vars-vars))
+		  (setcdr math-all-vars-found (1+ (cdr math-all-vars-found)))
+		(setq math-all-vars-vars (cons (cons expr 1) math-all-vars-vars)))))
     (while (setq expr (cdr expr))
       (math-all-vars-rec (car expr)))))
 
--- a/lisp/comint.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/comint.el	Mon Nov 22 11:06:39 2004 +0000
@@ -310,7 +310,7 @@
   :type 'integer
   :group 'comint)
 
-(defvar comint-input-ring-size 32
+(defvar comint-input-ring-size 150
   "Size of input history ring.")
 
 (defvar comint-input-ring-separator "\n"
--- a/lisp/dabbrev.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/dabbrev.el	Mon Nov 22 11:06:39 2004 +0000
@@ -516,25 +516,27 @@
 	      ;; The "abbrev" to expand is just the space.
 	      (setq abbrev " ")
 	      (save-excursion
-		(if dabbrev--last-buffer
-		    (set-buffer dabbrev--last-buffer))
-		;; Find the end of the last "expansion" word.
-		(if (or (eq dabbrev--last-direction 1)
-			(and (eq dabbrev--last-direction 0)
-			     (< dabbrev--last-expansion-location (point))))
-		    (setq dabbrev--last-expansion-location
-			  (+ dabbrev--last-expansion-location
-			     (length dabbrev--last-expansion))))
-		(goto-char dabbrev--last-expansion-location)
-		;; Take the following word, with intermediate separators,
-		;; as our expansion this time.
-		(re-search-forward
-		 (concat "\\(?:" dabbrev--abbrev-char-regexp "\\)+"))
-		(setq expansion (buffer-substring-no-properties
-				 dabbrev--last-expansion-location (point)))
+		(save-restriction
+		  (widen)
+		  (if dabbrev--last-buffer
+		      (set-buffer dabbrev--last-buffer))
+		  ;; Find the end of the last "expansion" word.
+		  (if (or (eq dabbrev--last-direction 1)
+			  (and (eq dabbrev--last-direction 0)
+			       (< dabbrev--last-expansion-location (point))))
+		      (setq dabbrev--last-expansion-location
+			    (+ dabbrev--last-expansion-location
+			       (length dabbrev--last-expansion))))
+		  (goto-char dabbrev--last-expansion-location)
+		  ;; Take the following word, with intermediate separators,
+		  ;; as our expansion this time.
+		  (re-search-forward
+		   (concat "\\(?:" dabbrev--abbrev-char-regexp "\\)+"))
+		  (setq expansion (buffer-substring-no-properties
+				   dabbrev--last-expansion-location (point)))
 
-		;; Record the end of this expansion, in case we repeat this.
-		(setq dabbrev--last-expansion-location (point)))
+		  ;; Record the end of this expansion, in case we repeat this.
+		  (setq dabbrev--last-expansion-location (point))))
 	      ;; Indicate that dabbrev--last-expansion-location is
 	      ;; at the end of the expansion.
 	      (setq dabbrev--last-direction -1))
--- a/lisp/emacs-lisp/byte-opt.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/emacs-lisp/byte-opt.el	Mon Nov 22 11:06:39 2004 +0000
@@ -231,16 +231,16 @@
   (cons 'progn
 	(mapcar
 	 (lambda (sexp)
-	    (let ((fn (car-safe sexp)))
-	      (if (and (symbolp fn)
-		    (or (cdr (assq fn byte-compile-function-environment))
-		      (and (fboundp fn)
-			(not (or (cdr (assq fn byte-compile-macro-environment))
-				 (and (consp (setq fn (symbol-function fn)))
-				      (eq (car fn) 'macro))
-				 (subrp fn))))))
-		  (byte-compile-inline-expand sexp)
-		sexp)))
+	   (let ((f (car-safe sexp)))
+	     (if (and (symbolp f)
+		      (or (cdr (assq f byte-compile-function-environment))
+			  (not (or (not (fboundp f))
+				   (cdr (assq f byte-compile-macro-environment))
+				   (and (consp (setq f (symbol-function f)))
+					(eq (car f) 'macro))
+				   (subrp f)))))
+		 (byte-compile-inline-expand sexp)
+	       sexp)))
 	 (cdr form))))
 
 
@@ -1365,10 +1365,9 @@
 ;; before each insn (or its label).
 (defun byte-decompile-bytecode-1 (bytes constvec &optional make-spliceable)
   (let ((length (length bytes))
-	(ptr 0) optr tag tags op offset
+	(ptr 0) optr tags op offset
 	lap tmp
-	endtag
-	(retcount 0))
+	endtag)
     (while (not (= ptr length))
       (or make-spliceable
 	  (setq lap (cons ptr lap)))
--- a/lisp/emacs-lisp/bytecomp.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/emacs-lisp/bytecomp.el	Mon Nov 22 11:06:39 2004 +0000
@@ -914,14 +914,14 @@
   (when byte-compile-read-position
     (let (last entry)
       (while (progn
-           (setq last byte-compile-last-position
-             entry (assq sym read-symbol-positions-list))
-           (when entry
-           (setq byte-compile-last-position
-             (+ byte-compile-read-position (cdr entry))
-             read-symbol-positions-list
-             (byte-compile-delete-first
-              entry read-symbol-positions-list)))
+	       (setq last byte-compile-last-position
+		     entry (assq sym read-symbol-positions-list))
+	       (when entry
+		 (setq byte-compile-last-position
+		       (+ byte-compile-read-position (cdr entry))
+		       read-symbol-positions-list
+		       (byte-compile-delete-first
+			entry read-symbol-positions-list)))
 	       (or (and allow-previous (not (= last byte-compile-last-position)))
 		   (> last byte-compile-last-position)))))))
 
@@ -2714,17 +2714,18 @@
 (defun byte-compile-form (form &optional for-effect)
   (setq form (macroexpand form byte-compile-macro-environment))
   (cond ((not (consp form))
-	 (when (symbolp form)
-	   (byte-compile-set-symbol-position form))
 	 (cond ((or (not (symbolp form)) (byte-compile-const-symbol-p form))
+		(when (symbolp form)
+		  (byte-compile-set-symbol-position form))
 		(byte-compile-constant form))
 	       ((and for-effect byte-compile-delete-errors)
+		(when (symbolp form)
+		  (byte-compile-set-symbol-position form))
 		(setq for-effect nil))
 	       (t (byte-compile-variable-ref 'byte-varref form))))
 	((symbolp (car form))
 	 (let* ((fn (car form))
 		(handler (get fn 'byte-compile)))
-	   (byte-compile-set-symbol-position fn)
 	   (when (byte-compile-const-symbol-p fn)
 	     (byte-compile-warn "`%s' called as a function" fn))
 	   (and (memq 'interactive-only byte-compile-warnings)
@@ -2735,7 +2736,9 @@
 		    (or (not (byte-compile-version-cond
 			      byte-compile-compatibility))
 			(not (get (get fn 'byte-opcode) 'emacs19-opcode))))
-	       (funcall handler form)
+	       (progn
+		 (byte-compile-set-symbol-position fn)
+		 (funcall handler form))
 	     (if (memq 'callargs byte-compile-warnings)
 		 (byte-compile-callargs-warn form))
 	     (byte-compile-normal-call form))
--- a/lisp/emacs-lisp/cl-compat.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/emacs-lisp/cl-compat.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1,6 +1,6 @@
 ;;; cl-compat.el --- Common Lisp extensions for GNU Emacs Lisp (compatibility)
 
-;; Copyright (C) 1993 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2004  Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Version: 2.02
@@ -139,7 +139,7 @@
 ;; Internal routines.
 
 (defun pair-with-newsyms (oldforms)
-  (let ((newsyms (mapcar (function (lambda (x) (gensym))) oldforms)))
+  (let ((newsyms (mapcar (lambda (x) (make-symbol "--cl-var--")) oldforms)))
     (Values (mapcar* 'list newsyms oldforms) newsyms)))
 
 (defun zip-lists (evens odds)
@@ -185,5 +185,5 @@
 
 (provide 'cl-compat)
 
-;;; arch-tag: 9996bb4f-aaf5-4592-b436-bf64759a3163
+;; arch-tag: 9996bb4f-aaf5-4592-b436-bf64759a3163
 ;;; cl-compat.el ends here
--- a/lisp/emacs-lisp/cl-macs.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/emacs-lisp/cl-macs.el	Mon Nov 22 11:06:39 2004 +0000
@@ -292,7 +292,7 @@
 	  (laterarg nil) (exactarg nil) minarg)
       (or num (setq num 0))
       (if (listp (cadr restarg))
-	  (setq restarg (gensym "--rest--"))
+	  (setq restarg (make-symbol "--cl-rest--"))
 	(setq restarg (cadr restarg)))
       (push (list restarg expr) bind-lets)
       (if (eq (car args) '&whole)
@@ -354,7 +354,7 @@
 		   (look (list 'memq (list 'quote karg) restarg)))
 	      (and def bind-enquote (setq def (list 'quote def)))
 	      (if (cddr arg)
-		  (let* ((temp (or (nth 2 arg) (gensym)))
+		  (let* ((temp (or (nth 2 arg) (make-symbol "--cl-var--")))
 			 (val (list 'car (list 'cdr temp))))
 		    (cl-do-arglist temp look)
 		    (cl-do-arglist varg
@@ -377,7 +377,7 @@
       (setq keys (nreverse keys))
       (or (and (eq (car args) '&allow-other-keys) (pop args))
 	  (null keys) (= safety 0)
-	  (let* ((var (gensym "--keys--"))
+	  (let* ((var (make-symbol "--cl-keys--"))
 		 (allow '(:allow-other-keys))
 		 (check (list
 			 'while var
@@ -494,7 +494,7 @@
 place of a KEYLIST of one atom.  A KEYLIST of t or `otherwise' is
 allowed only in the final clause, and matches if no other keys match.
 Key values are compared by `eql'."
-  (let* ((temp (if (cl-simple-expr-p expr 3) expr (gensym)))
+  (let* ((temp (if (cl-simple-expr-p expr 3) expr (make-symbol "--cl-var--")))
 	 (head-list nil)
 	 (body (cons
 		'cond
@@ -530,7 +530,7 @@
 satisfies TYPE, the corresponding BODY is evaluated.  If no clause succeeds,
 typecase returns nil.  A TYPE of t or `otherwise' is allowed only in the
 final clause, and matches if no other keys match."
-  (let* ((temp (if (cl-simple-expr-p expr 3) expr (gensym)))
+  (let* ((temp (if (cl-simple-expr-p expr 3) expr (make-symbol "--cl-var--")))
 	 (type-list nil)
 	 (body (cons
 		'cond
@@ -644,10 +644,10 @@
       (setq args (append args '(cl-end-loop)))
       (while (not (eq (car args) 'cl-end-loop)) (cl-parse-loop-clause))
       (if loop-finish-flag
-	  (push (list (list loop-finish-flag t)) loop-bindings))
+	  (push `((,loop-finish-flag t)) loop-bindings))
       (if loop-first-flag
-	  (progn (push (list (list loop-first-flag t)) loop-bindings)
-		 (push (list 'setq loop-first-flag nil) loop-steps)))
+	  (progn (push `((,loop-first-flag t)) loop-bindings)
+		 (push `(setq ,loop-first-flag nil) loop-steps)))
       (let* ((epilogue (nconc (nreverse loop-finally)
 			      (list (or loop-result-explicit loop-result))))
 	     (ands (cl-loop-build-ands (nreverse loop-body)))
@@ -658,16 +658,16 @@
 			      (list 'block '--cl-finish--
 				    (subst
 				     (if (eq (car ands) t) while-body
-				       (cons (list 'or (car ands)
-						   '(return-from --cl-finish--
-						      nil))
+				       (cons `(or ,(car ands)
+						  (return-from --cl-finish--
+						    nil))
 					     while-body))
 				     '--cl-map loop-map-form))
 			    (list* 'while (car ands) while-body)))
 		    (if loop-finish-flag
 			(if (equal epilogue '(nil)) (list loop-result-var)
-			  (list (list 'if loop-finish-flag
-				      (cons 'progn epilogue) loop-result-var)))
+			  `((if ,loop-finish-flag
+				(progn ,@epilogue) ,loop-result-var)))
 		      epilogue))))
 	(if loop-result-var (push (list loop-result-var) loop-bindings))
 	(while loop-bindings
@@ -682,7 +682,7 @@
 	    (setq body (list (list* 'symbol-macrolet loop-symbol-macs body))))
 	(list* 'block loop-name body)))))
 
-(defun cl-parse-loop-clause ()   ; uses args, loop-*
+(defun cl-parse-loop-clause ()		; uses args, loop-*
   (let ((word (pop args))
 	(hash-types '(hash-key hash-keys hash-value hash-values))
 	(key-types '(key-code key-codes key-seq key-seqs
@@ -715,7 +715,7 @@
       (let ((loop-for-bindings nil) (loop-for-sets nil) (loop-for-steps nil)
 	    (ands nil))
 	(while
-	    (let ((var (or (pop args) (gensym))))
+	    (let ((var (or (pop args) (make-symbol "--cl-var--"))))
 	      (setq word (pop args))
 	      (if (eq word 'being) (setq word (pop args)))
 	      (if (memq word '(the each)) (setq word (pop args)))
@@ -738,26 +738,28 @@
 				       '(to upto downto above below))
 				 (cl-pop2 args)))
 		       (step (and (eq (car args) 'by) (cl-pop2 args)))
-		       (end-var (and (not (cl-const-expr-p end)) (gensym)))
+		       (end-var (and (not (cl-const-expr-p end))
+				     (make-symbol "--cl-var--")))
 		       (step-var (and (not (cl-const-expr-p step))
-				      (gensym))))
+				      (make-symbol "--cl-var--"))))
 		  (and step (numberp step) (<= step 0)
 		       (error "Loop `by' value is not positive: %s" step))
 		  (push (list var (or start 0)) loop-for-bindings)
 		  (if end-var (push (list end-var end) loop-for-bindings))
 		  (if step-var (push (list step-var step)
-					loop-for-bindings))
+				     loop-for-bindings))
 		  (if end
 		      (push (list
-				(if down (if excl '> '>=) (if excl '< '<=))
-				var (or end-var end)) loop-body))
+			     (if down (if excl '> '>=) (if excl '< '<=))
+			     var (or end-var end)) loop-body))
 		  (push (list var (list (if down '- '+) var
-					   (or step-var step 1)))
-			   loop-for-steps)))
+					(or step-var step 1)))
+			loop-for-steps)))
 
 	       ((memq word '(in in-ref on))
 		(let* ((on (eq word 'on))
-		       (temp (if (and on (symbolp var)) var (gensym))))
+		       (temp (if (and on (symbolp var))
+				 var (make-symbol "--cl-var--"))))
 		  (push (list temp (pop args)) loop-for-bindings)
 		  (push (list 'consp temp) loop-body)
 		  (if (eq word 'in-ref)
@@ -766,18 +768,18 @@
 			(progn
 			  (push (list var nil) loop-for-bindings)
 			  (push (list var (if on temp (list 'car temp)))
-				   loop-for-sets))))
+				loop-for-sets))))
 		  (push (list temp
-				 (if (eq (car args) 'by)
-				     (let ((step (cl-pop2 args)))
-				       (if (and (memq (car-safe step)
-						      '(quote function
-							      function*))
-						(symbolp (nth 1 step)))
-					   (list (nth 1 step) temp)
-					 (list 'funcall step temp)))
-				   (list 'cdr temp)))
-			   loop-for-steps)))
+			      (if (eq (car args) 'by)
+				  (let ((step (cl-pop2 args)))
+				    (if (and (memq (car-safe step)
+						   '(quote function
+							   function*))
+					     (symbolp (nth 1 step)))
+					(list (nth 1 step) temp)
+				      (list 'funcall step temp)))
+				(list 'cdr temp)))
+			loop-for-steps)))
 
 	       ((eq word '=)
 		(let* ((start (pop args))
@@ -785,68 +787,68 @@
 		  (push (list var nil) loop-for-bindings)
 		  (if (or ands (eq (car args) 'and))
 		      (progn
-			(push (list var
-				       (list 'if
-					     (or loop-first-flag
-						 (setq loop-first-flag
-						       (gensym)))
-					     start var))
-				 loop-for-sets)
+			(push `(,var
+				(if ,(or loop-first-flag
+					 (setq loop-first-flag
+					       (make-symbol "--cl-var--")))
+				    ,start ,var))
+			      loop-for-sets)
 			(push (list var then) loop-for-steps))
 		    (push (list var
-				   (if (eq start then) start
-				     (list 'if
-					   (or loop-first-flag
-					       (setq loop-first-flag (gensym)))
-					   start then)))
-			     loop-for-sets))))
+				(if (eq start then) start
+				  `(if ,(or loop-first-flag
+					    (setq loop-first-flag
+						  (make-symbol "--cl-var--")))
+				       ,start ,then)))
+			  loop-for-sets))))
 
 	       ((memq word '(across across-ref))
-		(let ((temp-vec (gensym)) (temp-idx (gensym)))
+		(let ((temp-vec (make-symbol "--cl-vec--"))
+		      (temp-idx (make-symbol "--cl-idx--")))
 		  (push (list temp-vec (pop args)) loop-for-bindings)
 		  (push (list temp-idx -1) loop-for-bindings)
 		  (push (list '< (list 'setq temp-idx (list '1+ temp-idx))
-				 (list 'length temp-vec)) loop-body)
+			      (list 'length temp-vec)) loop-body)
 		  (if (eq word 'across-ref)
 		      (push (list var (list 'aref temp-vec temp-idx))
-			       loop-symbol-macs)
+			    loop-symbol-macs)
 		    (push (list var nil) loop-for-bindings)
 		    (push (list var (list 'aref temp-vec temp-idx))
-			     loop-for-sets))))
+			  loop-for-sets))))
 
 	       ((memq word '(element elements))
 		(let ((ref (or (memq (car args) '(in-ref of-ref))
 			       (and (not (memq (car args) '(in of)))
 				    (error "Expected `of'"))))
 		      (seq (cl-pop2 args))
-		      (temp-seq (gensym))
+		      (temp-seq (make-symbol "--cl-seq--"))
 		      (temp-idx (if (eq (car args) 'using)
 				    (if (and (= (length (cadr args)) 2)
 					     (eq (caadr args) 'index))
 					(cadr (cl-pop2 args))
 				      (error "Bad `using' clause"))
-				  (gensym))))
+				  (make-symbol "--cl-idx--"))))
 		  (push (list temp-seq seq) loop-for-bindings)
 		  (push (list temp-idx 0) loop-for-bindings)
 		  (if ref
-		      (let ((temp-len (gensym)))
+		      (let ((temp-len (make-symbol "--cl-len--")))
 			(push (list temp-len (list 'length temp-seq))
-				 loop-for-bindings)
+			      loop-for-bindings)
 			(push (list var (list 'elt temp-seq temp-idx))
-				 loop-symbol-macs)
+			      loop-symbol-macs)
 			(push (list '< temp-idx temp-len) loop-body))
 		    (push (list var nil) loop-for-bindings)
 		    (push (list 'and temp-seq
-				   (list 'or (list 'consp temp-seq)
-					 (list '< temp-idx
-					       (list 'length temp-seq))))
-			     loop-body)
+				(list 'or (list 'consp temp-seq)
+				      (list '< temp-idx
+					    (list 'length temp-seq))))
+			  loop-body)
 		    (push (list var (list 'if (list 'consp temp-seq)
-					     (list 'pop temp-seq)
-					     (list 'aref temp-seq temp-idx)))
-			     loop-for-sets))
+					  (list 'pop temp-seq)
+					  (list 'aref temp-seq temp-idx)))
+			  loop-for-sets))
 		  (push (list temp-idx (list '1+ temp-idx))
-			   loop-for-steps)))
+			loop-for-steps)))
 
 	       ((memq word hash-types)
 		(or (memq (car args) '(in of)) (error "Expected `of'"))
@@ -857,21 +859,17 @@
 					   (not (eq (caadr args) word)))
 				      (cadr (cl-pop2 args))
 				    (error "Bad `using' clause"))
-				(gensym))))
+				(make-symbol "--cl-var--"))))
 		  (if (memq word '(hash-value hash-values))
 		      (setq var (prog1 other (setq other var))))
 		  (setq loop-map-form
-			(list 'maphash (list 'function
-					     (list* 'lambda (list var other)
-						    '--cl-map)) table))))
+			`(maphash (lambda (,var ,other) . --cl-map) ,table))))
 
 	       ((memq word '(symbol present-symbol external-symbol
 			     symbols present-symbols external-symbols))
 		(let ((ob (and (memq (car args) '(in of)) (cl-pop2 args))))
 		  (setq loop-map-form
-			(list 'mapatoms (list 'function
-					      (list* 'lambda (list var)
-						     '--cl-map)) ob))))
+			`(mapatoms (lambda (,var) . --cl-map) ,ob))))
 
 	       ((memq word '(overlay overlays extent extents))
 		(let ((buf nil) (from nil) (to nil))
@@ -880,14 +878,15 @@
 			  ((eq (car args) 'to) (setq to (cl-pop2 args)))
 			  (t (setq buf (cl-pop2 args)))))
 		  (setq loop-map-form
-			(list 'cl-map-extents
-			      (list 'function (list 'lambda (list var (gensym))
-						    '(progn . --cl-map) nil))
-			      buf from to))))
+			`(cl-map-extents
+			  (lambda (,var ,(make-symbol "--cl-var--"))
+			    (progn . --cl-map) nil)
+			  ,buf ,from ,to))))
 
 	       ((memq word '(interval intervals))
 		(let ((buf nil) (prop nil) (from nil) (to nil)
-		      (var1 (gensym)) (var2 (gensym)))
+		      (var1 (make-symbol "--cl-var1--"))
+		      (var2 (make-symbol "--cl-var2--")))
 		  (while (memq (car args) '(in of property from to))
 		    (cond ((eq (car args) 'from) (setq from (cl-pop2 args)))
 			  ((eq (car args) 'to) (setq to (cl-pop2 args)))
@@ -898,10 +897,9 @@
 		      (setq var1 (car var) var2 (cdr var))
 		    (push (list var (list 'cons var1 var2)) loop-for-sets))
 		  (setq loop-map-form
-			(list 'cl-map-intervals
-			      (list 'function (list 'lambda (list var1 var2)
-						    '(progn . --cl-map)))
-			      buf prop from to))))
+			`(cl-map-intervals
+			  (lambda (,var1 ,var2) . --cl-map)
+			  ,buf ,prop ,from ,to))))
 
 	       ((memq word key-types)
 		(or (memq (car args) '(in of)) (error "Expected `of'"))
@@ -912,37 +910,36 @@
 					  (not (eq (caadr args) word)))
 				     (cadr (cl-pop2 args))
 				   (error "Bad `using' clause"))
-			       (gensym))))
+			       (make-symbol "--cl-var--"))))
 		  (if (memq word '(key-binding key-bindings))
 		      (setq var (prog1 other (setq other var))))
 		  (setq loop-map-form
-			(list (if (memq word '(key-seq key-seqs))
-				  'cl-map-keymap-recursively 'map-keymap)
-			      (list 'function (list* 'lambda (list var other)
-						     '--cl-map)) map))))
+			`(,(if (memq word '(key-seq key-seqs))
+			       'cl-map-keymap-recursively 'map-keymap)
+			  (lambda (,var ,other) . --cl-map) ,map))))
 
 	       ((memq word '(frame frames screen screens))
-		(let ((temp (gensym)))
+		(let ((temp (make-symbol "--cl-var--")))
 		  (push (list var  '(selected-frame))
-			   loop-for-bindings)
+			loop-for-bindings)
 		  (push (list temp nil) loop-for-bindings)
 		  (push (list 'prog1 (list 'not (list 'eq var temp))
-				 (list 'or temp (list 'setq temp var)))
-			   loop-body)
+			      (list 'or temp (list 'setq temp var)))
+			loop-body)
 		  (push (list var (list 'next-frame var))
-			   loop-for-steps)))
+			loop-for-steps)))
 
 	       ((memq word '(window windows))
 		(let ((scr (and (memq (car args) '(in of)) (cl-pop2 args)))
-		      (temp (gensym)))
+		      (temp (make-symbol "--cl-var--")))
 		  (push (list var (if scr
-					 (list 'frame-selected-window scr)
-				       '(selected-window)))
-			   loop-for-bindings)
+				      (list 'frame-selected-window scr)
+				    '(selected-window)))
+			loop-for-bindings)
 		  (push (list temp nil) loop-for-bindings)
 		  (push (list 'prog1 (list 'not (list 'eq var temp))
-				 (list 'or temp (list 'setq temp var)))
-			   loop-body)
+			      (list 'or temp (list 'setq temp var)))
+			loop-body)
 		  (push (list var (list 'next-window var)) loop-for-steps)))
 
 	       (t
@@ -960,15 +957,15 @@
 				     loop-bindings)))
 	(if loop-for-sets
 	    (push (list 'progn
-			   (cl-loop-let (nreverse loop-for-sets) 'setq ands)
-			   t) loop-body))
+			(cl-loop-let (nreverse loop-for-sets) 'setq ands)
+			t) loop-body))
 	(if loop-for-steps
 	    (push (cons (if ands 'psetq 'setq)
-			   (apply 'append (nreverse loop-for-steps)))
-		     loop-steps))))
+			(apply 'append (nreverse loop-for-steps)))
+		  loop-steps))))
 
      ((eq word 'repeat)
-      (let ((temp (gensym)))
+      (let ((temp (make-symbol "--cl-var--")))
 	(push (list (list temp (pop args))) loop-bindings)
 	(push (list '>= (list 'setq temp (list '1- temp)) 0) loop-body)))
 
@@ -978,23 +975,23 @@
 	(if (eq var loop-accum-var)
 	    (push (list 'progn (list 'push what var) t) loop-body)
 	  (push (list 'progn
-			 (list 'setq var (list 'nconc var (list 'list what)))
-			 t) loop-body))))
+		      (list 'setq var (list 'nconc var (list 'list what)))
+		      t) loop-body))))
 
      ((memq word '(nconc nconcing append appending))
       (let ((what (pop args))
 	    (var (cl-loop-handle-accum nil 'nreverse)))
 	(push (list 'progn
-		       (list 'setq var
-			     (if (eq var loop-accum-var)
-				 (list 'nconc
-				       (list (if (memq word '(nconc nconcing))
-						 'nreverse 'reverse)
-					     what)
-				       var)
-			       (list (if (memq word '(nconc nconcing))
-					 'nconc 'append)
-				     var what))) t) loop-body)))
+		    (list 'setq var
+			  (if (eq var loop-accum-var)
+			      (list 'nconc
+				    (list (if (memq word '(nconc nconcing))
+					      'nreverse 'reverse)
+					  what)
+				    var)
+			    (list (if (memq word '(nconc nconcing))
+				      'nconc 'append)
+				  var what))) t) loop-body)))
 
      ((memq word '(concat concating))
       (let ((what (pop args))
@@ -1018,19 +1015,19 @@
 
      ((memq word '(minimize minimizing maximize maximizing))
       (let* ((what (pop args))
-	     (temp (if (cl-simple-expr-p what) what (gensym)))
+	     (temp (if (cl-simple-expr-p what) what (make-symbol "--cl-var--")))
 	     (var (cl-loop-handle-accum nil))
 	     (func (intern (substring (symbol-name word) 0 3)))
 	     (set (list 'setq var (list 'if var (list func var temp) temp))))
 	(push (list 'progn (if (eq temp what) set
-				(list 'let (list (list temp what)) set))
-		       t) loop-body)))
+			     (list 'let (list (list temp what)) set))
+		    t) loop-body)))
 
      ((eq word 'with)
       (let ((bindings nil))
 	(while (progn (push (list (pop args)
-				     (and (eq (car args) '=) (cl-pop2 args)))
-			       bindings)
+				  (and (eq (car args) '=) (cl-pop2 args)))
+			    bindings)
 		      (eq (car args) 'and))
 	  (pop args))
 	(push (nreverse bindings) loop-bindings)))
@@ -1042,22 +1039,22 @@
       (push (list 'not (pop args)) loop-body))
 
      ((eq word 'always)
-      (or loop-finish-flag (setq loop-finish-flag (gensym)))
+      (or loop-finish-flag (setq loop-finish-flag (make-symbol "--cl-flag--")))
       (push (list 'setq loop-finish-flag (pop args)) loop-body)
       (setq loop-result t))
 
      ((eq word 'never)
-      (or loop-finish-flag (setq loop-finish-flag (gensym)))
+      (or loop-finish-flag (setq loop-finish-flag (make-symbol "--cl-flag--")))
       (push (list 'setq loop-finish-flag (list 'not (pop args)))
-	       loop-body)
+	    loop-body)
       (setq loop-result t))
 
      ((eq word 'thereis)
-      (or loop-finish-flag (setq loop-finish-flag (gensym)))
-      (or loop-result-var (setq loop-result-var (gensym)))
+      (or loop-finish-flag (setq loop-finish-flag (make-symbol "--cl-flag--")))
+      (or loop-result-var (setq loop-result-var (make-symbol "--cl-var--")))
       (push (list 'setq loop-finish-flag
-		     (list 'not (list 'setq loop-result-var (pop args))))
-	       loop-body))
+		  (list 'not (list 'setq loop-result-var (pop args))))
+	    loop-body))
 
      ((memq word '(if when unless))
       (let* ((cond (pop args))
@@ -1074,7 +1071,7 @@
 	(let ((form (cons (if simple (cons 'progn (nth 1 then)) (nth 2 then))
 			  (if simple (nth 1 else) (list (nth 2 else))))))
 	  (if (cl-expr-contains form 'it)
-	      (let ((temp (gensym)))
+	      (let ((temp (make-symbol "--cl-var--")))
 		(push (list temp) loop-bindings)
 		(setq form (list* 'if (list 'setq temp cond)
 				  (subst temp 'it form))))
@@ -1088,10 +1085,10 @@
 	(push (cons 'progn (nreverse (cons t body))) loop-body)))
 
      ((eq word 'return)
-      (or loop-finish-flag (setq loop-finish-flag (gensym)))
-      (or loop-result-var (setq loop-result-var (gensym)))
+      (or loop-finish-flag (setq loop-finish-flag (make-symbol "--cl-var--")))
+      (or loop-result-var (setq loop-result-var (make-symbol "--cl-var--")))
       (push (list 'setq loop-result-var (pop args)
-		     loop-finish-flag nil) loop-body))
+		  loop-finish-flag nil) loop-body))
 
      (t
       (let ((handler (and (symbolp word) (get word 'cl-loop-handler))))
@@ -1109,7 +1106,7 @@
 	   (setq par nil p specs)
 	   (while p
 	     (or (cl-const-expr-p (cadar p))
-		 (let ((temp (gensym)))
+		 (let ((temp (make-symbol "--cl-var--")))
 		   (push (list temp (cadar p)) temps)
 		   (setcar (cdar p) temp)))
 	     (setq p (cdr p)))))
@@ -1119,8 +1116,8 @@
 		 (expr (cadr (pop specs)))
 		 (temp (cdr (or (assq spec loop-destr-temps)
 				(car (push (cons spec (or (last spec 0)
-							     (gensym)))
-					      loop-destr-temps))))))
+							  (make-symbol "--cl-var--")))
+					   loop-destr-temps))))))
 	    (push (list temp expr) new)
 	    (while (consp spec)
 	      (push (list (pop spec)
@@ -1143,7 +1140,7 @@
 	var)
     (or loop-accum-var
 	(progn
-	  (push (list (list (setq loop-accum-var (gensym)) def))
+	  (push (list (list (setq loop-accum-var (make-symbol "--cl-var--")) def))
 		   loop-bindings)
 	  (setq loop-result (if func (list func loop-accum-var)
 			      loop-accum-var))
@@ -1214,7 +1211,7 @@
 Then evaluate RESULT to get return value, default nil.
 
 \(fn (VAR LIST [RESULT]) BODY...)"
-  (let ((temp (gensym "--dolist-temp--")))
+  (let ((temp (make-symbol "--cl-dolist-temp--")))
     (list 'block nil
 	  (list* 'let (list (list temp (nth 1 spec)) (car spec))
 		 (list* 'while temp (list 'setq (car spec) (list 'car temp))
@@ -1231,7 +1228,7 @@
 nil.
 
 \(fn (VAR COUNT [RESULT]) BODY...)"
-  (let ((temp (gensym "--dotimes-temp--")))
+  (let ((temp (make-symbol "--cl-dotimes-temp--")))
     (list 'block nil
 	  (list* 'let (list (list temp (nth 1 spec)) (list (car spec) 0))
 		 (list* 'while (list '< (car spec) temp)
@@ -1317,7 +1314,7 @@
 \(fn ((FUNC ARGLIST BODY...) ...) FORM...)"
   (let ((vars nil) (sets nil) (cl-macro-environment cl-macro-environment))
     (while bindings
-      (let ((var (gensym)))
+      (let ((var (make-symbol "--cl-var--")))
 	(push var vars)
 	(push (list 'function* (cons 'lambda (cdar bindings))) sets)
 	(push var sets)
@@ -1370,8 +1367,8 @@
 	 (vars (mapcar (function
 			(lambda (x)
 			  (or (consp x) (setq x (list x)))
-			  (push (gensym (format "--%s--" (car x)))
-				   cl-closure-vars)
+			  (push (make-symbol (format "--cl-%s--" (car x)))
+				cl-closure-vars)
 			  (set (car cl-closure-vars) [bad-lexical-ref])
 			  (list (car x) (cadr x) (car cl-closure-vars))))
 		       bindings))
@@ -1432,7 +1429,7 @@
 a synonym for (list A B C).
 
 \(fn (SYM SYM...) FORM BODY)"
-  (let ((temp (gensym)) (n -1))
+  (let ((temp (make-symbol "--cl-var--")) (n -1))
     (list* 'let* (cons (list temp form)
 		       (mapcar (function
 				(lambda (v)
@@ -1451,7 +1448,7 @@
   (cond ((null vars) (list 'progn form nil))
 	((null (cdr vars)) (list 'setq (car vars) (list 'car form)))
 	(t
-	 (let* ((temp (gensym)) (n 0))
+	 (let* ((temp (make-symbol "--cl-var--")) (n 0))
 	   (list 'let (list (list temp form))
 		 (list 'prog1 (list 'setq (pop vars) (list 'car temp))
 		       (cons 'setq (apply 'nconc
@@ -1590,44 +1587,41 @@
 	  (setq largsr largs tempsr temps))
 	(let ((p1 largs) (p2 temps))
 	  (while p1
-	    (setq lets1 (cons (list (car p2)
-				    (list 'gensym (format "--%s--" (car p1))))
+	    (setq lets1 (cons `(,(car p2)
+				(make-symbol ,(format "--cl-%s--" (car p1))))
 			      lets1)
 		  lets2 (cons (list (car p1) (car p2)) lets2)
 		  p1 (cdr p1) p2 (cdr p2))))
 	(if restarg (setq lets2 (cons (list restarg rest-temps) lets2)))
-	(append (list 'define-setf-method func arg1)
-		(and docstr (list docstr))
-		(list
-		 (list 'let*
-		       (nreverse
-			(cons (list store-temp
-				    (list 'gensym (format "--%s--" store-var)))
-			      (if restarg
-				  (append
-				   (list
-				    (list rest-temps
-					  (list 'mapcar '(quote gensym)
-						restarg)))
-				   lets1)
-				lets1)))
-		       (list 'list  ; 'values
-			     (cons (if restarg 'list* 'list) tempsr)
-			     (cons (if restarg 'list* 'list) largsr)
-			     (list 'list store-temp)
-			     (cons 'let*
-				   (cons (nreverse
-					  (cons (list store-var store-temp)
-						lets2))
-					 args))
-			     (cons (if restarg 'list* 'list)
-				   (cons (list 'quote func) tempsr)))))))
-    (list 'defsetf func '(&rest args) '(store)
-	  (let ((call (list 'cons (list 'quote arg1)
-			    '(append args (list store)))))
-	    (if (car args)
-		(list 'list '(quote progn) call 'store)
-	      call)))))
+	`(define-setf-method ,func ,arg1
+	   ,@(and docstr (list docstr))
+	   (let*
+	       ,(nreverse
+		 (cons `(,store-temp
+			 (make-symbol ,(format "--cl-%s--" store-var)))
+		       (if restarg
+			   `((,rest-temps
+			      (mapcar (lambda (_) (make-symbol "--cl-var--"))
+				      ,restarg))
+			     ,@lets1)
+			 lets1)))
+	     (list			; 'values
+	      (,(if restarg 'list* 'list) ,@tempsr)
+	      (,(if restarg 'list* 'list) ,@largsr)
+	      (list ,store-temp)
+	      (let*
+		  ,(nreverse
+		    (cons (list store-var store-temp)
+			  lets2))
+		,@args)
+	      (,(if restarg 'list* 'list)
+	       ,@(cons (list 'quote func) tempsr))))))
+    `(defsetf ,func (&rest args) (store)
+       ,(let ((call `(cons ',arg1
+			   (append args (list store)))))
+	  (if (car args)
+	      `(list 'progn ,call store)
+	    call)))))
 
 ;;; Some standard place types from Common Lisp.
 (defsetf aref aset)
@@ -1781,8 +1775,8 @@
 
 (define-setf-method nthcdr (n place)
   (let ((method (get-setf-method place cl-macro-environment))
-	(n-temp (gensym "--nthcdr-n--"))
-	(store-temp (gensym "--nthcdr-store--")))
+	(n-temp (make-symbol "--cl-nthcdr-n--"))
+	(store-temp (make-symbol "--cl-nthcdr-store--")))
     (list (cons n-temp (car method))
 	  (cons n (nth 1 method))
 	  (list store-temp)
@@ -1794,9 +1788,9 @@
 
 (define-setf-method getf (place tag &optional def)
   (let ((method (get-setf-method place cl-macro-environment))
-	(tag-temp (gensym "--getf-tag--"))
-	(def-temp (gensym "--getf-def--"))
-	(store-temp (gensym "--getf-store--")))
+	(tag-temp (make-symbol "--cl-getf-tag--"))
+	(def-temp (make-symbol "--cl-getf-def--"))
+	(store-temp (make-symbol "--cl-getf-store--")))
     (list (append (car method) (list tag-temp def-temp))
 	  (append (nth 1 method) (list tag def))
 	  (list store-temp)
@@ -1808,9 +1802,9 @@
 
 (define-setf-method substring (place from &optional to)
   (let ((method (get-setf-method place cl-macro-environment))
-	(from-temp (gensym "--substring-from--"))
-	(to-temp (gensym "--substring-to--"))
-	(store-temp (gensym "--substring-store--")))
+	(from-temp (make-symbol "--cl-substring-from--"))
+	(to-temp (make-symbol "--cl-substring-to--"))
+	(store-temp (make-symbol "--cl-substring-store--")))
     (list (append (car method) (list from-temp to-temp))
 	  (append (nth 1 method) (list from to))
 	  (list store-temp)
@@ -1826,7 +1820,7 @@
 PLACE may be any Lisp form which can appear as the PLACE argument to
 a macro like `setf' or `incf'."
   (if (symbolp place)
-      (let ((temp (gensym "--setf--")))
+      (let ((temp (make-symbol "--cl-setf--")))
 	(list nil nil (list temp) (list 'setq place temp) place))
     (or (and (symbolp (car place))
 	     (let* ((func (car place))
@@ -1933,7 +1927,7 @@
   (if (cl-simple-expr-p place)
       (list 'prog1 (list 'car place) (list 'setf place (list 'cdr place)))
     (let* ((method (cl-setf-do-modify place t))
-	   (temp (gensym "--pop--")))
+	   (temp (make-symbol "--cl-pop--")))
       (list 'let*
 	    (append (car method)
 		    (list (list temp (nth 2 method))))
@@ -1946,9 +1940,9 @@
 PLACE may be a symbol, or any generalized variable allowed by `setf'.
 The form returns true if TAG was found and removed, nil otherwise."
   (let* ((method (cl-setf-do-modify place t))
-	 (tag-temp (and (not (cl-const-expr-p tag)) (gensym "--remf-tag--")))
+	 (tag-temp (and (not (cl-const-expr-p tag)) (make-symbol "--cl-remf-tag--")))
 	 (val-temp (and (not (cl-simple-expr-p place))
-			(gensym "--remf-place--")))
+			(make-symbol "--cl-remf-place--")))
 	 (ttag (or tag-temp tag))
 	 (tval (or val-temp (nth 2 method))))
     (list 'let*
@@ -1990,7 +1984,7 @@
 	       (setq sets (nconc sets (list (pop args) (car args)))))
 	     (nconc (list 'psetf) sets (list (car args) first))))
     (let* ((places (reverse args))
-	   (temp (gensym "--rotatef--"))
+	   (temp (make-symbol "--cl-rotatef--"))
 	   (form temp))
       (while (cdr places)
 	(let ((method (cl-setf-do-modify (pop places) 'unsafe)))
@@ -2022,11 +2016,11 @@
 			(caar rev)))
 	       (value (cadar rev))
 	       (method (cl-setf-do-modify place 'no-opt))
-	       (save (gensym "--letf-save--"))
+	       (save (make-symbol "--cl-letf-save--"))
 	       (bound (and (memq (car place) '(symbol-value symbol-function))
-			   (gensym "--letf-bound--")))
+			   (make-symbol "--cl-letf-bound--")))
 	       (temp (and (not (cl-const-expr-p value)) (cdr bindings)
-			  (gensym "--letf-val--"))))
+			  (make-symbol "--cl-letf-val--"))))
 	  (setq lets (nconc (car method)
 			    (if bound
 				(list (list bound
@@ -2097,7 +2091,7 @@
   (if (and (cl-safe-expr-p arg1) (cl-simple-expr-p place) (symbolp func))
       (list 'setf place (list* func arg1 place args))
     (let* ((method (cl-setf-do-modify place (cons 'list args)))
-	   (temp (and (not (cl-const-expr-p arg1)) (gensym "--arg1--")))
+	   (temp (and (not (cl-const-expr-p arg1)) (make-symbol "--cl-arg1--")))
 	   (rargs (list* (or temp arg1) (nth 2 method) args)))
       (list 'let* (append (and temp (list (list temp arg1))) (car method))
 	    (cl-setf-do-store (nth 1 method)
@@ -2110,7 +2104,7 @@
 If NAME is called, it combines its PLACE argument with the other arguments
 from ARGLIST using FUNC: (define-modify-macro incf (&optional (n 1)) +)"
   (if (memq '&key arglist) (error "&key not allowed in define-modify-macro"))
-  (let ((place (gensym "--place--")))
+  (let ((place (make-symbol "--cl-place--")))
     (list 'defmacro* name (cons place arglist) doc
 	  (list* (if (memq '&rest arglist) 'list* 'list)
 		 '(quote callf) (list 'quote func) place
@@ -2334,7 +2328,7 @@
     (cons 'progn (nreverse (cons (list 'quote name) forms)))))
 
 (defun cl-struct-setf-expander (x name accessor pred-form pos)
-  (let* ((temp (gensym "--x--")) (store (gensym "--store--")))
+  (let* ((temp (make-symbol "--cl-x--")) (store (make-symbol "--cl-store--")))
     (list (list temp) (list x) (list store)
 	  (append '(progn)
 		  (and pred-form
@@ -2410,7 +2404,8 @@
 STRING is an optional description of the desired type."
   (and (or (not (cl-compiling-file))
 	   (< cl-optimize-speed 3) (= cl-optimize-safety 3))
-       (let* ((temp (if (cl-simple-expr-p form 3) form (gensym)))
+       (let* ((temp (if (cl-simple-expr-p form 3)
+			form (make-symbol "--cl-var--")))
 	      (body (list 'or (cl-make-type-test temp type)
 			  (list 'signal '(quote wrong-type-argument)
 				(list 'list (or string (list 'quote type))
@@ -2607,48 +2602,47 @@
       (let ((res (cl-make-type-test val (cl-const-expr-val type))))
 	(if (or (memq (cl-expr-contains res val) '(nil 1))
 		(cl-simple-expr-p val)) res
-	  (let ((temp (gensym)))
+	  (let ((temp (make-symbol "--cl-var--")))
 	    (list 'let (list (list temp val)) (subst temp val res)))))
     form))
 
 
-(mapcar (function
-	 (lambda (y)
-	   (put (car y) 'side-effect-free t)
-	   (put (car y) 'byte-compile 'cl-byte-compile-compiler-macro)
-	   (put (car y) 'cl-compiler-macro
-		(list 'lambda '(w x)
-		      (if (symbolp (cadr y))
-			  (list 'list (list 'quote (cadr y))
-				(list 'list (list 'quote (caddr y)) 'x))
-			(cons 'list (cdr y)))))))
-	'((first 'car x) (second 'cadr x) (third 'caddr x) (fourth 'cadddr x)
-	  (fifth 'nth 4 x) (sixth 'nth 5 x) (seventh 'nth 6 x)
-	  (eighth 'nth 7 x) (ninth 'nth 8 x) (tenth 'nth 9 x)
-	  (rest 'cdr x) (endp 'null x) (plusp '> x 0) (minusp '< x 0)
-	  (caaar car caar) (caadr car cadr) (cadar car cdar)
-	  (caddr car cddr) (cdaar cdr caar) (cdadr cdr cadr)
-	  (cddar cdr cdar) (cdddr cdr cddr) (caaaar car caaar)
-	  (caaadr car caadr) (caadar car cadar) (caaddr car caddr)
-	  (cadaar car cdaar) (cadadr car cdadr) (caddar car cddar)
-	  (cadddr car cdddr) (cdaaar cdr caaar) (cdaadr cdr caadr)
-	  (cdadar cdr cadar) (cdaddr cdr caddr) (cddaar cdr cdaar)
-	  (cddadr cdr cdadr) (cdddar cdr cddar) (cddddr cdr cdddr) ))
+(mapc (lambda (y)
+	(put (car y) 'side-effect-free t)
+	(put (car y) 'byte-compile 'cl-byte-compile-compiler-macro)
+	(put (car y) 'cl-compiler-macro
+	     `(lambda (w x)
+		,(if (symbolp (cadr y))
+		     `(list ',(cadr y)
+			    (list ',(caddr y) x))
+		   (cons 'list (cdr y))))))
+      '((first 'car x) (second 'cadr x) (third 'caddr x) (fourth 'cadddr x)
+	(fifth 'nth 4 x) (sixth 'nth 5 x) (seventh 'nth 6 x)
+	(eighth 'nth 7 x) (ninth 'nth 8 x) (tenth 'nth 9 x)
+	(rest 'cdr x) (endp 'null x) (plusp '> x 0) (minusp '< x 0)
+	(caaar car caar) (caadr car cadr) (cadar car cdar)
+	(caddr car cddr) (cdaar cdr caar) (cdadr cdr cadr)
+	(cddar cdr cdar) (cdddr cdr cddr) (caaaar car caaar)
+	(caaadr car caadr) (caadar car cadar) (caaddr car caddr)
+	(cadaar car cdaar) (cadadr car cdadr) (caddar car cddar)
+	(cadddr car cdddr) (cdaaar cdr caaar) (cdaadr cdr caadr)
+	(cdadar cdr cadar) (cdaddr cdr caddr) (cddaar cdr cdaar)
+	(cddadr cdr cdadr) (cdddar cdr cddar) (cddddr cdr cdddr) ))
 
 ;;; Things that are inline.
 (proclaim '(inline floatp-safe acons map concatenate notany notevery
 		   cl-set-elt revappend nreconc gethash))
 
 ;;; Things that are side-effect-free.
-(mapcar (function (lambda (x) (put x 'side-effect-free t)))
-	'(oddp evenp signum last butlast ldiff pairlis gcd lcm
-	  isqrt floor* ceiling* truncate* round* mod* rem* subseq
-	  list-length get* getf))
+(mapc (lambda (x) (put x 'side-effect-free t))
+      '(oddp evenp signum last butlast ldiff pairlis gcd lcm
+	isqrt floor* ceiling* truncate* round* mod* rem* subseq
+	list-length get* getf))
 
 ;;; Things that are side-effect-and-error-free.
-(mapcar (function (lambda (x) (put x 'side-effect-free 'error-free)))
-	'(eql floatp-safe list* subst acons equalp random-state-p
-	  copy-tree sublis))
+(mapc (lambda (x) (put x 'side-effect-free 'error-free))
+      '(eql floatp-safe list* subst acons equalp random-state-p
+	copy-tree sublis))
 
 
 (run-hooks 'cl-macs-load-hook)
@@ -2657,5 +2651,5 @@
 ;;; byte-compile-warnings: (redefine callargs free-vars unresolved obsolete noruntime)
 ;;; End:
 
-;;; arch-tag: afd947a6-b553-4df1-bba5-000be6388f46
+;; arch-tag: afd947a6-b553-4df1-bba5-000be6388f46
 ;;; cl-macs.el ends here
--- a/lisp/emacs-lisp/cust-print.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/emacs-lisp/cust-print.el	Mon Nov 22 11:06:39 2004 +0000
@@ -178,7 +178,7 @@
 ;; Custom printers
 ;;==========================================================
 
-(defconst custom-printers nil
+(defvar custom-printers nil
   ;; e.g. '((symbolp . pkg::print-symbol))
   "An alist for custom printing of any type.
 Pairs are of the form (PREDICATE . PRINTER).  If PREDICATE is true
--- a/lisp/emacs-lisp/find-func.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/emacs-lisp/find-func.el	Mon Nov 22 11:06:39 2004 +0000
@@ -62,13 +62,13 @@
   ;;  (define-derived-mode foo ...), (define-minor-mode foo)
   (concat
    "^\\s-*(\\(def\\(ine-skeleton\\|ine-generic-mode\\|ine-derived-mode\\|\
-\[^cgv\W]\\w+\\*?\\)\\|define-minor-mode\
+ine-minor-mode\\|un-cvs-mode\\|foo\\|[^cfgv]\\w+\\*?\\)\
 \\|easy-mmode-define-global-mode\\)" find-function-space-re
    "\\('\\|\(quote \\)?%s\\(\\s-\\|$\\|\(\\|\)\\)")
   "The regexp used by `find-function' to search for a function definition.
 Note it must contain a `%s' at the place where `format'
 should insert the function name.  The default value avoids `defconst',
-`defgroup', `defvar'.
+`defgroup', `defvar', `defface'.
 
 Please send improvements and fixes to the maintainer."
   :type 'regexp
@@ -202,7 +202,7 @@
 		    (re-search-forward
 		     (concat "^([^ ]+" find-function-space-re "['(]"
 			     (regexp-quote (symbol-name symbol))
-			     "\\>")
+			     "\\_>")
 		     nil t))
 		(progn
 		  (beginning-of-line)
--- a/lisp/emacs-lisp/lucid.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/emacs-lisp/lucid.el	Mon Nov 22 11:06:39 2004 +0000
@@ -31,36 +31,6 @@
 
 (defalias 'current-time-seconds 'current-time)
 
-;; In case cl-map-keymap is an alias for map-keymap, avoid circular calls.
-(fset 'cl-map-keymap (indirect-function 'cl-map-keymap))
-
-(defun map-keymap (function keymap &optional sort-first)
-  "Call FUNCTION for every binding in KEYMAP.
-This does not include bindings inherited from a parent keymap.
-FUNCTION receives two arguments each time it is called:
-the character (more generally, the event type) that is bound,
-and the binding it has.
-
-Note that passing the event type directly to `define-key' does not work
-in Emacs 19.  We do not emulate that particular feature of Lucid Emacs.
-If your code does that, modify it to make a vector containing the event
-type that you get.  That will work in both versions of Emacs."
-  (if sort-first
-      (let (list)
-	(cl-map-keymap (lambda (a b) (push (cons a b) list))
-		       keymap)
-	(setq list (sort list
-			 (lambda (a b)
-			   (setq a (car a) b (car b))
-			   (if (integerp a)
-			       (if (integerp b) (< a b)
-				 t)
-			     (if (integerp b) t
-			       (string< a b))))))
-	(dolist (p list)
-	  (funcall function (car p) (cdr p))))
-    (cl-map-keymap function keymap)))
-
 (defun read-number (prompt &optional integers-only)
   "Read a number from the minibuffer.
 Keep reentering the minibuffer until we get suitable input.
--- a/lisp/files.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/files.el	Mon Nov 22 11:06:39 2004 +0000
@@ -478,7 +478,7 @@
       (apply op args))))
 
 (defun convert-standard-filename (filename)
-  "Convert a standard file's name to something suitable for the current OS.
+  "Convert a standard file's name to something suitable for the OS.
 This means to guarantee valid names and perhaps to canonicalize
 certain patterns.
 
@@ -487,7 +487,9 @@
 characters.  On DOS, make sure to obey the 8.3 limitations.  On
 Windows, turn Cygwin names into native names, and also turn
 slashes into backslashes if the shell requires it (see
-`w32-shell-dos-semantics')."
+`w32-shell-dos-semantics').
+
+See Info node `(elisp)Standard File Names' for more details."
   filename)
 
 (defun read-directory-name (prompt &optional dir default-dirname mustmatch initial)
@@ -1763,12 +1765,12 @@
      ("\\.properties\\(?:\\.[a-zA-Z0-9._-]+\\)?\\'" . conf-javaprop-mode)
      ;; *.cf, *.cfg, *.conf, *.config[.local|.de_DE.UTF8|...], */config
      ("[/.]c\\(?:on\\)?f\\(?:i?g\\)?\\(?:\\.[a-zA-Z0-9._-]+\\)?\\'" . conf-mode)
-     ("\\`/etc/\\(?:DIR_COLORS\\|ethers\\|.?fstab\\|.*hosts\\|lesskey\\|login\\.?de\\(?:fs\\|vperm\\)\\|magic\\|mtab\\|permissions\\|protocols\\|rpc\\|services\\)\\'" . conf-space-mode)
-     ("\\`/etc/\\(?:aliases\\|hosts\\..+\\|ksysguarddrc\\|opera6rc\\)\\'" . conf-mode)
+     ("\\`/etc/\\(?:DIR_COLORS\\|ethers\\|.?fstab\\|.*hosts\\|lesskey\\|login\\.?de\\(?:fs\\|vperm\\)\\|magic\\|mtab\\|pam\\.d/.*\\|permissions\\|protocols\\|rpc\\|services\\)\\'" . conf-space-mode)
+     ("\\`/etc/\\(?:default/.*\\|aliases\\|group-?\\|hosts\\..+\\|ksysguarddrc\\|opera6rc\\|passwd-?\\|shadow-?\\)\\'" . conf-mode)
      ;; either user's dot-files or under /etc or some such
      ("/\\.?\\(?:gnokiirc\\|kde.*rc\\|mime\\.types\\|wgetrc\\)\\'" . conf-mode)
      ;; alas not all ~/.*rc files are like this
-     ("/\\.\\(?:enigma\\|gltron\\|hxplayer\\|net\\|neverball\\|qt/.+\\|realplayer\\|scummvm\\|sversion\\|sylpheed/.+\\|xmp\\)rc\\'" . conf-mode)
+     ("/\\.\\(?:enigma\\|gltron\\|gtk\\|hxplayer\\|net\\|neverball\\|qt/.+\\|realplayer\\|scummvm\\|sversion\\|sylpheed/.+\\|xmp\\)rc\\'" . conf-mode)
      ("/\\.\\(?:gdbtkinit\\|grip\\|orbital/.+txt\\|rhosts\\|tuxracer/options\\)\\'" . conf-mode)
      ("/\\.?X\\(?:default\\|resource\\|re\\)s\\>" . conf-xdefaults-mode)
      ("/X11.+app-defaults/" . conf-xdefaults-mode)
--- a/lisp/font-lock.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/font-lock.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1295,15 +1295,15 @@
     ;; Find each interesting place between here and `end'.
     (while
 	(progn
-	  (setq state (parse-partial-sexp (point) end nil nil state
-					  'syntax-table))
 	  (when (or (nth 3 state) (nth 4 state))
 	    (setq face (funcall font-lock-syntactic-face-function state))
 	    (setq beg (max (nth 8 state) start))
 	    (setq state (parse-partial-sexp (point) end nil nil state
 					    'syntax-table))
 	    (when face (put-text-property beg (point) 'face face)))
-	  (< (point) end)))))
+	  (< (point) end))
+      (setq state (parse-partial-sexp (point) end nil nil state
+				      'syntax-table)))))
 
 ;;; End of Syntactic fontification functions.
 
--- a/lisp/gnus/ChangeLog	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/gnus/ChangeLog	Mon Nov 22 11:06:39 2004 +0000
@@ -1,3 +1,14 @@
+2004-11-14  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* nnfolder.el (nnfolder-save-marks): Add missing format field in
+	call to `error'.
+	* nnml.el (nnml-save-marks): Ditto.
+
+2004-11-14  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* gnus-start.el (gnus-convert-old-newsrc): Assign
+	legacy-gnus-agent to 5.10.7.
+
 2004-11-10  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* gnus-art.el (gnus-emphasis-alist): Don't hide asterisks by
@@ -59,7 +70,7 @@
 
 	* starttls.el (starttls-gnutls-program, starttls-use-gnutls)
 	(starttls-extra-arguments, starttls-process-connection-type)
-	(starttls-connect, starttls-failure, starttls-success): 
+	(starttls-connect, starttls-failure, starttls-success):
 
 	* spam-stat.el (spam-stat): Add :version.
 
@@ -71,7 +82,7 @@
 	* nnmail.el (nnmail-split-fancy-with-parent-ignore-groups)
 	(nnmail-cache-ignore-groups, nnmail-spool-hook)
 	(nnmail-split-fancy-match-partial-words)
-	(nnmail-split-lowercase-expanded): 
+	(nnmail-split-lowercase-expanded):
 
 	* nndiary.el (nndiary): Add :version.
 
--- a/lisp/gnus/gnus-start.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/gnus/gnus-start.el	Mon Nov 22 11:06:39 2004 +0000
@@ -2246,13 +2246,13 @@
                       ;; doesn't change with each release) and the
                       ;; function that must be applied to convert the
                       ;; previous version into the current version.
-                      '(("September Gnus v0.1" nil 
+                      '(("September Gnus v0.1" nil
                          gnus-convert-old-ticks)
                         ("Oort Gnus v0.08"     "legacy-gnus-agent"
                          gnus-agent-convert-to-compressed-agentview)
-                        ("Gnus v5.11"          "legacy-gnus-agent"
+                        ("Gnus v5.10.7"        "legacy-gnus-agent"
                          gnus-agent-unlist-expire-days)
-                        ("Gnus v5.11"          "legacy-gnus-agent" 
+                        ("Gnus v5.10.7"        "legacy-gnus-agent"
                          gnus-agent-unhook-expire-days)))
               #'car-less-than-car)))
         ;; Skip converters older than the file version
@@ -2270,7 +2270,6 @@
               (when (and load-from
                          (not (fboundp func)))
                 (load load-from t))
-              
               (or prompt-displayed
                   (not (gnus-convert-converter-needs-prompt func))
                   (while (let (c
--- a/lisp/gnus/nnfolder.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/gnus/nnfolder.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1240,7 +1240,7 @@
 			nnfolder-marks-modtime))
       (error (or (gnus-yes-or-no-p
 		  (format "Could not write to %s (%s).  Continue? " file err))
-		 (error "Cannot write to %s (%s)" err))))))
+		 (error "Cannot write to %s (%s)" file err))))))
 
 (defun nnfolder-open-marks (group server)
   (let ((file (nnfolder-group-marks-pathname group)))
--- a/lisp/gnus/nnml.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/gnus/nnml.el	Mon Nov 22 11:06:39 2004 +0000
@@ -984,7 +984,7 @@
 			nnml-marks-modtime))
       (error (or (gnus-yes-or-no-p
 		  (format "Could not write to %s (%s).  Continue? " file err))
-		 (error "Cannot write to %s (%s)" err))))))
+		 (error "Cannot write to %s (%s)" file err))))))
 
 (defun nnml-open-marks (group server)
   (let ((file (expand-file-name
--- a/lisp/hexl.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/hexl.el	Mon Nov 22 11:06:39 2004 +0000
@@ -99,9 +99,15 @@
 
 (defvar hexl-mode-map nil)
 
+(defvar ruler-mode)
+(defvar ruler-mode-ruler-function)
+(defvar hl-line-mode)
+
+(defvar hexl-mode-old-hl-line-mode)
 (defvar hexl-mode-old-local-map)
 (defvar hexl-mode-old-mode-name)
 (defvar hexl-mode-old-major-mode)
+(defvar hexl-mode-old-ruler-mode)
 (defvar hexl-mode-old-isearch-search-fun-function)
 (defvar hexl-mode-old-require-final-newline)
 (defvar hexl-mode-old-syntax-table)
@@ -240,6 +246,14 @@
     (setq hexl-mode-old-major-mode major-mode)
     (setq major-mode 'hexl-mode)
 
+    (make-local-variable 'hexl-mode-old-ruler-mode)
+    (setq hexl-mode-old-ruler-mode
+	  (and (boundp 'ruler-mode) ruler-mode))
+
+    (make-local-variable 'hexl-mode-old-hl-line-mode)
+    (setq hexl-mode-old-hl-line-mode
+	  (and (boundp 'hl-line-mode) hl-line-mode))
+
     (make-local-variable 'hexl-mode-old-syntax-table)
     (setq hexl-mode-old-syntax-table (syntax-table))
     (set-syntax-table (standard-syntax-table))
@@ -353,6 +367,10 @@
   (remove-hook 'post-command-hook 'hexl-follow-ascii-find t)
   (setq hexl-ascii-overlay nil)
 
+  (if (and (boundp 'ruler-mode) ruler-mode (not hexl-mode-old-ruler-mode))
+      (ruler-mode 0))
+  (if (and (boundp 'hl-line-mode) hl-line-mode (not hexl-mode-old-hl-line-mode))
+      (hl-line-mode 0))
   (setq require-final-newline hexl-mode-old-require-final-newline)
   (setq mode-name hexl-mode-old-mode-name)
   (setq isearch-search-fun-function hexl-mode-old-isearch-search-fun-function)
--- a/lisp/imenu.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/imenu.el	Mon Nov 22 11:06:39 2004 +0000
@@ -808,14 +808,18 @@
 		  (index (nth 2 pat))
 		  (function (nth 3 pat))
 		  (rest (nthcdr 4 pat))
+		  start
 		  cs)
 	      ;; Go backwards for convenience of adding items in order.
 	      (goto-char (point-max))
 	      (while (re-search-backward regexp nil t)
+		(setq start (point))
 		(goto-char (match-end index))
 		(setq beg (match-beginning index))
-		(if (setq cs (save-match-data (comment-beginning)))
-		    (goto-char cs)	; skip this one, it's in a comment
+		(setq cs (and comment-start-skip
+			      (save-match-data (comment-beginning))))
+		(if cs
+		    (goto-char (min cs beg)) ; skip this one, it's in a comment
 		  (goto-char beg)
 		  (imenu-progress-message prev-pos nil t)
 		  ;; Add this sort of submenu only when we've found an
@@ -837,7 +841,11 @@
 		    ;; Insert the item unless it is already present.
 		    (unless (member item (cdr menu))
 		      (setcdr menu
-			      (cons item (cdr menu)))))))))
+			      (cons item (cdr menu)))))
+		  ;; Move to the start of the entire match,
+		  ;; to ensure we keep moving backwards
+		  ;; as long as the match is nonempty.
+		  (goto-char start)))))
 	  (set-syntax-table old-table)))
     (imenu-progress-message prev-pos 100 t)
     ;; Sort each submenu by position.
--- a/lisp/info.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/info.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1468,10 +1468,6 @@
 	  (opoint-max (point-max))
 	  (ostart (window-start))
 	  (osubfile Info-current-subfile))
-      (when Info-search-whitespace-regexp
-        (setq regexp
-              (mapconcat 'identity (split-string regexp "[ \t\n]+")
-                         Info-search-whitespace-regexp)))
       (setq Info-search-case-fold case-fold-search)
       (save-excursion
 	(save-restriction
@@ -1496,12 +1492,14 @@
 			    (save-excursion
 			      (and (search-backward "\^_" nil t)
 				   (looking-at "\^_\nTag Table"))))))
-	    (if (if backward
-                    (re-search-backward regexp bound t)
-                  (re-search-forward regexp bound t))
-		(setq found (point) beg-found (if backward (match-end 0)
-                                                (match-beginning 0)))
-	      (setq give-up t)))))
+	    (let ((search-spaces-regexp
+		   Info-search-whitespace-regexp))
+	      (if (if backward
+		      (re-search-backward regexp bound t)
+		    (re-search-forward regexp bound t))
+		  (setq found (point) beg-found (if backward (match-end 0)
+						  (match-beginning 0)))
+		(setq give-up t))))))
       ;; If no subfiles, give error now.
       (if give-up
 	  (if (null Info-current-subfile)
--- a/lisp/international/iso-cvt.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/international/iso-cvt.el	Mon Nov 22 11:06:39 2004 +0000
@@ -265,10 +265,16 @@
     ("\\\\`e" "è")
     ("\\\\'e" "é")
     ("\\\\^e" "ê")
-    ("\\\\\"\\\\i" "ï")
-    ("\\\\`\\\\i" "ì")
-    ("\\\\'\\\\i" "í")
-    ("\\\\^\\\\i" "î")
+    ;; Discard spaces and/or one EOF after macro \i.
+    ;; Converting it back will use braces.
+    ("\\\\\"\\\\i *\n\n" "ï\n\n")
+    ("\\\\\"\\\\i *\n?" "ï")
+    ("\\\\`\\\\i *\n\n" "ì\n\n")
+    ("\\\\`\\\\i *\n?" "ì")
+    ("\\\\'\\\\i *\n\n" "í\n\n")
+    ("\\\\'\\\\i *\n?" "í")
+    ("\\\\^\\\\i *\n\n" "î\n\n")
+    ("\\\\^\\\\i *\n?" "î")
     ("\\\\\"i" "ï")
     ("\\\\`i" "ì")
     ("\\\\'i" "í")
--- a/lisp/international/mule.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/international/mule.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1135,7 +1135,7 @@
   (setq coding-system-alist (cons (list (symbol-name symbol))
 				  coding-system-alist)))
 
-(defun set-buffer-file-coding-system (coding-system &optional force)
+(defun set-buffer-file-coding-system (coding-system &optional force nomodify)
   "Set the file coding-system of the current buffer to CODING-SYSTEM.
 This means that when you save the buffer, it will be converted
 according to CODING-SYSTEM.  For a list of possible values of CODING-SYSTEM,
@@ -1149,8 +1149,9 @@
 
 This marks the buffer modified so that the succeeding \\[save-buffer]
 surely saves the buffer with CODING-SYSTEM.  From a program, if you
-don't want to mark the buffer modified, just set the variable
-`buffer-file-coding-system' directly."
+don't want to mark the buffer modified, specify t for NOMODIFY.
+If you know exactly what coding system you want to use,
+just set the variable `buffer-file-coding-system' directly."
   (interactive "zCoding system for saving file (default, nil): \nP")
   (check-coding-system coding-system)
   (if (and coding-system buffer-file-coding-system (null force))
@@ -1161,7 +1162,8 @@
   ;; `set-buffer-major-mode-hook' take care of setting the table.
   (if (fboundp 'ucs-set-table-for-input) ; don't lose when building
       (ucs-set-table-for-input))
-  (set-buffer-modified-p t)
+  (unless nomodify
+    (set-buffer-modified-p t))
   (force-mode-line-update))
 
 (defun revert-buffer-with-coding-system (coding-system &optional force)
@@ -1736,7 +1738,11 @@
 	     (find-new-buffer-file-coding-system last-coding-system-used))
 	    (modified-p (buffer-modified-p)))
 	(when coding-system
-	  (set-buffer-file-coding-system coding-system t)
+	  ;; Tell set-buffer-file-coding-system not to mark the file
+	  ;; as modified; we just read it, and it's supposed to be unmodified.
+	  ;; Marking it modified would try to lock it, which would
+	  ;; check the modtime, and we don't want to do that again now.
+	  (set-buffer-file-coding-system coding-system t t)
 	  (if (and enable-multibyte-characters
 		   (or (eq coding-system 'no-conversion)
 		       (eq (coding-system-type coding-system) 5))
@@ -1746,7 +1752,9 @@
 		   (= (buffer-size) inserted))
 	      ;; For coding systems no-conversion and raw-text...,
 	      ;; edit the buffer as unibyte.
-	      (let ((pos-marker (copy-marker (+ (point) inserted))))
+	      (let ((pos-marker (copy-marker (+ (point) inserted)))
+		    ;; Prevent locking.
+		    (buffer-file-name nil))
 		(set-buffer-multibyte nil)
 		(setq inserted (- pos-marker (point)))))
 	  (set-buffer-modified-p modified-p))))
--- a/lisp/mouse.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/mouse.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1,6 +1,6 @@
 ;;; mouse.el --- window system-independent mouse support
 
-;; Copyright (C) 1993, 94, 95, 1999, 2000, 01, 2004
+;; Copyright (C) 1993, 94, 95, 1999, 2000, 2001, 2002, 2003, 2004
 ;;   Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
@@ -46,6 +46,7 @@
 (defcustom mouse-drag-copy-region t
   "*If non-nil, mouse drag copies region to kill-ring."
   :type 'boolean
+  :version "21.4"
   :group 'mouse)
 
 
@@ -363,6 +364,7 @@
 	 (start-nwindows (count-windows t))
 	 (old-selected-window (selected-window))
 	 (minibuffer (frame-parameter nil 'minibuffer))
+	 (mouse-autoselect-window nil)
 	 should-enlarge-minibuffer event mouse y top bot edges wconfig growth)
     (track-mouse
       (progn
@@ -741,6 +743,7 @@
 	 (start-frame (window-frame start-window))
 	 (start-hscroll (window-hscroll start-window))
 	 (bounds (window-edges start-window))
+	 (make-cursor-line-fully-visible nil)
 	 (top (nth 1 bounds))
 	 (bottom (if (window-minibuffer-p start-window)
 		     (nth 3 bounds)
--- a/lisp/play/life.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/play/life.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1,8 +1,9 @@
 ;;; life.el --- John Horton Conway's `Life' game for GNU Emacs
 
-;; Copyright (C) 1988, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001, 2004 Free Software Foundation, Inc.
 
 ;; Author: Kyle Jones <kyleuunet.uu.net>
+;; Maintainer: FSF
 ;; Keywords: games
 
 ;; This file is part of GNU Emacs.
@@ -30,7 +31,7 @@
 
 ;;; Code:
 
-(defconst life-patterns
+(defvar life-patterns
   [("@@@" " @@" "@@@")
    ("@@@ @@@" "@@  @@ " "@@@ @@@")
    ("@@@ @@@" "@@   @@" "@@@ @@@")
@@ -80,16 +81,16 @@
 
 ;; list of numbers that tell how many characters to move to get to
 ;; each of a cell's eight neighbors.
-(defconst life-neighbor-deltas nil)
+(defvar life-neighbor-deltas nil)
 
 ;; window display always starts here.  Easier to deal with than
 ;; (scroll-up) and (scroll-down) when trying to center the display.
-(defconst life-window-start nil)
+(defvar life-window-start nil)
 
 ;; For mode line
-(defconst life-current-generation nil)
+(defvar life-current-generation nil)
 ;; Sadly, mode-line-format won't display numbers.
-(defconst life-generation-string nil)
+(defvar life-generation-string nil)
 
 (defvar life-initialized nil
   "Non-nil if `life' has been run at least once.")
--- a/lisp/printing.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/printing.el	Mon Nov 22 11:06:39 2004 +0000
@@ -5,13 +5,13 @@
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
 ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
-;; Time-stamp: <2004/11/11 23:54:13 vinicius>
+;; Time-stamp: <2004/11/21 20:56:53 vinicius>
 ;; Keywords: wp, print, PostScript
-;; Version: 6.8.2
+;; Version: 6.8.3
 ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/
 
-(defconst pr-version "6.8.2"
-  "printing.el, v 6.8.2 <2004/11/11 vinicius>
+(defconst pr-version "6.8.3"
+  "printing.el, v 6.8.3 <2004/11/17 vinicius>
 
 Please send all bug fixes and enhancements to
 	Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -440,15 +440,19 @@
 ;;
 ;; Current global keyboard mapping for GNU Emacs is:
 ;;
-;;    (global-set-key [print]   'pr-ps-fast-fire)
-;;    (global-set-key [M-print] 'pr-ps-mode-using-ghostscript)
-;;    (global-set-key [C-print] 'pr-txt-fast-fire)
+;;    (global-set-key [print]     'pr-ps-fast-fire)
+;;    (global-set-key [M-print]   'pr-ps-mode-using-ghostscript)
+;;    (global-set-key [S-print]   'pr-ps-mode-using-ghostscript)
+;;    (global-set-key [C-print]   'pr-txt-fast-fire)
+;;    (global-set-key [C-M-print] 'pr-txt-fast-fire)
 ;;
 ;; And for XEmacs is:
 ;;
-;;    (global-set-key 'f22           'pr-ps-fast-fire)
-;;    (global-set-key '(meta f22)    'pr-ps-mode-using-ghostscript)
-;;    (global-set-key '(control f22) 'pr-txt-fast-fire)
+;;    (global-set-key 'f22                'pr-ps-fast-fire)
+;;    (global-set-key '(meta f22)         'pr-ps-mode-using-ghostscript)
+;;    (global-set-key '(shift f22)        'pr-ps-mode-using-ghostscript)
+;;    (global-set-key '(control f22)      'pr-txt-fast-fire)
+;;    (global-set-key '(control meta f22) 'pr-txt-fast-fire)
 ;;
 ;; As a suggestion of global keyboard mapping for some `printing' commands:
 ;;
@@ -484,7 +488,10 @@
 ;; `pr-temp-dir'		Specify a directory for temporary files during
 ;;				printing.
 ;;
-;; `pr-ps-temp-file'		Specify PostScript temporary file name.
+;; `pr-ps-temp-file'		Specify PostScript temporary file name prefix.
+;;
+;; `pr-file-modes'		Specify the file permission bits for newly
+;;				created files.
 ;;
 ;; `pr-gv-command'		Specify path and name of the gsview/gv
 ;;				utility.
@@ -943,6 +950,9 @@
 ;; Acknowledgments
 ;; ---------------
 ;;
+;; Thanks to Stefan Monnier <monnier@iro.umontreal.ca> for GNU Emacs and XEmacs
+;; printing menu (in `pr-menu-spec') merging suggestion.
+;;
 ;; Thanks to Lennart Borgman <lennart.borgman.073@student.lu.se> for gsprint
 ;; suggestion (see tip 5 in section Tips).
 ;;
@@ -993,69 +1003,112 @@
      (error "`printing' requires `ps-print' package version 6.6.4 or later"))
 
 
-(eval-and-compile
-  (defconst pr-cygwin-system
-    (and ps-windows-system (getenv "OSTYPE")
-	 (string-match "cygwin" (getenv "OSTYPE")))))
+(defconst pr-cygwin-system
+  (and ps-windows-system (getenv "OSTYPE")
+       (string-match "cygwin" (getenv "OSTYPE"))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; To avoid compilation gripes
 
 
-(eval-and-compile
-
-  (or (fboundp 'subst-char-in-string)
-      (defun subst-char-in-string (fromchar tochar string &optional inplace)
-	"Replace FROMCHAR with TOCHAR in STRING each time it occurs.
+(or (fboundp 'easy-menu-intern)		; hacked from easymenu.el
+    (defsubst easy-menu-intern (s)
+      (if (stringp s) (intern s) s)))
+
+
+
+(or (fboundp 'subst-char-in-string)	; hacked from subr.el
+    (defun subst-char-in-string (fromchar tochar string &optional inplace)
+      "Replace FROMCHAR with TOCHAR in STRING each time it occurs.
 Unless optional argument INPLACE is non-nil, return a new string."
-	(let ((i (length string))
-	      (newstr (if inplace string (copy-sequence string))))
-	  (while (> (setq i (1- i)) 0)
-	    (if (eq (aref newstr i) fromchar)
-		(aset newstr i tochar)))
-	  newstr)))
-
-  ;; GNU Emacs
-  (defalias 'pr-e-frame-char-height    'frame-char-height)
-  (defalias 'pr-e-frame-char-width     'frame-char-width)
-  (defalias 'pr-e-mouse-pixel-position 'mouse-pixel-position)
-  ;; XEmacs
-  (defalias 'pr-x-add-submenu             'add-submenu)
-  (defalias 'pr-x-event-function          'event-function)
-  (defalias 'pr-x-event-object            'event-object)
-  (defalias 'pr-x-find-menu-item          'find-menu-item)
-  (defalias 'pr-x-font-height             'font-height)
-  (defalias 'pr-x-font-width              'font-width)
-  (defalias 'pr-x-get-popup-menu-response 'get-popup-menu-response)
-  (defalias 'pr-x-make-event              'make-event)
-  (defalias 'pr-x-misc-user-event-p       'misc-user-event-p)
-  (defalias 'pr-x-relabel-menu-item       'relabel-menu-item)
-  (defalias 'pr-x-event-x-pixel           'event-x-pixel)
-  (defalias 'pr-x-event-y-pixel           'event-y-pixel)
-
-  (cond
-   ((eq ps-print-emacs-type 'emacs)	; GNU Emacs
-    (defvar deactivate-mark nil)
-    (defalias 'pr-f-set-keymap-parents 'set-keymap-parent)
-    (defalias 'pr-f-set-keymap-name    'ignore)
-    (defalias 'pr-f-read-string        'read-string)
-    (defun pr-keep-region-active ()
-      (setq deactivate-mark nil)))
-
-   ((eq ps-print-emacs-type 'xemacs)	; XEmacs
-    (defvar current-menubar     nil)
-    (defvar current-mouse-event nil)
-    (defvar zmacs-region-stays  nil)
-    (defalias 'pr-f-set-keymap-parents 'set-keymap-parents)
-    (defalias 'pr-f-set-keymap-name    'set-keymap-name)
-    (defun pr-f-read-string (prompt initial history default)
-      (let ((str (read-string prompt initial)))
-	(if (and str (not (string= str "")))
-	    str
-	  default)))
-    (defun pr-keep-region-active ()
-      (setq zmacs-region-stays t)))))
+      (let ((i (length string))
+	    (newstr (if inplace string (copy-sequence string))))
+	(while (> (setq i (1- i)) 0)
+	  (if (eq (aref newstr i) fromchar)
+	      (aset newstr i tochar)))
+	newstr)))
+
+
+(or (fboundp 'make-temp-file)		; hacked from subr.el
+    (defun make-temp-file (prefix &optional dir-flag suffix)
+      "Create a temporary file.
+The returned file name (created by appending some random characters at the end
+of PREFIX, and expanding against `temporary-file-directory' if necessary),
+is guaranteed to point to a newly created empty file.
+You can then use `write-region' to write new data into the file.
+
+If DIR-FLAG is non-nil, create a new empty directory instead of a file.
+
+If SUFFIX is non-nil, add that at the end of the file name."
+      (let ((umask (default-file-modes))
+	    file)
+	(unwind-protect
+	    (progn
+	      ;; Create temp files with strict access rights.  It's easy to
+	      ;; loosen them later, whereas it's impossible to close the
+	      ;; time-window of loose permissions otherwise.
+	      (set-default-file-modes ?\700)
+	      (while (condition-case ()
+			 (progn
+			   (setq file
+				 (make-temp-name
+				  (expand-file-name prefix temporary-file-directory)))
+			   (if suffix
+			       (setq file (concat file suffix)))
+			   (if dir-flag
+			       (make-directory file)
+			     (write-region "" nil file nil 'silent nil 'excl))
+			   nil)
+		       (file-already-exists t))
+		;; the file was somehow created by someone else between
+		;; `make-temp-name' and `write-region', let's try again.
+		nil)
+	      file)
+	  ;; Reset the umask.
+	  (set-default-file-modes umask)))))
+
+
+;; GNU Emacs
+(defalias 'pr-e-frame-char-height    'frame-char-height)
+(defalias 'pr-e-frame-char-width     'frame-char-width)
+(defalias 'pr-e-mouse-pixel-position 'mouse-pixel-position)
+;; XEmacs
+(defalias 'pr-x-add-submenu             'add-submenu)
+(defalias 'pr-x-event-function          'event-function)
+(defalias 'pr-x-event-object            'event-object)
+(defalias 'pr-x-find-menu-item          'find-menu-item)
+(defalias 'pr-x-font-height             'font-height)
+(defalias 'pr-x-font-width              'font-width)
+(defalias 'pr-x-get-popup-menu-response 'get-popup-menu-response)
+(defalias 'pr-x-make-event              'make-event)
+(defalias 'pr-x-misc-user-event-p       'misc-user-event-p)
+(defalias 'pr-x-relabel-menu-item       'relabel-menu-item)
+(defalias 'pr-x-event-x-pixel           'event-x-pixel)
+(defalias 'pr-x-event-y-pixel           'event-y-pixel)
+
+(cond
+ ((featurep 'xemacs)			; XEmacs
+  (defvar current-menubar     nil)
+  (defvar current-mouse-event nil)
+  (defvar zmacs-region-stays  nil)
+  (defalias 'pr-f-set-keymap-parents 'set-keymap-parents)
+  (defalias 'pr-f-set-keymap-name    'set-keymap-name)
+  (defun pr-f-read-string (prompt initial history default)
+    (let ((str (read-string prompt initial)))
+      (if (and str (not (string= str "")))
+	  str
+	default)))
+  (defun pr-keep-region-active ()
+    (setq zmacs-region-stays t)))
+
+ (t					; GNU Emacs
+  (defvar deactivate-mark nil)
+  (defalias 'pr-f-set-keymap-parents 'set-keymap-parent)
+  (defalias 'pr-f-set-keymap-name    'ignore)
+  (defalias 'pr-f-read-string        'read-string)
+  (defun pr-keep-region-active ()
+    (setq deactivate-mark nil))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1119,6 +1172,7 @@
   :type '(choice :tag "Path style"
 		 (const :tag "Windows 9x/NT Style (\\)" :value windows)
 		 (const :tag "Unix Style (/)" :value unix))
+  :version "20"
   :group 'printing)
 
 
@@ -1230,6 +1284,7 @@
 				:tag "Directory"
 				(string :value "")
 				(symbol :value symbol)))))
+  :version "20"
   :group 'printing)
 
 
@@ -1244,6 +1299,7 @@
 function (see it for documentation) to update text printer menu."
   :type 'symbol
   :set 'pr-txt-name-custom-set
+  :version "20"
   :group 'printing)
 
 
@@ -1356,6 +1412,7 @@
 			(const :tag "None" nil)
 			string)))
   :set 'pr-alist-custom-set
+  :version "20"
   :group 'printing)
 
 
@@ -1370,6 +1427,7 @@
 function (see it for documentation) to update PostScript printer menu."
   :type 'symbol
   :set 'pr-ps-name-custom-set
+  :version "20"
   :group 'printing)
 
 
@@ -1564,6 +1622,7 @@
 	     (sexp :tag "Value")))
 	   ))
   :set 'pr-alist-custom-set
+  :version "20"
   :group 'printing)
 
 
@@ -1578,14 +1637,34 @@
 		((memq system-type '(vax-vms axp-vms)) "SYS$SCRATCH:")
 		(t "/tmp")
 		)))))
-  "*Specify a directory for temporary files during printing."
+  "*Specify a directory for temporary files during printing.
+
+See also `pr-ps-temp-file' and `pr-file-modes'."
   :type '(directory :tag "Temporary Directory")
+  :version "20"
   :group 'printing)
 
 
-(defcustom pr-ps-temp-file "prspool.ps"
-  "*Specify PostScript temporary file name."
+(defcustom pr-ps-temp-file "prspool-"
+  "*Specify PostScript temporary file name prefix.
+
+See also `pr-temp-dir' and `pr-file-modes'."
   :type '(file :tag "PostScript Temporary File Name")
+  :version "21"
+  :group 'printing)
+
+
+;; It uses 0600 as default instead of (default-file-modes).
+;; So, by default, only the session owner have permission to deal with files
+;; generated by `printing'.
+(defcustom pr-file-modes ?\600
+  "*Specify the file permission bits for newly created files.
+
+It should be an integer; only the low 9 bits are used.
+
+See also `pr-temp-dir' and `pr-ps-temp-file'."
+  :type '(integer :tag "File Permission Bits")
+  :version "21.3"
   :group 'printing)
 
 
@@ -1597,6 +1676,7 @@
 
 See also `pr-path-alist'."
   :type '(string :tag "Ghostview Utility")
+  :version "20"
   :group 'printing)
 
 
@@ -1608,6 +1688,7 @@
 
 See also `pr-path-alist'."
   :type '(string :tag "Ghostscript Utility")
+  :version "20"
   :group 'printing)
 
 
@@ -1638,6 +1719,7 @@
      located in the same directory as gswin32.exe.
    - for brief documentation, type: gswin32.exe -h"
   :type '(repeat (string :tag "Ghostscript Switch"))
+  :version "20"
   :group 'printing)
 
 
@@ -1654,6 +1736,7 @@
 See `pr-gs-switches' for documentation.
 See also `pr-ps-printer-alist'."
   :type '(string :tag "Ghostscript Device")
+  :version "20"
   :group 'printing)
 
 
@@ -1667,6 +1750,7 @@
 See `pr-gs-switches' for documentation.
 See also `pr-ps-printer-alist'."
   :type '(integer :tag "Ghostscript Resolution")
+  :version "20"
   :group 'printing)
 
 
@@ -1679,30 +1763,35 @@
 In GNU or Unix system, if ghostscript is set as a PostScript filter, this
 variable should be nil."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
 (defcustom pr-faces-p nil
   "*Non-nil means print with face attributes."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
 (defcustom pr-spool-p nil
   "*Non-nil means spool printing in a buffer."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
 (defcustom pr-file-landscape nil
   "*Non-nil means print PostScript file in landscape orientation."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
 (defcustom pr-file-duplex nil
   "*Non-nil means print PostScript file in duplex mode."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
@@ -1714,6 +1803,7 @@
 If tumble is on, produces a printing suitable for binding at the top or
 bottom."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
@@ -1726,6 +1816,7 @@
 `*-region*' commands, that is, `*-buffer*' commands will print only the region
 marked instead of all buffer."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
@@ -1737,6 +1828,7 @@
 `*-buffer*' commands will print the current buffer and `*-region*' commands
 will print the current region."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
@@ -1937,6 +2029,7 @@
 	      (variable :tag "Other"))
 	     (sexp :tag "Value")))
 	   ))
+  :version "20"
   :group 'printing)
 
 
@@ -1954,6 +2047,7 @@
       `pr-ps-utility-alist'."
   :type '(symbol :tag "PS File Utility")
   :set 'pr-ps-utility-custom-set
+  :version "20"
   :group 'printing)
 
 
@@ -2138,6 +2232,7 @@
 		  (sexp :tag "Value")))
 		))
   :set 'pr-alist-custom-set
+  :version "20"
   :group 'printing)
 
 
@@ -2146,14 +2241,15 @@
 
 See also `pr-menu-char-height' and `pr-menu-char-width'."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
 (defcustom pr-menu-char-height
-  (cond ((eq ps-print-emacs-type 'emacs) ; GNU Emacs
-	 (pr-e-frame-char-height))
-	((eq ps-print-emacs-type 'xemacs) ; XEmacs
-	 (pr-x-font-height (face-font 'default))))
+  (cond ((featurep 'xemacs)		; XEmacs
+	 (pr-x-font-height (face-font 'default)))
+	(t				; GNU Emacs
+	 (pr-e-frame-char-height)))
   "*Specify menu char height in pixels.
 
 This variable is used to guess which vertical position should be locked the
@@ -2161,14 +2257,15 @@
 
 See also `pr-menu-lock' and `pr-menu-char-width'."
   :type 'integer
+  :version "20"
   :group 'printing)
 
 
 (defcustom pr-menu-char-width
-  (cond ((eq ps-print-emacs-type 'emacs) ; GNU Emacs
-	 (pr-e-frame-char-width))
-	((eq ps-print-emacs-type 'xemacs) ; XEmacs
-	 (pr-x-font-width (face-font 'default))))
+  (cond ((featurep 'xemacs)		; XEmacs
+	 (pr-x-font-width (face-font 'default)))
+	(t				; GNU Emacs
+	 (pr-e-frame-char-width)))
   "*Specify menu char width in pixels.
 
 This variable is used to guess which horizontal position should be locked the
@@ -2176,6 +2273,7 @@
 
 See also `pr-menu-lock' and `pr-menu-char-height'."
   :type 'integer
+  :version "20"
   :group 'printing)
 
 
@@ -2292,6 +2390,7 @@
 	      (variable :tag "Other"))
 	     (sexp :tag "Value")))
 	   ))
+  :version "20"
   :group 'printing)
 
 
@@ -2345,6 +2444,7 @@
 			 (const postscript-process)
 			 (const printing)
 			 (const help)))
+  :version "20"
   :group 'printing)
 
 
@@ -2356,6 +2456,7 @@
 
    Error: could not open \"c:\\temp\\prspool.ps\" for reading."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
@@ -2369,6 +2470,7 @@
 `pr-ps-directory-print', `pr-ps-directory-ps-print', `pr-printify-directory'
 and `pr-txt-directory'."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
@@ -2377,6 +2479,7 @@
 
 It's used by `pr-interface'."
   :type 'string
+  :version "20"
   :group 'printing)
 
 
@@ -2390,6 +2493,7 @@
 
 It's used by `pr-interface'."
   :type '(repeat (regexp :tag "Buffer Name Regexp"))
+  :version "20"
   :group 'printing)
 
 
@@ -2398,6 +2502,7 @@
 
 It's used by `pr-interface'."
   :type 'boolean
+  :version "20"
   :group 'printing)
 
 
@@ -2445,6 +2550,18 @@
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Macros
+
+
+(defmacro pr-save-file-modes (&rest body)
+  "Set temporally file modes to `pr-file-modes'."
+  `(let ((pr--default-file-modes (default-file-modes)))	; save default
+     (set-default-file-modes pr-file-modes)
+     ,@body
+     (set-default-file-modes pr--default-file-modes))) ; restore default
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Keys & Menus
 
 
@@ -2473,465 +2590,313 @@
   (and pr-print-using-ghostscript (not pr-spool-p)))
 
 
-(eval-and-compile
-  (defun pr-get-symbol (name)
-    (easy-menu-intern name))
-
-  (cond
-   ((eq ps-print-emacs-type 'emacs)	; GNU Emacs
-    (defun pr-region-active-p ()
-      (and pr-auto-region transient-mark-mode mark-active)))
-
-   ((eq ps-print-emacs-type 'xemacs)	; XEmacs
-    (defvar zmacs-region-stays nil)	; to avoid compilation gripes
-    (defun pr-region-active-p ()
-      (and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p)))))
-
-
-  (defconst pr-menu-spec
-    (cond
-     ((eq ps-print-emacs-type 'emacs)	; GNU Emacs
-      '(
-	["Printing Interface" pr-interface
-	 :help "Use buffer interface instead of menu interface"]
+(defun pr-get-symbol (name)
+  (easy-menu-intern name))
+
+(cond
+ ((featurep 'xemacs)			; XEmacs
+  (defvar zmacs-region-stays nil)	; to avoid compilation gripes
+  (defun pr-region-active-p ()
+    (and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p))))
+
+ (t					; GNU Emacs
+  (defun pr-region-active-p ()
+    (and pr-auto-region transient-mark-mode mark-active))))
+
+
+(defconst pr-menu-spec
+  ;; Menu mapping:
+  ;;   unfortunately XEmacs doesn't support :active for submenus,
+  ;;   only for items.
+  ;;   So, it uses :included instead of :active.
+  ;;   Also, XEmacs doesn't support :help tag.
+  (let ((pr-:active  (if (featurep 'xemacs)
+			 :included	; XEmacs
+		       :active))	; GNU Emacs
+	(pr-:help    (if (featurep 'xemacs)
+			 'ignore				; XEmacs
+		       #'(lambda (text) (list :help text)))))	; GNU Emacs
+    `(
+      ["Printing Interface" pr-interface
+       ,@(funcall
+	  pr-:help "Use buffer interface instead of menu interface")]
+      "--"
+      ("PostScript Preview" :included (pr-visible-p 'postscript)
+       ,@(funcall
+	  pr-:help "Preview PostScript instead of sending to printer")
+       ("Directory" ,pr-:active (not pr-spool-p)
+	["1-up"     (pr-ps-directory-preview 1   nil nil t) t]
+	["2-up"     (pr-ps-directory-preview 2   nil nil t) t]
+	["4-up"     (pr-ps-directory-preview 4   nil nil t) t]
+	["Other..." (pr-ps-directory-preview nil nil nil t)
+	 :keys "\\[pr-ps-buffer-preview]"])
+       ("Buffer" ,pr-:active (not pr-spool-p)
+	["1-up"     (pr-ps-buffer-preview 1   t) t]
+	["2-up"     (pr-ps-buffer-preview 2   t) t]
+	["4-up"     (pr-ps-buffer-preview 4   t) t]
+	["Other..." (pr-ps-buffer-preview nil t)
+	 :keys "\\[pr-ps-buffer-preview]"])
+       ("Region" ,pr-:active (and (not pr-spool-p) (ps-mark-active-p))
+	["1-up"     (pr-ps-region-preview 1   t) t]
+	["2-up"     (pr-ps-region-preview 2   t) t]
+	["4-up"     (pr-ps-region-preview 4   t) t]
+	["Other..." (pr-ps-region-preview nil t)
+	 :keys "\\[pr-ps-region-preview]"])
+       ("Mode" ,pr-:active (and (not pr-spool-p) (pr-mode-alist-p))
+	["1-up"     (pr-ps-mode-preview 1   t) t]
+	["2-up"     (pr-ps-mode-preview 2   t) t]
+	["4-up"     (pr-ps-mode-preview 4   t) t]
+	["Other..." (pr-ps-mode-preview nil t)
+	 :keys "\\[pr-ps-mode-preview]"])
+       ("File"
+	["No Preprocessing..." (call-interactively 'pr-ps-file-preview)
+	 :keys "\\[pr-ps-file-preview]"
+	 ,@(funcall
+	    pr-:help "Preview PostScript file")]
+	"--"
+	["PostScript Utility" pr-update-menus :active pr-ps-utility-alist
+	 ,@(funcall
+	    pr-:help "Select PostScript utility")]
 	"--"
-	("PostScript Preview" :visible (pr-visible-p 'postscript)
-	 :help "Preview PostScript instead of sending to printer"
-	 ("Directory" :active (not pr-spool-p)
-	  ["1-up"     (pr-ps-directory-preview 1   nil nil t) t]
-	  ["2-up"     (pr-ps-directory-preview 2   nil nil t) t]
-	  ["4-up"     (pr-ps-directory-preview 4   nil nil t) t]
-	  ["Other..." (pr-ps-directory-preview nil nil nil t)
-	   :keys "\\[pr-ps-buffer-preview]"])
-	 ("Buffer" :active (not pr-spool-p)
-	  ["1-up"     (pr-ps-buffer-preview 1   t) t]
-	  ["2-up"     (pr-ps-buffer-preview 2   t) t]
-	  ["4-up"     (pr-ps-buffer-preview 4   t) t]
-	  ["Other..." (pr-ps-buffer-preview nil t)
-	   :keys "\\[pr-ps-buffer-preview]"])
-	 ("Region" :active (and (not pr-spool-p) (ps-mark-active-p))
-	  ["1-up"     (pr-ps-region-preview 1   t) t]
-	  ["2-up"     (pr-ps-region-preview 2   t) t]
-	  ["4-up"     (pr-ps-region-preview 4   t) t]
-	  ["Other..." (pr-ps-region-preview nil t)
-	   :keys "\\[pr-ps-region-preview]"])
-	 ("Mode" :active (and (not pr-spool-p) (pr-mode-alist-p))
-	  ["1-up"     (pr-ps-mode-preview 1   t) t]
-	  ["2-up"     (pr-ps-mode-preview 2   t) t]
-	  ["4-up"     (pr-ps-mode-preview 4   t) t]
-	  ["Other..." (pr-ps-mode-preview nil t)
-	   :keys "\\[pr-ps-mode-preview]"])
-	 ("File"
-	  ["No Preprocessing..." (call-interactively 'pr-ps-file-preview)
-	   :keys "\\[pr-ps-file-preview]"
-	   :help "Preview PostScript file"]
-	  "--"
-	  ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist
-	   :help "Select PostScript utility"]
-	  "--"
-	  ["1-up..."   (pr-ps-file-up-preview 1   t t) pr-ps-utility-alist]
-	  ["2-up..."   (pr-ps-file-up-preview 2   t t) pr-ps-utility-alist]
-	  ["4-up..."   (pr-ps-file-up-preview 4   t t) pr-ps-utility-alist]
-	  ["Other..."  (pr-ps-file-up-preview nil t t)
-	   :keys "\\[pr-ps-file-up-preview]" :active pr-ps-utility-alist]
-	  "--"
-	  ["Landscape" pr-toggle-file-landscape
-	   :style toggle :selected pr-file-landscape
-	   :help "Toggle landscape for PostScript file"
-	   :active pr-ps-utility-alist]
-	  ["Duplex"    pr-toggle-file-duplex
-	   :style toggle :selected pr-file-duplex
-	   :help "Toggle duplex for PostScript file"
-	   :active pr-ps-utility-alist]
-	  ["Tumble"    pr-toggle-file-tumble
-	   :style toggle :selected pr-file-tumble
-	   :help "Toggle tumble for PostScript file"
-	   :active (and pr-file-duplex pr-ps-utility-alist)])
-	 ["Despool..." (call-interactively 'pr-despool-preview)
-	  :active pr-spool-p :keys "\\[pr-despool-preview]"
-	  :help "Despool PostScript buffer to printer or file (C-u)"])
-	("PostScript Print" :visible (pr-visible-p 'postscript)
-	 :help "Send PostScript to printer or file (C-u)"
-	 ("Directory"
-	  ["1-up"     (pr-ps-directory-ps-print 1   nil nil t) t]
-	  ["2-up"     (pr-ps-directory-ps-print 2   nil nil t) t]
-	  ["4-up"     (pr-ps-directory-ps-print 4   nil nil t) t]
-	  ["Other..." (pr-ps-directory-ps-print nil nil nil t)
-	   :keys "\\[pr-ps-buffer-ps-print]"])
-	 ("Buffer"
-	  ["1-up"     (pr-ps-buffer-ps-print 1   t) t]
-	  ["2-up"     (pr-ps-buffer-ps-print 2   t) t]
-	  ["4-up"     (pr-ps-buffer-ps-print 4   t) t]
-	  ["Other..." (pr-ps-buffer-ps-print nil t)
-	   :keys "\\[pr-ps-buffer-ps-print]"])
-	 ("Region" :active (ps-mark-active-p)
-	  ["1-up"     (pr-ps-region-ps-print 1   t) t]
-	  ["2-up"     (pr-ps-region-ps-print 2   t) t]
-	  ["4-up"     (pr-ps-region-ps-print 4   t) t]
-	  ["Other..." (pr-ps-region-ps-print nil t)
-	   :keys "\\[pr-ps-region-ps-print]"])
-	 ("Mode" :active (pr-mode-alist-p)
-	  ["1-up"     (pr-ps-mode-ps-print 1   t) t]
-	  ["2-up"     (pr-ps-mode-ps-print 2   t) t]
-	  ["4-up"     (pr-ps-mode-ps-print 4   t) t]
-	  ["Other..." (pr-ps-mode-ps-print nil t)
-	   :keys "\\[pr-ps-mode-ps-print]"])
-	 ("File"
-	  ["No Preprocessing..." (call-interactively 'pr-ps-file-ps-print)
-	   :keys "\\[pr-ps-file-ps-print]"
-	   :help "Send PostScript file to printer"]
-	  "--"
-	  ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist
-	   :help "Select PostScript utility"]
-	  "--"
-	  ["1-up..."   (pr-ps-file-up-ps-print 1   t t) pr-ps-utility-alist]
-	  ["2-up..."   (pr-ps-file-up-ps-print 2   t t) pr-ps-utility-alist]
-	  ["4-up..."   (pr-ps-file-up-ps-print 4   t t) pr-ps-utility-alist]
-	  ["Other..."  (pr-ps-file-up-ps-print nil t t)
-	   :keys "\\[pr-ps-file-up-ps-print]" :active pr-ps-utility-alist]
-	  "--"
-	  ["Landscape" pr-toggle-file-landscape
-	   :style toggle :selected pr-file-landscape
-	   :help "Toggle landscape for PostScript file"
-	   :active pr-ps-utility-alist]
-	  ["Duplex"    pr-toggle-file-duplex
-	   :style toggle :selected pr-file-duplex
-	   :help "Toggle duplex for PostScript file"
-	   :active pr-ps-utility-alist]
-	  ["Tumble"    pr-toggle-file-tumble
-	   :style toggle :selected pr-file-tumble
-	   :help "Toggle tumble for PostScript file"
-	   :active (and pr-file-duplex pr-ps-utility-alist)])
-	 ["Despool..." (call-interactively 'pr-despool-ps-print)
-	  :active pr-spool-p :keys "\\[pr-despool-ps-print]"
-	  :help "Despool PostScript buffer to printer or file (C-u)"])
-	["PostScript Printers" pr-update-menus
-	 :active pr-ps-printer-alist :included (pr-visible-p 'postscript)
-	 :help "Select PostScript printer"]
+	["1-up..."   (pr-ps-file-up-preview 1   t t) pr-ps-utility-alist]
+	["2-up..."   (pr-ps-file-up-preview 2   t t) pr-ps-utility-alist]
+	["4-up..."   (pr-ps-file-up-preview 4   t t) pr-ps-utility-alist]
+	["Other..."  (pr-ps-file-up-preview nil t t)
+	 :keys "\\[pr-ps-file-up-preview]" :active pr-ps-utility-alist]
 	"--"
-	("Printify" :visible (pr-visible-p 'text)
-	 :help "Replace non-printing chars with printable representations."
-	 ["Directory" pr-printify-directory t]
-	 ["Buffer"    pr-printify-buffer    t]
-	 ["Region"    pr-printify-region    (ps-mark-active-p)])
-	("Print" :visible (pr-visible-p 'text)
-	 :help "Send text to printer"
-	 ["Directory" pr-txt-directory t]
-	 ["Buffer"    pr-txt-buffer    t]
-	 ["Region"    pr-txt-region    (ps-mark-active-p)]
-	 ["Mode"      pr-txt-mode      (pr-mode-alist-p)])
-	["Text Printers" pr-update-menus
-	 :active pr-txt-printer-alist :included (pr-visible-p 'text)
-	 :help "Select text printer"]
+	["Landscape" pr-toggle-file-landscape-menu
+	 :style toggle :selected pr-file-landscape
+	 ,@(funcall
+	    pr-:help "Toggle landscape for PostScript file")
+	 :active pr-ps-utility-alist]
+	["Duplex"    pr-toggle-file-duplex-menu
+	 :style toggle :selected pr-file-duplex
+	 ,@(funcall
+	    pr-:help "Toggle duplex for PostScript file")
+	 :active pr-ps-utility-alist]
+	["Tumble"    pr-toggle-file-tumble-menu
+	 :style toggle :selected pr-file-tumble
+	 ,@(funcall
+	    pr-:help "Toggle tumble for PostScript file")
+	 :active (and pr-file-duplex pr-ps-utility-alist)])
+       ["Despool..." (call-interactively 'pr-despool-preview)
+	:active pr-spool-p :keys "\\[pr-despool-preview]"
+	,@(funcall
+	   pr-:help "Despool PostScript buffer to printer or file (C-u)")])
+      ("PostScript Print" :included (pr-visible-p 'postscript)
+       ,@(funcall
+	  pr-:help "Send PostScript to printer or file (C-u)")
+       ("Directory"
+	["1-up"     (pr-ps-directory-ps-print 1   nil nil t) t]
+	["2-up"     (pr-ps-directory-ps-print 2   nil nil t) t]
+	["4-up"     (pr-ps-directory-ps-print 4   nil nil t) t]
+	["Other..." (pr-ps-directory-ps-print nil nil nil t)
+	 :keys "\\[pr-ps-buffer-ps-print]"])
+       ("Buffer"
+	["1-up"     (pr-ps-buffer-ps-print 1   t) t]
+	["2-up"     (pr-ps-buffer-ps-print 2   t) t]
+	["4-up"     (pr-ps-buffer-ps-print 4   t) t]
+	["Other..." (pr-ps-buffer-ps-print nil t)
+	 :keys "\\[pr-ps-buffer-ps-print]"])
+       ("Region" ,pr-:active (ps-mark-active-p)
+	["1-up"     (pr-ps-region-ps-print 1   t) t]
+	["2-up"     (pr-ps-region-ps-print 2   t) t]
+	["4-up"     (pr-ps-region-ps-print 4   t) t]
+	["Other..." (pr-ps-region-ps-print nil t)
+	 :keys "\\[pr-ps-region-ps-print]"])
+       ("Mode" ,pr-:active (pr-mode-alist-p)
+	["1-up"     (pr-ps-mode-ps-print 1   t) t]
+	["2-up"     (pr-ps-mode-ps-print 2   t) t]
+	["4-up"     (pr-ps-mode-ps-print 4   t) t]
+	["Other..." (pr-ps-mode-ps-print nil t)
+	 :keys "\\[pr-ps-mode-ps-print]"])
+       ("File"
+	["No Preprocessing..." (call-interactively 'pr-ps-file-ps-print)
+	 :keys "\\[pr-ps-file-ps-print]"
+	 ,@(funcall
+	    pr-:help "Send PostScript file to printer")]
 	"--"
-	["Landscape"               pr-toggle-landscape
-	 :style toggle :selected ps-landscape-mode
-	 :included (pr-visible-p 'postscript-options)]
-	["Print Header"            pr-toggle-header
-	 :style toggle :selected ps-print-header
-	 :included (pr-visible-p 'postscript-options)]
-	["Print Header Frame"      pr-toggle-header-frame
-	 :style toggle :selected ps-print-header-frame :active ps-print-header
-	 :included (pr-visible-p 'postscript-options)]
-	["Line Number"             pr-toggle-line
-	 :style toggle :selected ps-line-number
-	 :included (pr-visible-p 'postscript-options)]
-	["Zebra Stripes"           pr-toggle-zebra
-	 :style toggle :selected ps-zebra-stripes
-	 :included (pr-visible-p 'postscript-options)]
-	["Duplex"                  pr-toggle-duplex
-	 :style toggle :selected ps-spool-duplex
-	 :included (pr-visible-p 'postscript-options)]
-	["Tumble"                  pr-toggle-tumble
-	 :style toggle :selected ps-spool-tumble :active ps-spool-duplex
-	 :included (pr-visible-p 'postscript-options)]
-	["Upside-Down"             pr-toggle-upside-down
-	 :style toggle :selected ps-print-upside-down
-	 :included (pr-visible-p 'postscript-options)]
-	("Print All Pages" :visible (pr-visible-p 'postscript-options)
-	 :help "Select odd/even pages/sheets to print"
-	 ["All Pages"   (pr-even-or-odd-pages nil)
-	  :style radio :selected (eq ps-even-or-odd-pages nil)]
-	 ["Even Pages"  (pr-even-or-odd-pages 'even-page)
-	  :style radio :selected (eq ps-even-or-odd-pages 'even-page)]
-	 ["Odd Pages"   (pr-even-or-odd-pages 'odd-page)
-	  :style radio :selected (eq ps-even-or-odd-pages 'odd-page)]
-	 ["Even Sheets" (pr-even-or-odd-pages 'even-sheet)
-	  :style radio :selected (eq ps-even-or-odd-pages 'even-sheet)]
-	 ["Odd Sheets"  (pr-even-or-odd-pages 'odd-sheet)
-	  :style radio :selected (eq ps-even-or-odd-pages 'odd-sheet)])
+	["PostScript Utility" pr-update-menus :active pr-ps-utility-alist
+	 ,@(funcall
+	    pr-:help "Select PostScript utility")]
 	"--"
-	["Spool Buffer"            pr-toggle-spool
-	 :style toggle :selected pr-spool-p
-	 :included (pr-visible-p 'postscript-process)
-	 :help "Toggle PostScript spooling"]
-	["Print with faces"        pr-toggle-faces
-	 :style toggle :selected pr-faces-p
-	 :included (pr-visible-p 'postscript-process)
-	 :help "Toggle PostScript printing with faces"]
-	["Print via Ghostscript" pr-toggle-ghostscript
-	 :style toggle :selected pr-print-using-ghostscript
-	 :included (pr-visible-p 'postscript-process)
-	 :help "Toggle PostScript generation using ghostscript"]
-	"--"
-	["Auto Region" pr-toggle-region
-	 :style toggle :selected pr-auto-region
-	 :included (pr-visible-p 'printing)]
-	["Auto Mode"   pr-toggle-mode
-	 :style toggle :selected pr-auto-mode
-	 :included (pr-visible-p 'printing)]
-	["Menu Lock"   pr-toggle-lock
-	 :style toggle :selected pr-menu-lock
-	 :included (pr-visible-p 'printing)]
+	["1-up..."   (pr-ps-file-up-ps-print 1   t t) pr-ps-utility-alist]
+	["2-up..."   (pr-ps-file-up-ps-print 2   t t) pr-ps-utility-alist]
+	["4-up..."   (pr-ps-file-up-ps-print 4   t t) pr-ps-utility-alist]
+	["Other..."  (pr-ps-file-up-ps-print nil t t)
+	 :keys "\\[pr-ps-file-up-ps-print]" :active pr-ps-utility-alist]
 	"--"
-	("Customize" :visible (pr-visible-p 'help)
-	 ["printing" pr-customize       t]
-	 ["ps-print" ps-print-customize t]
-	 ["lpr"      lpr-customize      t])
-	("Show Settings" :visible (pr-visible-p 'help)
-	 ["printing" pr-show-pr-setup  t]
-	 ["ps-print" pr-show-ps-setup  t]
-	 ["lpr"      pr-show-lpr-setup t])
-	["Help" pr-help :active t :included (pr-visible-p 'help)]
-	))
-
-
-     ((eq ps-print-emacs-type 'xemacs)	; XEmacs
-      ;; Menu mapping:
-      ;;   unfortunately XEmacs doesn't support :active or :visible
-      ;;   for submenus, only for items.
-      ;;   It uses :included instead of :active or :visible.
-      ;;   Also, XEmacs doesn't support :help tag.
-      '(
-	["Printing Interface" pr-interface]
-	"--"
-	("PostScript Preview" :included (pr-visible-p 'postscript)
-	 ("Directory" :included (not pr-spool-p)
-	  ["1-up"     (pr-ps-directory-preview 1   nil nil t) t]
-	  ["2-up"     (pr-ps-directory-preview 2   nil nil t) t]
-	  ["4-up"     (pr-ps-directory-preview 4   nil nil t) t]
-	  ["Other..." (pr-ps-directory-preview nil nil nil t)
-	   :keys "\\[pr-ps-buffer-preview]"])
-	 ("Buffer" :included (not pr-spool-p)
-	  ["1-up"     (pr-ps-buffer-preview 1   t) t]
-	  ["2-up"     (pr-ps-buffer-preview 2   t) t]
-	  ["4-up"     (pr-ps-buffer-preview 4   t) t]
-	  ["Other..." (pr-ps-buffer-preview nil t)
-	   :keys "\\[pr-ps-buffer-preview]"])
-	 ("Region" :included (and (not pr-spool-p) (ps-mark-active-p))
-	  ["1-up"     (pr-ps-region-preview 1   t) t]
-	  ["2-up"     (pr-ps-region-preview 2   t) t]
-	  ["4-up"     (pr-ps-region-preview 4   t) t]
-	  ["Other..." (pr-ps-region-preview nil t)
-	   :keys "\\[pr-ps-region-preview]"])
-	 ("Mode" :included (and (not pr-spool-p) (pr-mode-alist-p))
-	  ["1-up"     (pr-ps-mode-preview 1   t) t]
-	  ["2-up"     (pr-ps-mode-preview 2   t) t]
-	  ["4-up"     (pr-ps-mode-preview 4   t) t]
-	  ["Other..." (pr-ps-mode-preview nil t)
-	   :keys "\\[pr-ps-mode-preview]"])
-	 ("File"
-	  ["No Preprocessing..." (call-interactively 'pr-ps-file-preview)
-	   :keys "\\[pr-ps-file-preview]"]
-	  "--"
-	  ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist]
-	  "--"
-	  ["1-up..."   (pr-ps-file-up-preview 1   t t) pr-ps-utility-alist]
-	  ["2-up..."   (pr-ps-file-up-preview 2   t t) pr-ps-utility-alist]
-	  ["4-up..."   (pr-ps-file-up-preview 4   t t) pr-ps-utility-alist]
-	  ["Other..."  (pr-ps-file-up-preview nil t t)
-	   :keys "\\[pr-ps-file-up-preview]" :active pr-ps-utility-alist]
-	  "--"
-	  ["Landscape" pr-toggle-file-landscape
-	   :style toggle :selected pr-file-landscape
-	   :active pr-ps-utility-alist]
-	  ["Duplex"    pr-toggle-file-duplex
-	   :style toggle :selected pr-file-duplex
-	   :active pr-ps-utility-alist]
-	  ["Tumble"    pr-toggle-file-tumble
-	   :style toggle :selected pr-file-tumble
-	   :active (and pr-file-duplex pr-ps-utility-alist)])
-	 ["Despool..." (call-interactively 'pr-despool-preview)
-	  :active pr-spool-p :keys "\\[pr-despool-preview]"])
-	("PostScript Print" :included (pr-visible-p 'postscript)
-	 ("Directory"
-	  ["1-up"     (pr-ps-directory-ps-print 1   nil nil t) t]
-	  ["2-up"     (pr-ps-directory-ps-print 2   nil nil t) t]
-	  ["4-up"     (pr-ps-directory-ps-print 4   nil nil t) t]
-	  ["Other..." (pr-ps-directory-ps-print nil nil nil t)
-	   :keys "\\[pr-ps-buffer-ps-print]"])
-	 ("Buffer"
-	  ["1-up"     (pr-ps-buffer-ps-print 1   t) t]
-	  ["2-up"     (pr-ps-buffer-ps-print 2   t) t]
-	  ["4-up"     (pr-ps-buffer-ps-print 4   t) t]
-	  ["Other..." (pr-ps-buffer-ps-print nil t)
-	   :keys "\\[pr-ps-buffer-ps-print]"])
-	 ("Region" :included (ps-mark-active-p)
-	  ["1-up"     (pr-ps-region-ps-print 1   t) t]
-	  ["2-up"     (pr-ps-region-ps-print 2   t) t]
-	  ["4-up"     (pr-ps-region-ps-print 4   t) t]
-	  ["Other..." (pr-ps-region-ps-print nil t)
-	   :keys "\\[pr-ps-region-ps-print]"])
-	 ("Mode" :included (pr-mode-alist-p)
-	  ["1-up"     (pr-ps-mode-ps-print 1   t) t]
-	  ["2-up"     (pr-ps-mode-ps-print 2   t) t]
-	  ["4-up"     (pr-ps-mode-ps-print 4   t) t]
-	  ["Other..." (pr-ps-mode-ps-print nil t)
-	   :keys "\\[pr-ps-mode-ps-print]"])
-	 ("File"
-	  ["No Preprocessing..." (call-interactively 'pr-ps-file-ps-print)
-	   :keys "\\[pr-ps-file-ps-print]"]
-	  "--"
-	  ["PostScript Utility" pr-update-menus :active pr-ps-utility-alist]
-	  "--"
-	  ["1-up..."   (pr-ps-file-up-ps-print 1   t t) pr-ps-utility-alist]
-	  ["2-up..."   (pr-ps-file-up-ps-print 2   t t) pr-ps-utility-alist]
-	  ["4-up..."   (pr-ps-file-up-ps-print 4   t t) pr-ps-utility-alist]
-	  ["Other..."  (pr-ps-file-up-ps-print nil t t)
-	   :keys "\\[pr-ps-file-up-ps-print]" :active pr-ps-utility-alist]
-	  "--"
-	  ["Landscape" pr-toggle-file-landscape
-	   :style toggle :selected pr-file-landscape
-	   :active pr-ps-utility-alist]
-	  ["Duplex"    pr-toggle-file-duplex
-	   :style toggle :selected pr-file-duplex
-	   :active pr-ps-utility-alist]
-	  ["Tumble"    pr-toggle-file-tumble
-	   :style toggle :selected pr-file-tumble
-	   :active (and pr-file-duplex pr-ps-utility-alist)])
-	 ["Despool..." (call-interactively 'pr-despool-ps-print)
-	  :active pr-spool-p :keys "\\[pr-despool-ps-print]"])
-	["PostScript Printers" pr-update-menus
-	 :active pr-ps-printer-alist :included (pr-visible-p 'postscript)]
-	"--"
-	("Printify" :included (pr-visible-p 'text)
-	 ["Directory" pr-printify-directory t]
-	 ["Buffer"    pr-printify-buffer    t]
-	 ["Region"    pr-printify-region    (ps-mark-active-p)])
-	("Print" :included (pr-visible-p 'text)
-	 ["Directory" pr-txt-directory t]
-	 ["Buffer"    pr-txt-buffer    t]
-	 ["Region"    pr-txt-region    (ps-mark-active-p)]
-	 ["Mode"      pr-txt-mode      (pr-mode-alist-p)])
-	["Text Printers" pr-update-menus
-	 :active pr-txt-printer-alist :included (pr-visible-p 'text)]
-	"--"
-	["Landscape"               pr-toggle-landscape
-	 :style toggle :selected ps-landscape-mode
-	 :included (pr-visible-p 'postscript-options)]
-	["Print Header"            pr-toggle-header
-	 :style toggle :selected ps-print-header
-	 :included (pr-visible-p 'postscript-options)]
-	["Print Header Frame"      pr-toggle-header-frame
-	 :style toggle :selected ps-print-header-frame :active ps-print-header
-	 :included (pr-visible-p 'postscript-options)]
-	["Line Number"             pr-toggle-line
-	 :style toggle :selected ps-line-number
-	 :included (pr-visible-p 'postscript-options)]
-	["Zebra Stripes"           pr-toggle-zebra
-	 :style toggle :selected ps-zebra-stripes
-	 :included (pr-visible-p 'postscript-options)]
-	["Duplex"                  pr-toggle-duplex
-	 :style toggle :selected ps-spool-duplex
-	 :included (pr-visible-p 'postscript-options)]
-	["Tumble"                  pr-toggle-tumble
-	 :style toggle :selected ps-spool-tumble :active ps-spool-duplex
-	 :included (pr-visible-p 'postscript-options)]
-	["Upside-Down"             pr-toggle-upside-down
-	 :style toggle :selected ps-print-upside-down
-	 :included (pr-visible-p 'postscript-options)]
-	("Print All Pages" :included (pr-visible-p 'postscript-options)
-	 ["All Pages"   (pr-even-or-odd-pages nil)
-	  :style radio :selected (eq ps-even-or-odd-pages nil)]
-	 ["Even Pages"  (pr-even-or-odd-pages 'even-page)
-	  :style radio :selected (eq ps-even-or-odd-pages 'even-page)]
-	 ["Odd Pages"   (pr-even-or-odd-pages 'odd-page)
-	  :style radio :selected (eq ps-even-or-odd-pages 'odd-page)]
-	 ["Even Sheets" (pr-even-or-odd-pages 'even-sheet)
-	  :style radio :selected (eq ps-even-or-odd-pages 'even-sheet)]
-	 ["Odd Sheets"  (pr-even-or-odd-pages 'odd-sheet)
-	  :style radio :selected (eq ps-even-or-odd-pages 'odd-sheet)])
-	"--"
-	["Spool Buffer"            pr-toggle-spool
-	 :style toggle :selected pr-spool-p
-	 :included (pr-visible-p 'postscript-process)]
-	["Print with faces"        pr-toggle-faces
-	 :style toggle :selected pr-faces-p
-	 :included (pr-visible-p 'postscript-process)]
-	["Print via Ghostscript" pr-toggle-ghostscript
-	 :style toggle :selected pr-print-using-ghostscript
-	 :included (pr-visible-p 'postscript-process)]
-	"--"
-	["Auto Region" pr-toggle-region
-	 :style toggle :selected pr-auto-region
-	 :included (pr-visible-p 'printing)]
-	["Auto Mode"   pr-toggle-mode
-	 :style toggle :selected pr-auto-mode
-	 :included (pr-visible-p 'printing)]
-	["Menu Lock"   pr-toggle-lock
-	 :style toggle :selected pr-menu-lock
-	 :included (pr-visible-p 'printing)]
-	"--"
-	("Customize" :included (pr-visible-p 'help)
-	 ["printing" pr-customize       t]
-	 ["ps-print" ps-print-customize t]
-	 ["lpr"      lpr-customize      t])
-	("Show Settings" :included (pr-visible-p 'help)
-	 ["printing" pr-show-pr-setup  t]
-	 ["ps-print" pr-show-ps-setup  t]
-	 ["lpr"      pr-show-lpr-setup t])
-	["Help" pr-help :active t :included (pr-visible-p 'help)]
-	))
-     ))
-
-
+	["Landscape" pr-toggle-file-landscape-menu
+	 :style toggle :selected pr-file-landscape
+	 ,@(funcall
+	    pr-:help "Toggle landscape for PostScript file")
+	 :active pr-ps-utility-alist]
+	["Duplex"    pr-toggle-file-duplex-menu
+	 :style toggle :selected pr-file-duplex
+	 ,@(funcall
+	    pr-:help "Toggle duplex for PostScript file")
+	 :active pr-ps-utility-alist]
+	["Tumble"    pr-toggle-file-tumble-menu
+	 :style toggle :selected pr-file-tumble
+	 ,@(funcall
+	    pr-:help "Toggle tumble for PostScript file")
+	 :active (and pr-file-duplex pr-ps-utility-alist)])
+       ["Despool..." (call-interactively 'pr-despool-ps-print)
+	:active pr-spool-p :keys "\\[pr-despool-ps-print]"
+	,@(funcall
+	   pr-:help "Despool PostScript buffer to printer or file (C-u)")])
+      ["PostScript Printers" pr-update-menus
+       :active pr-ps-printer-alist :included (pr-visible-p 'postscript)
+       ,@(funcall
+	  pr-:help "Select PostScript printer")]
+      "--"
+      ("Printify" :included (pr-visible-p 'text)
+       ,@(funcall
+	  pr-:help
+	  "Replace non-printing chars with printable representations.")
+       ["Directory" pr-printify-directory t]
+       ["Buffer"    pr-printify-buffer    t]
+       ["Region"    pr-printify-region    (ps-mark-active-p)])
+      ("Print" :included (pr-visible-p 'text)
+       ,@(funcall
+	  pr-:help "Send text to printer")
+       ["Directory" pr-txt-directory t]
+       ["Buffer"    pr-txt-buffer    t]
+       ["Region"    pr-txt-region    (ps-mark-active-p)]
+       ["Mode"      pr-txt-mode      (pr-mode-alist-p)])
+      ["Text Printers" pr-update-menus
+       :active pr-txt-printer-alist :included (pr-visible-p 'text)
+       ,@(funcall
+	  pr-:help "Select text printer")]
+      "--"
+      ["Landscape"               pr-toggle-landscape-menu
+       :style toggle :selected ps-landscape-mode
+       :included (pr-visible-p 'postscript-options)]
+      ["Print Header"            pr-toggle-header-menu
+       :style toggle :selected ps-print-header
+       :included (pr-visible-p 'postscript-options)]
+      ["Print Header Frame"      pr-toggle-header-frame-menu
+       :style toggle :selected ps-print-header-frame :active ps-print-header
+       :included (pr-visible-p 'postscript-options)]
+      ["Line Number"             pr-toggle-line-menu
+       :style toggle :selected ps-line-number
+       :included (pr-visible-p 'postscript-options)]
+      ["Zebra Stripes"           pr-toggle-zebra-menu
+       :style toggle :selected ps-zebra-stripes
+       :included (pr-visible-p 'postscript-options)]
+      ["Duplex"                  pr-toggle-duplex-menu
+       :style toggle :selected ps-spool-duplex
+       :included (pr-visible-p 'postscript-options)]
+      ["Tumble"                  pr-toggle-tumble-menu
+       :style toggle :selected ps-spool-tumble :active ps-spool-duplex
+       :included (pr-visible-p 'postscript-options)]
+      ["Upside-Down"             pr-toggle-upside-down-menu
+       :style toggle :selected ps-print-upside-down
+       :included (pr-visible-p 'postscript-options)]
+      ("Print All Pages" :included (pr-visible-p 'postscript-options)
+       ,@(funcall
+	  pr-:help "Select odd/even pages/sheets to print")
+       ["All Pages"   (pr-even-or-odd-pages nil)
+	:style radio :selected (eq ps-even-or-odd-pages nil)]
+       ["Even Pages"  (pr-even-or-odd-pages 'even-page)
+	:style radio :selected (eq ps-even-or-odd-pages 'even-page)]
+       ["Odd Pages"   (pr-even-or-odd-pages 'odd-page)
+	:style radio :selected (eq ps-even-or-odd-pages 'odd-page)]
+       ["Even Sheets" (pr-even-or-odd-pages 'even-sheet)
+	:style radio :selected (eq ps-even-or-odd-pages 'even-sheet)]
+       ["Odd Sheets"  (pr-even-or-odd-pages 'odd-sheet)
+	:style radio :selected (eq ps-even-or-odd-pages 'odd-sheet)])
+      "--"
+      ["Spool Buffer"            pr-toggle-spool-menu
+       :style toggle :selected pr-spool-p
+       :included (pr-visible-p 'postscript-process)
+       ,@(funcall
+	  pr-:help "Toggle PostScript spooling")]
+      ["Print with faces"        pr-toggle-faces-menu
+       :style toggle :selected pr-faces-p
+       :included (pr-visible-p 'postscript-process)
+       ,@(funcall
+	  pr-:help "Toggle PostScript printing with faces")]
+      ["Print via Ghostscript" pr-toggle-ghostscript-menu
+       :style toggle :selected pr-print-using-ghostscript
+       :included (pr-visible-p 'postscript-process)
+       ,@(funcall
+	  pr-:help "Toggle PostScript generation using ghostscript")]
+      "--"
+      ["Auto Region" pr-toggle-region-menu
+       :style toggle :selected pr-auto-region
+       :included (pr-visible-p 'printing)]
+      ["Auto Mode"   pr-toggle-mode-menu
+       :style toggle :selected pr-auto-mode
+       :included (pr-visible-p 'printing)]
+      ["Menu Lock"   pr-toggle-lock-menu
+       :style toggle :selected pr-menu-lock
+       :included (pr-visible-p 'printing)]
+      "--"
+      ("Customize" :included (pr-visible-p 'help)
+       ["printing" pr-customize       t]
+       ["ps-print" ps-print-customize t]
+       ["lpr"      lpr-customize      t])
+      ("Show Settings" :included (pr-visible-p 'help)
+       ["printing" pr-show-pr-setup  t]
+       ["ps-print" pr-show-ps-setup  t]
+       ["lpr"      pr-show-lpr-setup t])
+      ["Help" pr-help :active t :included (pr-visible-p 'help)]
+      )))
+
+
+(cond
+ ((featurep 'xemacs)			; XEmacs
+  ;; Menu binding
+  (pr-xemacs-global-menubar
+   (pr-x-add-submenu nil (cons "Printing" pr-menu-spec) "Apps")))
+
+
+ (t					; GNU Emacs
+  ;; Menu binding
+  (require 'easymenu)
+  ;; Replace existing "print" item by "Printing" item.
+  ;; If you're changing this file, you'll load it a second,
+  ;; third... time, but "print" item exists only in the first load.
+  (defvar pr-menu-print-item "print")
   (cond
-   ((eq ps-print-emacs-type 'emacs)	; GNU Emacs
-    ;; Menu binding
-    (require 'easymenu)
-    ;; Replace existing "print" item by "Printing" item.
-    ;; If you're changing this file, you'll load it a second,
-    ;; third... time, but "print" item exists only in the first load.
-    (defvar pr-menu-print-item "print")
-    (cond
-     ;; Emacs 20
-     ((string< emacs-version "21.")
-      (easy-menu-change '("tools") "Printing" pr-menu-spec pr-menu-print-item)
-      (when pr-menu-print-item
-	(easy-menu-remove-item nil '("tools") pr-menu-print-item)
-	(setq pr-menu-print-item nil
-	      pr-menu-bar (vector 'menu-bar 'tools
-				  (pr-get-symbol "Printing")))))
-     ;; Emacs 21
-     (pr-menu-print-item
-      (easy-menu-change '("file") "Print" pr-menu-spec "print-buffer")
-      (let ((items '("print-buffer"          "print-region"
-		     "ps-print-buffer-faces" "ps-print-region-faces"
-		     "ps-print-buffer"       "ps-print-region")))
-	(while items
-	  (easy-menu-remove-item nil '("file") (car items))
-	  (setq items (cdr items)))
-	(setq pr-menu-print-item nil
-	      pr-menu-bar (vector 'menu-bar 'file
-				  (pr-get-symbol "Print")))))
-     (t
-      (easy-menu-change '("file") "Print" pr-menu-spec)))
-
-    ;; Key binding
-    (global-set-key [print]   'pr-ps-fast-fire)
-    (global-set-key [M-print] 'pr-ps-mode-using-ghostscript)
-    (global-set-key [C-print] 'pr-txt-fast-fire))
-
-
-   ((eq ps-print-emacs-type 'xemacs)	; XEmacs
-    ;; Menu binding
-    (pr-xemacs-global-menubar
-     (pr-x-add-submenu nil (cons "Printing" pr-menu-spec) "Apps"))
-
-    ;; Key binding
-    (global-set-key 'f22           'pr-ps-fast-fire)
-    (global-set-key '(meta f22)    'pr-ps-mode-using-ghostscript)
-    (global-set-key '(control f22) 'pr-txt-fast-fire))))
+   ;; Emacs 20
+   ((string< emacs-version "21.")
+    (easy-menu-change '("tools") "Printing" pr-menu-spec pr-menu-print-item)
+    (when pr-menu-print-item
+      (easy-menu-remove-item nil '("tools") pr-menu-print-item)
+      (setq pr-menu-print-item nil
+	    pr-menu-bar (vector 'menu-bar 'tools
+				(pr-get-symbol "Printing")))))
+   ;; Emacs 21
+   (pr-menu-print-item
+    (easy-menu-change '("file") "Print" pr-menu-spec "print-buffer")
+    (let ((items '("print-buffer"          "print-region"
+		   "ps-print-buffer-faces" "ps-print-region-faces"
+		   "ps-print-buffer"       "ps-print-region")))
+      (while items
+	(easy-menu-remove-item nil '("file") (car items))
+	(setq items (cdr items)))
+      (setq pr-menu-print-item nil
+	    pr-menu-bar (vector 'menu-bar 'file
+				(pr-get-symbol "Print")))))
+   (t
+    (easy-menu-change '("file") "Print" pr-menu-spec)))))
+
+
+;; Key binding
+(let ((pr-print-key (if (featurep 'xemacs)
+			'f22		; XEmacs
+		      'print)))		; GNU Emacs
+  (global-set-key `[,pr-print-key]                'pr-ps-fast-fire)
+  ;; Well, M-print and S-print are used because in my keyboard S-print works
+  ;; and M-print doesn't.  But M-print can work in other keyboard.
+  (global-set-key `[(meta ,pr-print-key)]         'pr-ps-mode-using-ghostscript)
+  (global-set-key `[(shift ,pr-print-key)]        'pr-ps-mode-using-ghostscript)
+  ;; Well, C-print and C-M-print are used because in my keyboard C-M-print works
+  ;; and C-print doesn't.  But C-print can work in other keyboard.
+  (global-set-key `[(control ,pr-print-key)]      'pr-txt-fast-fire)
+  (global-set-key `[(control meta ,pr-print-key)] 'pr-txt-fast-fire))
 
 
 ;;; You can also use something like:
@@ -3837,11 +3802,12 @@
 send the image to the printer.  If FILENAME is a string, save the PostScript
 image in a file with that name."
   (interactive (list (ps-print-preprint current-prefix-arg)))
-  (let ((ps-lpr-command         (pr-command pr-ps-command))
-	(ps-lpr-switches        pr-ps-switches)
-	(ps-printer-name-option pr-ps-printer-switch)
-	(ps-printer-name        pr-ps-printer))
-    (ps-despool filename)))
+  (pr-save-file-modes
+   (let ((ps-lpr-command         (pr-command pr-ps-command))
+	 (ps-lpr-switches        pr-ps-switches)
+	 (ps-printer-name-option pr-ps-printer-switch)
+	 (ps-printer-name        pr-ps-printer))
+     (ps-despool filename))))
 
 
 ;;;###autoload
@@ -3908,15 +3874,17 @@
        ;; printing
        (let ((file (pr-expand-file-name filename)))
 	 (if (string= pr-ps-command "")
+	     ;; default action
 	     (let ((ps-spool-buffer (get-buffer-create ps-spool-buffer-name)))
 	       (save-excursion
 		 (set-buffer ps-spool-buffer)
 		 (erase-buffer)
 		 (insert-file-contents-literally file))
 	       (pr-despool-print))
+	   ;; use `pr-ps-command' to print
 	   (apply 'pr-call-process
 		  pr-ps-command
-		  (pr-switches-string pr-ps-switches "pr-gs-switches")
+		  (pr-switches-string pr-ps-switches "pr-ps-switches")
 		  (if (string-match "cp" pr-ps-command)
 		      ;; for "cp" (cmd in out)
 		      (list file
@@ -3972,8 +3940,7 @@
 (defun pr-toggle-file-duplex ()
   "Toggle duplex for PostScript file."
   (interactive)
-  (pr-toggle 'pr-file-duplex "PS file duplex" nil 7 5 nil
-	     '("PostScript Print" "File")))
+  (pr-toggle-file-duplex-menu t))
 
 
 ;;;###autoload
@@ -3985,48 +3952,42 @@
 If tumble is on, produces a printing suitable for binding at the top or
 bottom."
   (interactive)
-  (pr-toggle 'pr-file-tumble "PS file tumble" nil 8 5 nil
-	     '("PostScript Print" "File")))
+  (pr-toggle-file-tumble-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-file-landscape ()
   "Toggle landscape for PostScript file."
   (interactive)
-  (pr-toggle 'pr-file-landscape "PS file landscape" nil 6 5 nil
-	     '("PostScript Print" "File")))
+  (pr-toggle-file-landscape-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-ghostscript ()
   "Toggle printing using ghostscript."
   (interactive)
-  (pr-toggle 'pr-print-using-ghostscript "Printing using ghostscript"
-	     'postscript-process 2 12 'toggle))
+  (pr-toggle-ghostscript-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-faces ()
   "Toggle printing with faces."
   (interactive)
-  (pr-toggle 'pr-faces-p "Printing with faces"
-	     'postscript-process 1 12 'toggle))
+  (pr-toggle-faces-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-spool ()
   "Toggle spooling."
   (interactive)
-  (pr-toggle 'pr-spool-p "Spooling printing"
-	     'postscript-process 0 12 'toggle))
+  (pr-toggle-spool-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-duplex ()
   "Toggle duplex."
   (interactive)
-  (pr-toggle 'ps-spool-duplex "Printing duplex"
-	     'postcsript-options 5 12 'toggle))
+  (pr-toggle-duplex-menu t))
 
 
 ;;;###autoload
@@ -4038,80 +3999,70 @@
 If tumble is on, produces a printing suitable for binding at the top or
 bottom."
   (interactive)
-  (pr-toggle 'ps-spool-tumble "Tumble"
-	     'postscript-options 6 12 'toggle))
+  (pr-toggle-tumble-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-landscape ()
   "Toggle landscape."
   (interactive)
-  (pr-toggle 'ps-landscape-mode "Landscape"
-	     'postscript-options 0 12 'toggle))
+  (pr-toggle-landscape-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-upside-down ()
   "Toggle upside-down."
   (interactive)
-  (pr-toggle 'ps-print-upside-down "Upside-Down"
-	     'postscript-options 7 12 'toggle))
+  (pr-toggle-upside-down-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-line ()
   "Toggle line number."
   (interactive)
-  (pr-toggle 'ps-line-number "Line number"
-	     'postscript-options 3 12 'toggle))
+  (pr-toggle-line-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-zebra ()
   "Toggle zebra stripes."
   (interactive)
-  (pr-toggle 'ps-zebra-stripes "Zebra stripe"
-	     'postscript-options 4 12 'toggle))
+  (pr-toggle-zebra-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-header ()
   "Toggle printing header."
   (interactive)
-  (pr-toggle 'ps-print-header "Print header"
-	     'postscript-options 1 12 'toggle))
+  (pr-toggle-header-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-header-frame ()
   "Toggle printing header frame."
   (interactive)
-  (pr-toggle 'ps-print-header-frame "Print header frame"
-	     'postscript-options 2 12 'toggle))
+  (pr-toggle-header-frame-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-lock ()
   "Toggle menu lock."
   (interactive)
-  (pr-toggle 'pr-menu-lock "Menu lock"
-	     'printing 2 12 'toggle))
+  (pr-toggle-lock-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-region ()
   "Toggle auto region."
   (interactive)
-  (pr-toggle 'pr-auto-region "Auto region"
-	     'printing 0 12 'toggle))
+  (pr-toggle-region-menu t))
 
 
 ;;;###autoload
 (defun pr-toggle-mode ()
   "Toggle auto mode."
   (interactive)
-  (pr-toggle 'pr-auto-mode "Auto mode"
-	     'printing 1 12 'toggle))
+  (pr-toggle-mode-menu t))
 
 
 ;;;###autoload
@@ -4140,7 +4091,8 @@
   "Interactively select a PostScript printer."
   (interactive)
   (pr-menu-set-ps-title
-   (pr-complete-alist "PostScript printer" pr-ps-printer-alist pr-ps-name)))
+   (pr-complete-alist "PostScript printer"
+		      pr-ps-printer-alist pr-ps-name)))
 
 
 ;;;###autoload
@@ -4148,7 +4100,8 @@
   "Interactively select a text printer."
   (interactive)
   (pr-menu-set-txt-title
-   (pr-complete-alist "Text printer" pr-txt-printer-alist pr-txt-name)))
+   (pr-complete-alist "Text printer"
+		      pr-txt-printer-alist pr-txt-name)))
 
 
 ;;;###autoload
@@ -4156,7 +4109,8 @@
   "Interactively select a PostScript utility."
   (interactive)
   (pr-menu-set-utility-title
-   (pr-complete-alist "Postscript utility" pr-ps-utility-alist pr-ps-utility)))
+   (pr-complete-alist "Postscript utility"
+		      pr-ps-utility-alist pr-ps-utility)))
 
 
 ;;;###autoload
@@ -4326,6 +4280,7 @@
      (list
       (concat "\n;;; printing.el version " pr-version "\n")
       ";; internal vars"
+      (ps-comment-string "emacs-version       " emacs-version)
       (ps-comment-string "pr-txt-command      " pr-txt-command)
       (ps-comment-string "pr-txt-switches     "
 			 (pr-switches-string pr-txt-switches "pr-txt-switches"))
@@ -4350,6 +4305,7 @@
       nil
       '(20 . pr-temp-dir)
       '(20 . pr-ps-temp-file)
+      '(20 . pr-file-modes)
       '(20 . pr-delete-temp-file)
       '(20 . pr-list-directory)
       nil
@@ -4400,16 +4356,19 @@
   (let (ps-prefix-quote)
     (mapconcat
      #'ps-print-quote
-     '("\n;;; lpr.el settings\n"
-       (25 . printer-name)
-       (25 . lpr-switches)
-       (25 . lpr-add-switches)
-       (25 . lpr-command)
-       (25 . lpr-headers-switches)
-       (25 . print-region-function)
-       (25 . lpr-page-header-program)
-       (25 . lpr-page-header-switches)
-       ")\n\n;;; lpr.el - end of settings\n")
+     (list
+      "\n;;; lpr.el settings\n"
+      (ps-comment-string "emacs-version" emacs-version)
+      nil
+      '(25 . printer-name)
+      '(25 . lpr-switches)
+      '(25 . lpr-add-switches)
+      '(25 . lpr-command)
+      '(25 . lpr-headers-switches)
+      '(25 . print-region-function)
+      '(25 . lpr-page-header-program)
+      '(25 . lpr-page-header-switches)
+      ")\n\n;;; lpr.el - end of settings\n")
      "\n")))
 
 
@@ -4652,90 +4611,88 @@
 (defvar pr-menu-state nil)
 
 
-(eval-and-compile
-  (cond
-   ((eq ps-print-emacs-type 'xemacs)
-    ;; XEmacs
-    (defvar current-mouse-event nil)	; to avoid compilation gripes
-    (defun pr-menu-position (entry index horizontal)
-      (pr-x-make-event
-       'button-release
-       (list 'button 1
-	     'x (- (pr-x-event-x-pixel current-mouse-event) ; X
-		   (* horizontal pr-menu-char-width))
-	     'y (- (pr-x-event-y-pixel current-mouse-event) ; Y
-		   (* (pr-menu-index entry index) pr-menu-char-height)))))
-    )
-   (ps-windows-system
-    ;; GNU Emacs for Windows 9x/NT
-    (defun pr-menu-position (entry index horizontal)
-      (let ((pos (cdr (pr-e-mouse-pixel-position))))
-	(list
-	 (list (or (car pos) 0)		; X
-	       (- (or (cdr pos) 0)	; Y
-		  (* (pr-menu-index entry index) pr-menu-char-height)))
-	 (selected-frame))))		; frame
-    )
-   (t
-    ;; GNU Emacs
-    (defun pr-menu-position (entry index horizontal)
-      (let ((pos (cdr (pr-e-mouse-pixel-position))))
-	(list
-	 (list (- (or (car pos) 0)	; X
-		  (* horizontal pr-menu-char-width))
-	       (- (or (cdr pos) 0)	; Y
-		  (* (pr-menu-index entry index) pr-menu-char-height)))
-	 (selected-frame))))		; frame
-    ))
-
-  (cond
-   ((eq ps-print-emacs-type 'emacs)
-    ;; GNU Emacs
-    (defun pr-menu-lookup (path)
-      (let ((ipath pr-menu-bar))
-	(lookup-key global-map
-		    (if path
-			(vconcat ipath
-				 (mapcar 'pr-get-symbol
-					 (if (listp path)
-					     path
-					   (list path))))
-		      ipath))))
-
-    ;; GNU Emacs
-    (defun pr-menu-lock (entry index horizontal state path)
-      (when (and (not (interactive-p)) pr-menu-lock)
-	(or (and pr-menu-position (eq state pr-menu-state))
-	    (setq pr-menu-position (pr-menu-position entry index horizontal)
-		  pr-menu-state    state))
-	(let* ((menu   (pr-menu-lookup path))
-	       (result (x-popup-menu pr-menu-position menu)))
-	  (and result
-	       (let ((command (lookup-key menu (vconcat result))))
-		 (if (fboundp command)
-		     (funcall command)
-		   (eval command)))))
-	(setq pr-menu-position nil))))
-
-
-   ((eq ps-print-emacs-type 'xemacs)
-    ;; XEmacs
-    (defvar current-menubar nil)	; to avoid compilation gripes
-    (defun pr-menu-lookup (path)
-      (car (pr-x-find-menu-item current-menubar (cons "Printing" path))))
-
-    ;; XEmacs
-    (defun pr-menu-lock (entry index horizontal state path)
-      (when (and (not (interactive-p)) pr-menu-lock)
-	(or (and pr-menu-position (eq state pr-menu-state))
-	    (setq pr-menu-position (pr-menu-position entry index horizontal)
-		  pr-menu-state    state))
-	(let* ((menu   (pr-menu-lookup path))
-	       (result (pr-x-get-popup-menu-response menu pr-menu-position)))
-	  (and (pr-x-misc-user-event-p result)
-	       (funcall (pr-x-event-function result)
-			(pr-x-event-object result))))
-	(setq pr-menu-position nil))))))
+(cond
+ ((featurep 'xemacs)
+  ;; XEmacs
+  (defvar current-mouse-event nil)	; to avoid compilation gripes
+  (defun pr-menu-position (entry index horizontal)
+    (pr-x-make-event
+     'button-release
+     (list 'button 1
+	   'x (- (pr-x-event-x-pixel current-mouse-event) ; X
+		 (* horizontal pr-menu-char-width))
+	   'y (- (pr-x-event-y-pixel current-mouse-event) ; Y
+		 (* (pr-menu-index entry index) pr-menu-char-height)))))
+  )
+ (ps-windows-system
+  ;; GNU Emacs for Windows 9x/NT
+  (defun pr-menu-position (entry index horizontal)
+    (let ((pos (cdr (pr-e-mouse-pixel-position))))
+      (list
+       (list (or (car pos) 0)		; X
+	     (- (or (cdr pos) 0)	; Y
+		(* (pr-menu-index entry index) pr-menu-char-height)))
+       (selected-frame))))		; frame
+  )
+ (t
+  ;; GNU Emacs
+  (defun pr-menu-position (entry index horizontal)
+    (let ((pos (cdr (pr-e-mouse-pixel-position))))
+      (list
+       (list (- (or (car pos) 0)	; X
+		(* horizontal pr-menu-char-width))
+	     (- (or (cdr pos) 0)	; Y
+		(* (pr-menu-index entry index) pr-menu-char-height)))
+       (selected-frame))))		; frame
+  ))
+
+(cond
+ ((featurep 'xemacs)
+  ;; XEmacs
+  (defvar current-menubar nil)		; to avoid compilation gripes
+  (defun pr-menu-lookup (path)
+    (car (pr-x-find-menu-item current-menubar (cons "Printing" path))))
+
+  ;; XEmacs
+  (defun pr-menu-lock (entry index horizontal state path)
+    (when pr-menu-lock
+      (or (and pr-menu-position (eq state pr-menu-state))
+	  (setq pr-menu-position (pr-menu-position entry index horizontal)
+		pr-menu-state    state))
+      (let* ((menu   (pr-menu-lookup path))
+	     (result (pr-x-get-popup-menu-response menu pr-menu-position)))
+	(and (pr-x-misc-user-event-p result)
+	     (funcall (pr-x-event-function result)
+		      (pr-x-event-object result))))
+      (setq pr-menu-position nil))))
+
+
+ (t
+  ;; GNU Emacs
+  (defun pr-menu-lookup (path)
+    (lookup-key global-map
+		(if path
+		    (vconcat pr-menu-bar
+			     (mapcar 'pr-get-symbol
+				     (if (listp path)
+					 path
+				       (list path))))
+		  pr-menu-bar)))
+
+  ;; GNU Emacs
+  (defun pr-menu-lock (entry index horizontal state path)
+    (when pr-menu-lock
+      (or (and pr-menu-position (eq state pr-menu-state))
+	  (setq pr-menu-position (pr-menu-position entry index horizontal)
+		pr-menu-state    state))
+      (let* ((menu   (pr-menu-lookup path))
+	     (result (x-popup-menu pr-menu-position menu)))
+	(and result
+	     (let ((command (lookup-key menu (vconcat result))))
+	       (if (fboundp command)
+		   (funcall command)
+		 (eval command)))))
+      (setq pr-menu-position nil)))))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -4792,252 +4749,235 @@
 	 alist)))
 
 
-(eval-and-compile
-  (cond
-   ((eq ps-print-emacs-type 'emacs)
-    ;; GNU Emacs
-    (defalias 'pr-update-mode-line 'force-mode-line-update)
-
-    ;; GNU Emacs
-    (defun pr-do-update-menus (&optional force)
-      (pr-menu-alist pr-ps-printer-alist
-		     'pr-ps-name
-		     'pr-menu-set-ps-title
-		     "PostScript Printers"
-		     'pr-ps-printer-menu-modified
-		     force
-		     "PostScript Printers"
-		     'postscript 2)
-      (pr-menu-alist pr-txt-printer-alist
-		     'pr-txt-name
-		     'pr-menu-set-txt-title
-		     "Text Printers"
-		     'pr-txt-printer-menu-modified
-		     force
-		     "Text Printers"
-		     'text 2)
-      (let ((save-var pr-ps-utility-menu-modified))
-	(pr-menu-alist pr-ps-utility-alist
-		       'pr-ps-utility
-		       'pr-menu-set-utility-title
-		       '("PostScript Print"   "File" "PostScript Utility")
-		       'save-var
-		       force
-		       "PostScript Utility"
-		       nil 1))
+(cond
+ ((featurep 'xemacs)
+  ;; XEmacs
+  (defalias 'pr-update-mode-line 'set-menubar-dirty-flag)
+
+  ;; XEmacs
+  (defvar pr-ps-name-old     "PostScript Printers")
+  (defvar pr-txt-name-old    "Text Printers")
+  (defvar pr-ps-utility-old  "PostScript Utility")
+  (defvar pr-even-or-odd-old "Print All Pages")
+
+  ;; XEmacs
+  (defun pr-do-update-menus (&optional force)
+    (pr-menu-alist pr-ps-printer-alist
+		   'pr-ps-name
+		   'pr-menu-set-ps-title
+		   '("Printing")
+		   'pr-ps-printer-menu-modified
+		   force
+		   pr-ps-name-old
+		   'postscript 2)
+    (pr-menu-alist pr-txt-printer-alist
+		   'pr-txt-name
+		   'pr-menu-set-txt-title
+		   '("Printing")
+		   'pr-txt-printer-menu-modified
+		   force
+		   pr-txt-name-old
+		   'text 2)
+    (let ((save-var pr-ps-utility-menu-modified))
       (pr-menu-alist pr-ps-utility-alist
 		     'pr-ps-utility
 		     'pr-menu-set-utility-title
-		     '("PostScript Preview" "File" "PostScript Utility")
-		     'pr-ps-utility-menu-modified
+		     '("Printing" "PostScript Print"   "File")
+		     'save-var
 		     force
-		     "PostScript Utility"
-		     nil 1)
-      (pr-even-or-odd-pages ps-even-or-odd-pages force))
-
-    ;; GNU Emacs
-    (defvar pr-temp-menu nil)
-
-    ;; GNU Emacs
-    (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
-				entry index)
-      (when (and alist (or force (symbol-value modified-sym)))
-	(easy-menu-define pr-temp-menu nil ""
-	  (pr-menu-create name alist var-sym fun entry index))
-	(let ((item (pr-menu-get-item menu-path)))
-	  (and item
-	       (let* ((binding     (nthcdr 3 item))
-		      (key-binding (cdr binding)))
-		 (setcar binding pr-temp-menu)
-		 (and key-binding (listp (car key-binding))
-		      (setcdr binding (cdr key-binding))) ; skip KEY-BINDING
-		 (funcall fun (symbol-value var-sym) item))))
-	(set modified-sym nil)))
-
-    ;; GNU Emacs
-    (defun pr-menu-set-ps-title (value &optional item entry index)
-      (pr-menu-set-item-name (or item
-				 (pr-menu-get-item "PostScript Printers"))
-			     (format "PostScript Printer: %s" value))
-      (pr-ps-set-printer value)
-      (and index
-	   (pr-menu-lock entry index 12 'toggle nil)))
-
-    ;; GNU Emacs
-    (defun pr-menu-set-txt-title (value &optional item entry index)
-      (pr-menu-set-item-name (or item
-				 (pr-menu-get-item "Text Printers"))
-			     (format "Text Printer: %s" value))
-      (pr-txt-set-printer value)
-      (and index
-	   (pr-menu-lock entry index 12 'toggle nil)))
-
-    ;; GNU Emacs
-    (defun pr-menu-set-utility-title (value &optional item entry index)
-      (let ((name (symbol-name value)))
-	(if item
-	    (pr-menu-set-item-name item name)
-	  (pr-menu-set-item-name
-	   (pr-menu-get-item
-	    '("PostScript Print"   "File" "PostScript Utility"))
-	   name)
-	  (pr-menu-set-item-name
-	   (pr-menu-get-item
-	    '("PostScript Preview" "File" "PostScript Utility"))
-	   name)))
-      (pr-ps-set-utility value)
-      (and index
-	   (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
-
-    ;; GNU Emacs
-    (defun pr-even-or-odd-pages (value &optional no-lock)
-      (pr-menu-set-item-name (pr-menu-get-item "Print All Pages")
-			     (cdr (assq value pr-even-or-odd-alist)))
-      (setq ps-even-or-odd-pages value)
-      (or no-lock
-	  (pr-menu-lock 'postscript-options 8 12 'toggle nil))))
-
-
-   ((eq ps-print-emacs-type 'xemacs)
-    ;; XEmacs
-    (defalias 'pr-update-mode-line 'set-menubar-dirty-flag)
-
-    ;; XEmacs
-    (defvar pr-ps-name-old     "PostScript Printers")
-    (defvar pr-txt-name-old    "Text Printers")
-    (defvar pr-ps-utility-old  "PostScript Utility")
-    (defvar pr-even-or-odd-old "Print All Pages")
-
-    ;; XEmacs
-    (defun pr-do-update-menus (&optional force)
-      (pr-menu-alist pr-ps-printer-alist
-		     'pr-ps-name
-		     'pr-menu-set-ps-title
-		     '("Printing")
-		     'pr-ps-printer-menu-modified
-		     force
-		     pr-ps-name-old
-		     'postscript 2)
-      (pr-menu-alist pr-txt-printer-alist
-		     'pr-txt-name
-		     'pr-menu-set-txt-title
-		     '("Printing")
-		     'pr-txt-printer-menu-modified
-		     force
-		     pr-txt-name-old
-		     'text 2)
-      (let ((save-var pr-ps-utility-menu-modified))
-	(pr-menu-alist pr-ps-utility-alist
-		       'pr-ps-utility
-		       'pr-menu-set-utility-title
-		       '("Printing" "PostScript Print"   "File")
-		       'save-var
-		       force
-		       pr-ps-utility-old
-		       nil 1))
+		     pr-ps-utility-old
+		     nil 1))
+    (pr-menu-alist pr-ps-utility-alist
+		   'pr-ps-utility
+		   'pr-menu-set-utility-title
+		   '("Printing" "PostScript Preview" "File")
+		   'pr-ps-utility-menu-modified
+		   force
+		   pr-ps-utility-old
+		   nil 1)
+    (pr-even-or-odd-pages ps-even-or-odd-pages force))
+
+  ;; XEmacs
+  (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
+			      entry index)
+    (when (and alist (or force (symbol-value modified-sym)))
+      (pr-xemacs-global-menubar
+       (pr-x-add-submenu menu-path
+			 (pr-menu-create name alist var-sym
+					 fun entry index)))
+      (funcall fun (symbol-value var-sym))
+      (set modified-sym nil)))
+
+  ;; XEmacs
+  (defun pr-relabel-menu-item (newname var-sym)
+    (pr-xemacs-global-menubar
+     (pr-x-relabel-menu-item
+      (list "Printing" (symbol-value var-sym))
+      newname)
+     (set var-sym newname)))
+
+  ;; XEmacs
+  (defun pr-menu-set-ps-title (value &optional item entry index)
+    (pr-relabel-menu-item (format "PostScript Printer: %s" value)
+			  'pr-ps-name-old)
+    (pr-ps-set-printer value)
+    (and index
+	 (pr-menu-lock entry index 12 'toggle nil)))
+
+  ;; XEmacs
+  (defun pr-menu-set-txt-title (value &optional item entry index)
+    (pr-relabel-menu-item (format "Text Printer: %s" value)
+			  'pr-txt-name-old)
+    (pr-txt-set-printer value)
+    (and index
+	 (pr-menu-lock entry index 12 'toggle nil)))
+
+  ;; XEmacs
+  (defun pr-menu-set-utility-title (value &optional item entry index)
+    (pr-xemacs-global-menubar
+     (let ((newname (format "%s" value)))
+       (pr-x-relabel-menu-item
+	(list "Printing" "PostScript Print" "File" pr-ps-utility-old)
+	newname)
+       (pr-x-relabel-menu-item
+	(list "Printing" "PostScript Preview" "File" pr-ps-utility-old)
+	newname)
+       (setq pr-ps-utility-old newname)))
+    (pr-ps-set-utility value)
+    (and index
+	 (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
+
+  ;; XEmacs
+  (defun pr-even-or-odd-pages (value &optional no-lock)
+    (pr-relabel-menu-item (cdr (assq value pr-even-or-odd-alist))
+			  'pr-even-or-odd-old)
+    (setq ps-even-or-odd-pages value)
+    (or no-lock
+	(pr-menu-lock 'postscript-options 8 12 'toggle nil))))
+
+
+ (t
+  ;; GNU Emacs
+  (defalias 'pr-update-mode-line 'force-mode-line-update)
+
+  ;; GNU Emacs
+  (defun pr-do-update-menus (&optional force)
+    (pr-menu-alist pr-ps-printer-alist
+		   'pr-ps-name
+		   'pr-menu-set-ps-title
+		   "PostScript Printers"
+		   'pr-ps-printer-menu-modified
+		   force
+		   "PostScript Printers"
+		   'postscript 2)
+    (pr-menu-alist pr-txt-printer-alist
+		   'pr-txt-name
+		   'pr-menu-set-txt-title
+		   "Text Printers"
+		   'pr-txt-printer-menu-modified
+		   force
+		   "Text Printers"
+		   'text 2)
+    (let ((save-var pr-ps-utility-menu-modified))
       (pr-menu-alist pr-ps-utility-alist
 		     'pr-ps-utility
 		     'pr-menu-set-utility-title
-		     '("Printing" "PostScript Preview" "File")
-		     'pr-ps-utility-menu-modified
+		     '("PostScript Print"   "File" "PostScript Utility")
+		     'save-var
 		     force
-		     pr-ps-utility-old
-		     nil 1)
-      (pr-even-or-odd-pages ps-even-or-odd-pages force))
-
-    ;; XEmacs
-    (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
-				entry index)
-      (when (and alist (or force (symbol-value modified-sym)))
-	(pr-xemacs-global-menubar
-	 (pr-x-add-submenu menu-path
-			   (pr-menu-create name alist var-sym
-					   fun entry index)))
-	(funcall fun (symbol-value var-sym))
-	(set modified-sym nil)))
-
-    ;; XEmacs
-    (defun pr-menu-set-ps-title (value &optional item entry index)
-      (pr-relabel-menu-item (format "PostScript Printer: %s" value)
-			    'pr-ps-name-old)
-      (pr-ps-set-printer value)
-      (and index
-	   (pr-menu-lock entry index 12 'toggle nil)))
-
-    ;; XEmacs
-    (defun pr-menu-set-txt-title (value &optional item entry index)
-      (pr-relabel-menu-item (format "Text Printer: %s" value)
-			    'pr-txt-name-old)
-      (pr-txt-set-printer value)
-      (and index
-	   (pr-menu-lock entry index 12 'toggle nil)))
-
-    ;; XEmacs
-    (defun pr-menu-set-utility-title (value &optional item entry index)
-      (pr-xemacs-global-menubar
-       (let ((newname (format "%s" value)))
-	 (pr-x-relabel-menu-item
-	  (list "Printing" "PostScript Print" "File" pr-ps-utility-old)
-	  newname)
-	 (pr-x-relabel-menu-item
-	  (list "Printing" "PostScript Preview" "File" pr-ps-utility-old)
-	  newname)
-	 (setq pr-ps-utility-old newname)))
-      (pr-ps-set-utility value)
-      (and index
-	   (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
-
-    ;; XEmacs
-    (defun pr-even-or-odd-pages (value &optional no-lock)
-      (pr-relabel-menu-item (cdr (assq value pr-even-or-odd-alist))
-			    'pr-even-or-odd-old)
-      (setq ps-even-or-odd-pages value)
-      (or no-lock
-	  (pr-menu-lock 'postscript-options 8 12 'toggle nil))))))
-
-;; XEmacs
-(defun pr-relabel-menu-item (newname var-sym)
-  (pr-xemacs-global-menubar
-   (pr-x-relabel-menu-item
-    (list "Printing" (symbol-value var-sym))
-    newname)
-   (set var-sym newname)))
-
-;; GNU Emacs
-(defun pr-menu-set-item-name (item name)
-  (and item
-       (setcar (nthcdr 2 item) name)))	; ITEM-NAME
-
-;; GNU Emacs
-(defun pr-menu-get-item (name-list)
-  ;; NAME-LIST is a string or a list of strings.
-  (let ((ipath pr-menu-bar)
-	(len   (and (listp name-list) (length name-list))))
-    (and len (= len 1)
-	 (setq name-list (car name-list)))
-    (cond
-     ((null name-list)
-      ;; nil
-      nil)
-     ((listp name-list)
-      ;; list and (length list) > 1
-      (let* ((copy (copy-sequence name-list))
-	     (name (pr-get-symbol (nth (1- len) copy)))
-	     (path (progn
-		     (setcdr (nthcdr (- len 2) copy) nil)
-		     copy))
-	     (menu (lookup-key
-		    global-map
-		    (if path
-			(vconcat ipath
-				 (mapcar 'pr-get-symbol path))
-		      ipath))))
-	(assq name (nthcdr 2 menu))))
-     (t
-      ;; string
-      (let ((name (pr-get-symbol name-list))
-	    (menu (lookup-key global-map ipath)))
-	(assq name (nthcdr 2 menu)))))))
+		     "PostScript Utility"
+		     nil 1))
+    (pr-menu-alist pr-ps-utility-alist
+		   'pr-ps-utility
+		   'pr-menu-set-utility-title
+		   '("PostScript Preview" "File" "PostScript Utility")
+		   'pr-ps-utility-menu-modified
+		   force
+		   "PostScript Utility"
+		   nil 1)
+    (pr-even-or-odd-pages ps-even-or-odd-pages force))
+
+  ;; GNU Emacs
+  (defun pr-menu-get-item (name-list)
+    ;; NAME-LIST is a string or a list of strings.
+    (or (listp name-list)
+	(setq name-list (list name-list)))
+    (and name-list
+	 (let* ((reversed (reverse name-list))
+		(name (pr-get-symbol (car reversed)))
+		(path (nreverse (cdr reversed)))
+		(menu (lookup-key
+		       global-map
+		       (vconcat pr-menu-bar
+				(mapcar 'pr-get-symbol path)))))
+	   (assq name (nthcdr 2 menu)))))
+
+  ;; GNU Emacs
+  (defvar pr-temp-menu nil)
+
+  ;; GNU Emacs
+  (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
+			      entry index)
+    (when (and alist (or force (symbol-value modified-sym)))
+      (easy-menu-define pr-temp-menu nil ""
+	(pr-menu-create name alist var-sym fun entry index))
+      (let ((item (pr-menu-get-item menu-path)))
+	(and item
+	     (let* ((binding     (nthcdr 3 item))
+		    (key-binding (cdr binding)))
+	       (setcar binding pr-temp-menu)
+	       (and key-binding (listp (car key-binding))
+		    (setcdr binding (cdr key-binding)))	; skip KEY-BINDING
+	       (funcall fun (symbol-value var-sym) item))))
+      (set modified-sym nil)))
+
+  ;; GNU Emacs
+  (defun pr-menu-set-item-name (item name)
+    (and item
+	 (setcar (nthcdr 2 item) name))) ; ITEM-NAME
+
+  ;; GNU Emacs
+  (defun pr-menu-set-ps-title (value &optional item entry index)
+    (pr-menu-set-item-name (or item
+			       (pr-menu-get-item "PostScript Printers"))
+			   (format "PostScript Printer: %s" value))
+    (pr-ps-set-printer value)
+    (and index
+	 (pr-menu-lock entry index 12 'toggle nil)))
+
+  ;; GNU Emacs
+  (defun pr-menu-set-txt-title (value &optional item entry index)
+    (pr-menu-set-item-name (or item
+			       (pr-menu-get-item "Text Printers"))
+			   (format "Text Printer: %s" value))
+    (pr-txt-set-printer value)
+    (and index
+	 (pr-menu-lock entry index 12 'toggle nil)))
+
+  ;; GNU Emacs
+  (defun pr-menu-set-utility-title (value &optional item entry index)
+    (let ((name (symbol-name value)))
+      (if item
+	  (pr-menu-set-item-name item name)
+	(pr-menu-set-item-name
+	 (pr-menu-get-item
+	  '("PostScript Print"   "File" "PostScript Utility"))
+	 name)
+	(pr-menu-set-item-name
+	 (pr-menu-get-item
+	  '("PostScript Preview" "File" "PostScript Utility"))
+	 name)))
+    (pr-ps-set-utility value)
+    (and index
+	 (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
+
+  ;; GNU Emacs
+  (defun pr-even-or-odd-pages (value &optional no-lock)
+    (pr-menu-set-item-name (pr-menu-get-item "Print All Pages")
+			   (cdr (assq value pr-even-or-odd-alist)))
+    (setq ps-even-or-odd-pages value)
+    (or no-lock
+	(pr-menu-lock 'postscript-options 8 12 'toggle nil)))))
 
 
 (defun pr-ps-set-utility (value)
@@ -5169,6 +5109,116 @@
 ;; Internal Functions (II)
 
 
+(defun pr-toggle (var-sym mess entry index horizontal state
+			  &optional path no-menu)
+  (set var-sym (not (symbol-value var-sym)))
+  (message "%s is %s" mess (if (symbol-value var-sym) "on" "off"))
+  (or no-menu
+      (pr-menu-lock entry index horizontal state path)))
+
+
+(defun pr-toggle-file-duplex-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'pr-file-duplex "PS file duplex" nil 7 5 nil
+	     '("PostScript Print" "File") no-menu))
+
+
+(defun pr-toggle-file-tumble-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'pr-file-tumble "PS file tumble" nil 8 5 nil
+	     '("PostScript Print" "File") no-menu))
+
+
+(defun pr-toggle-file-landscape-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'pr-file-landscape "PS file landscape" nil 6 5 nil
+	     '("PostScript Print" "File") no-menu))
+
+
+(defun pr-toggle-ghostscript-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'pr-print-using-ghostscript "Printing using ghostscript"
+	     'postscript-process 2 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-faces-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'pr-faces-p "Printing with faces"
+	     'postscript-process 1 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-spool-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'pr-spool-p "Spooling printing"
+	     'postscript-process 0 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-duplex-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'ps-spool-duplex "Printing duplex"
+	     'postscript-options 5 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-tumble-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'ps-spool-tumble "Tumble"
+	     'postscript-options 6 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-landscape-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'ps-landscape-mode "Landscape"
+	     'postscript-options 0 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-upside-down-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'ps-print-upside-down "Upside-Down"
+	     'postscript-options 7 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-line-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'ps-line-number "Line number"
+	     'postscript-options 3 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-zebra-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'ps-zebra-stripes "Zebra stripe"
+	     'postscript-options 4 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-header-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'ps-print-header "Print header"
+	     'postscript-options 1 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-header-frame-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'ps-print-header-frame "Print header frame"
+	     'postscript-options 2 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-lock-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'pr-menu-lock "Menu lock"
+	     'printing 2 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-region-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'pr-auto-region "Auto region"
+	     'printing 0 12 'toggle nil no-menu))
+
+
+(defun pr-toggle-mode-menu (&optional no-menu)
+  (interactive)
+  (pr-toggle 'pr-auto-mode "Auto mode"
+	     'printing 1 12 'toggle nil no-menu))
+
+
 (defun pr-prompt (str)
   (if (pr-auto-mode-p)
       (concat str " mode")
@@ -5269,27 +5319,20 @@
     (pr-expand-file-name res)))
 
 
-(defun pr-toggle (var-sym mess entry index horizontal state &optional path)
-  (set var-sym (not (symbol-value var-sym)))
-  (message "%s is %s" mess (if (symbol-value var-sym) "on" "off"))
-  (pr-menu-lock entry index horizontal state path))
-
-
 (defun pr-ps-utility-args (n-up-sym infile-sym outfile-sym prompt)
+  ;; check arguments for PostScript file processing.
   ;; n-up
   (or (symbol-value n-up-sym)
       (set n-up-sym (pr-interactive-n-up prompt)))
+  ;; input file
   (and (eq (symbol-value infile-sym) t)
-       (set infile-sym (and (not (interactive-p))
-			    (pr-ps-infile-preprint prompt))))
-  ;; input file
+       (set infile-sym (pr-ps-infile-preprint prompt)))
   (or (symbol-value infile-sym)
       (error "%s: input PostScript file name is missing" prompt))
   (set infile-sym (pr-dosify-file-name (symbol-value infile-sym)))
   ;; output file
   (and (eq (symbol-value outfile-sym) t)
-       (set outfile-sym (and (not (interactive-p))
-			     current-prefix-arg
+       (set outfile-sym (and current-prefix-arg
 			     (pr-ps-outfile-preprint prompt))))
   (and (symbol-value outfile-sym)
        (set outfile-sym (pr-dosify-file-name (symbol-value outfile-sym))))
@@ -5297,6 +5340,7 @@
 
 
 (defun pr-ps-utility-process (n-up infile outfile)
+  ;; activate utility to process a PostScript file.
   (let (item)
     (and (stringp infile) (file-exists-p infile)
 	 (setq item (cdr (assq pr-ps-utility pr-ps-utility-alist)))
@@ -5335,19 +5379,29 @@
 	(cmd    (pr-command command))
 	status)
     (setq args (pr-remove-nil-from-list args))
+    ;; *Printing Command Output* == show command & args
     (save-excursion
       (set-buffer buffer)
       (goto-char (point-max))
       (insert (format "%s %S\n" cmd args)))
-    (setq status
-	  (condition-case data
-	      (apply 'call-process cmd nil buffer nil args)
-	    ((quit error)
-	     (error-message-string data))))
+    ;; *Printing Command Output* == show any return message from command
+    (pr-save-file-modes
+     (setq status
+	   (condition-case data
+	       (apply 'call-process cmd nil buffer nil args)
+	     ((quit error)
+	      (error-message-string data)))))
+    ;; *Printing Command Output* == show exit status
     (save-excursion
       (set-buffer buffer)
       (goto-char (point-max))
-      (insert (format "Exit status: %s\n" status)))))
+      (insert (format "Exit status: %s\n\n" status)))
+    ;; message if error status
+    (if (or (stringp status)
+	    (and (integerp status) (/= status 0)))
+	(message
+	 "Printing error status: %s (see *Printing Command Output* buffer)"
+	 status))))
 
 
 (defun pr-txt-print (from to)
@@ -5358,7 +5412,10 @@
 
 
 (defun pr-switches-string (switches mess)
-  (mapconcat 'identity (pr-switches switches mess) " "))
+  ;; If SWITCHES is nil, return nil.
+  ;; Otherwise, return the list of string in a string.
+  (and switches
+       (mapconcat 'identity (pr-switches switches mess) " ")))
 
 
 (defun pr-switches (switches mess)
@@ -5395,8 +5452,10 @@
 
 (defun pr-ps-file (&optional filename)
   (pr-dosify-file-name (or filename
-			   (convert-standard-filename
-			    (expand-file-name pr-ps-temp-file pr-temp-dir)))))
+			   (make-temp-file
+			    (convert-standard-filename
+			     (expand-file-name pr-ps-temp-file pr-temp-dir))
+			    nil ".ps"))))
 
 
 (defun pr-interactive-n-up (mess)
@@ -5485,8 +5544,7 @@
 (defun pr-set-outfilename (filename-sym)
   (and (not pr-spool-p)
        (eq (symbol-value filename-sym) t)
-       (set filename-sym (and (not (interactive-p))
-			      current-prefix-arg
+       (set filename-sym (and current-prefix-arg
 			      (ps-print-preprint current-prefix-arg))))
   (and (symbol-value filename-sym)
        (set filename-sym (pr-dosify-file-name (symbol-value filename-sym)))))
@@ -5580,41 +5638,42 @@
 
 
 (defun pr-text2ps (kind n-up filename &optional from to)
-  (let ((ps-n-up-printing n-up)
-	(ps-spool-config (and (eq ps-spool-config 'setpagedevice)
-			      'setpagedevice)))
-    (pr-delete-file-if-exists filename)
-    (cond (pr-faces-p
-	   (cond (pr-spool-p
-		  ;; pr-faces-p and pr-spool-p
-		  ;; here FILENAME arg is ignored
-		  (cond ((eq kind 'buffer)
-			 (ps-spool-buffer-with-faces))
-			((eq kind 'region)
-			 (ps-spool-region-with-faces (or from (point))
-						     (or to (mark))))
-			))
+  (pr-save-file-modes
+   (let ((ps-n-up-printing n-up)
+	 (ps-spool-config (and (eq ps-spool-config 'setpagedevice)
+			       'setpagedevice)))
+     (pr-delete-file-if-exists filename)
+     (cond (pr-faces-p
+	    (cond (pr-spool-p
+		   ;; pr-faces-p and pr-spool-p
+		   ;; here FILENAME arg is ignored
+		   (cond ((eq kind 'buffer)
+			  (ps-spool-buffer-with-faces))
+			 ((eq kind 'region)
+			  (ps-spool-region-with-faces (or from (point))
+						      (or to (mark))))
+			 ))
 		  ;; pr-faces-p and not pr-spool-p
-		 ((eq kind 'buffer)
-		  (ps-print-buffer-with-faces filename))
-		 ((eq kind 'region)
-		  (ps-print-region-with-faces (or from (point))
-					      (or to (mark)) filename))
-		 ))
-	  (pr-spool-p
-	   ;; not pr-faces-p and pr-spool-p
-	   ;; here FILENAME arg is ignored
-	   (cond ((eq kind 'buffer)
-		  (ps-spool-buffer))
-		 ((eq kind 'region)
-		  (ps-spool-region (or from (point)) (or to (mark))))
-		 ))
-	  ;; not pr-faces-p and not pr-spool-p
-	  ((eq kind 'buffer)
-	   (ps-print-buffer filename))
-	  ((eq kind 'region)
-	   (ps-print-region (or from (point)) (or to (mark)) filename))
-	  )))
+		  ((eq kind 'buffer)
+		   (ps-print-buffer-with-faces filename))
+		  ((eq kind 'region)
+		   (ps-print-region-with-faces (or from (point))
+					       (or to (mark)) filename))
+		  ))
+	   (pr-spool-p
+	    ;; not pr-faces-p and pr-spool-p
+	    ;; here FILENAME arg is ignored
+	    (cond ((eq kind 'buffer)
+		   (ps-spool-buffer))
+		  ((eq kind 'region)
+		   (ps-spool-region (or from (point)) (or to (mark))))
+		  ))
+	   ;; not pr-faces-p and not pr-spool-p
+	   ((eq kind 'buffer)
+	    (ps-print-buffer filename))
+	   ((eq kind 'region)
+	    (ps-print-region (or from (point)) (or to (mark)) filename))
+	   ))))
 
 
 (defun pr-command (command)
@@ -5721,13 +5780,12 @@
 (defvar pr-interface-map nil
   "Keymap for pr-interface.")
 
-(if pr-interface-map
-    nil
+(unless pr-interface-map
   (setq pr-interface-map (make-sparse-keymap))
-  (cond ((eq ps-print-emacs-type 'xemacs) ; XEmacs
+  (cond ((featurep 'xemacs)		; XEmacs
 	 (pr-f-set-keymap-parents pr-interface-map (list widget-keymap))
 	 (pr-f-set-keymap-name pr-interface-map 'pr-interface-map))
-	((eq ps-print-emacs-type 'emacs) ; GNU Emacs
+	(t				; GNU Emacs
 	 (pr-f-set-keymap-parents pr-interface-map widget-keymap)))
   (define-key pr-interface-map "q" 'pr-interface-quit)
   (define-key pr-interface-map "?" 'pr-interface-help))
--- a/lisp/progmodes/cc-mode.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/progmodes/cc-mode.el	Mon Nov 22 11:06:39 2004 +0000
@@ -491,7 +491,6 @@
 
   ;; Install the functions that ensure that various internal caches
   ;; don't become invalid due to buffer changes.
-  (make-local-hook 'after-change-functions)
   (add-hook 'after-change-functions 'c-after-change nil t))
 
 (defun c-after-font-lock-init ()
@@ -517,8 +516,6 @@
 	  c-beginning-of-syntax
 	  (font-lock-mark-block-function
 	   . c-mark-function)))
-
-  (make-local-hook 'font-lock-mode-hook)
   (add-hook 'font-lock-mode-hook 'c-after-font-lock-init nil t))
 
 (defun c-setup-doc-comment-style ()
@@ -669,8 +666,7 @@
   (c-common-init 'c-mode)
   (easy-menu-add c-c-menu)
   (cc-imenu-init cc-imenu-c-generic-expression)
-  (run-hooks 'c-mode-common-hook)
-  (run-hooks 'c-mode-hook)
+  (run-mode-hooks 'c-mode-common-hook 'c-mode-hook)
   (c-update-modeline))
 
 
@@ -733,8 +729,7 @@
   (c-common-init 'c++-mode)
   (easy-menu-add c-c++-menu)
   (cc-imenu-init cc-imenu-c++-generic-expression)
-  (run-hooks 'c-mode-common-hook)
-  (run-hooks 'c++-mode-hook)
+  (run-mode-hooks 'c-mode-common-hook 'c++-mode-hook)
   (c-update-modeline))
 
 
@@ -798,8 +793,7 @@
   (c-common-init 'objc-mode)
   (easy-menu-add c-objc-menu)
   (cc-imenu-init nil 'cc-imenu-objc-function)
-  (run-hooks 'c-mode-common-hook)
-  (run-hooks 'objc-mode-hook)
+  (run-mode-hooks 'c-mode-common-hook 'objc-mode-hook)
   (c-update-modeline))
 
 
@@ -869,8 +863,7 @@
   (c-common-init 'java-mode)
   (easy-menu-add c-java-menu)
   (cc-imenu-init cc-imenu-java-generic-expression)
-  (run-hooks 'c-mode-common-hook)
-  (run-hooks 'java-mode-hook)
+  (run-mode-hooks 'c-mode-common-hook 'java-mode-hook)
   (c-update-modeline))
 
 
@@ -928,8 +921,7 @@
   (c-common-init 'idl-mode)
   (easy-menu-add c-idl-menu)
   ;;(cc-imenu-init cc-imenu-idl-generic-expression) ;TODO
-  (run-hooks 'c-mode-common-hook)
-  (run-hooks 'idl-mode-hook)
+  (run-mode-hooks 'c-mode-common-hook 'idl-mode-hook)
   (c-update-modeline))
 
 
@@ -991,8 +983,7 @@
   (c-common-init 'pike-mode)
   (easy-menu-add c-pike-menu)
   ;;(cc-imenu-init cc-imenu-pike-generic-expression) ;TODO
-  (run-hooks 'c-mode-common-hook)
-  (run-hooks 'pike-mode-hook)
+  (run-mode-hooks 'c-mode-common-hook 'pike-mode-hook)
   (c-update-modeline))
 
 
@@ -1084,8 +1075,7 @@
     ;; in cc-engine.el, just before (defun c-fast-in-literal ...
     (defalias 'c-in-literal 'c-slow-in-literal)
 
-    (run-hooks 'c-mode-common-hook)
-    (run-hooks 'awk-mode-hook)
+    (run-mode-hooks 'c-mode-common-hook 'awk-mode-hook)
     (c-update-modeline))
 ) ;; closes the (if (not (memq 'syntax-properties c-emacs-features))
 
--- a/lisp/progmodes/compile.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/progmodes/compile.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1,7 +1,7 @@
 ;;; compile.el --- run compiler as inferior of Emacs, parse error messages
 
-;; Copyright (C) 1985, 86, 87, 93, 94, 95, 96, 97, 98, 1999, 2001, 03, 2004
-;;  Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+;;   2001, 2003, 2004  Free Software Foundation, Inc.
 
 ;; Authors: Roland McGrath <roland@gnu.org>,
 ;;	    Daniel Pfeiffer <occitan@esperanto.org>
@@ -606,6 +606,14 @@
 		       2)))
     (compilation-internal-error-properties file line end-line col end-col type fmt)))
 
+(defun compilation-move-to-column (col screen)
+  "Go to column COL on the current line.
+If SCREEN is non-nil, columns are screen columns, otherwise, they are
+just char-counts."
+  (if screen
+      (move-to-column col)
+    (goto-char (min (+ (line-beginning-position) col) (line-end-position)))))
+
 (defun compilation-internal-error-properties (file line end-line col end-col type fmt)
   "Get the meta-info that will be added as text-properties.
 LINE, END-LINE, COL, END-COL are integers or nil.
@@ -638,19 +646,17 @@
 	  (goto-char (marker-position marker))
 	  (when (or end-col end-line)
 	    (beginning-of-line (- (or end-line line) marker-line -1))
-	    (if (< end-col 0)
+	    (if (or (null end-col) (< end-col 0))
 		(end-of-line)
-	      (if compilation-error-screen-columns
-		  (move-to-column end-col)
-		(forward-char end-col)))
+	      (compilation-move-to-column
+	       end-col compilation-error-screen-columns))
 	    (setq end-marker (list (point-marker))))
 	  (beginning-of-line (if end-line
-				 (- end-line line -1)
+				 (- line end-line -1)
 			       (- loc marker-line -1)))
 	  (if col
-	      (if compilation-error-screen-columns
-		  (move-to-column col)
-		(forward-char col))
+	      (compilation-move-to-column
+	       col compilation-error-screen-columns)
 	    (forward-to-indentation 0))
 	  (setq marker (list (point-marker))))))
 
@@ -1144,6 +1150,7 @@
   (set (make-local-variable 'page-delimiter)
        compilation-page-delimiter)
   (compilation-setup)
+  (setq buffer-read-only t)
   (run-mode-hooks 'compilation-mode-hook))
 
 (defmacro define-compilation-mode (mode name doc &rest body)
@@ -1206,8 +1213,6 @@
   "Prepare the buffer for the compilation parsing commands to work.
 Optional argument MINOR indicates this is called from
 `compilation-minor-mode'."
-  (unless minor
-    (setq buffer-read-only t))
   (make-local-variable 'compilation-current-error)
   (make-local-variable 'compilation-messages-start)
   (make-local-variable 'compilation-error-screen-columns)
@@ -1491,10 +1496,7 @@
 	      (if (car col)
 		  (if (eq (car col) -1)	; special case for range end
 		      (end-of-line)
-		    (if columns
-			(move-to-column (car col))
-		      (beginning-of-line)
-		      (forward-char (car col))))
+		    (compilation-move-to-column (car col) columns))
 		(beginning-of-line)
 		(skip-chars-forward " \t"))
 	      (if (nth 3 col)
--- a/lisp/progmodes/cperl-mode.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/progmodes/cperl-mode.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1544,7 +1544,7 @@
        (cperl-msb-fix))
   (if (featurep 'easymenu)
       (easy-menu-add cperl-menu))	; A NOP in Emacs.
-  (run-hooks 'cperl-mode-hook)
+  (run-mode-hooks 'cperl-mode-hook)
   ;; After hooks since fontification will break this
   (if cperl-pod-here-scan
       (or cperl-syntaxify-by-font-lock
@@ -4180,7 +4180,7 @@
       (let ((indent-info (if cperl-emacs-can-parse
 			     (list nil nil nil)	; Cannot use '(), since will modify
 			   nil))
-	    (pm 0) (imenu-scanning-message "Indenting... (%3d%%)")
+	    (pm 0)
 	    after-change-functions	; Speed it up!
 	    st comm old-comm-indent new-comm-indent p pp i empty)
 	(if h-a-c (add-hook 'after-change-functions 'cperl-delay-update-hook))
--- a/lisp/progmodes/ebnf-otz.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/progmodes/ebnf-otz.el	Mon Nov 22 11:06:39 2004 +0000
@@ -5,7 +5,7 @@
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
 ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
-;; Time-stamp: <2004/02/29 18:40:14 vinicius>
+;; Time-stamp: <2004/11/19 22:24:07 vinicius>
 ;; Keywords: wp, ebnf, PostScript
 ;; Version: 1.0
 
@@ -68,7 +68,7 @@
 ;;    A = B | .                ==>   A = [B].
 ;;    A =   | B .              ==>   A = [B].
 ;;
-;;    factoration:
+;;    factorization:
 ;;    A = B C | B D.           ==>   A = B (C | D).
 ;;    A = C B | D B.           ==>   A = (C | D) B.
 ;;    A = B C E | B D E.       ==>   A = B (C | D) E.
@@ -227,7 +227,7 @@
 ;;    A = B | .                ==>   A = [B].
 ;;    A =   | B .              ==>   A = [B].
 
-;;    factoration:
+;;    factorization:
 ;;    A = B C | B D.           ==>   A = B (C | D).
 ;;    A = C B | D B.           ==>   A = (C | D) B.
 ;;    A = B C E | B D E.       ==>   A = B (C | D) E.
@@ -260,7 +260,7 @@
 ;; 6.  A = B | .                ==>   A = [B].
 ;; 7.  A =   | B .              ==>   A = [B].
 
-;; factoration:
+;; factorization:
 ;; 8.  A = B C | B D.           ==>   A = B (C | D).
 ;; 9.  A = C B | D B.           ==>   A = (C | D) B.
 ;; 10. A = B C E | B D E.       ==>   A = B (C | D) E.
--- a/lisp/progmodes/ebnf2ps.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/progmodes/ebnf2ps.el	Mon Nov 22 11:06:39 2004 +0000
@@ -5,7 +5,7 @@
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
 ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
-;; Time-stamp: <2004/04/04 21:40:30 vinicius>
+;; Time-stamp: <2004/11/19 22:30:34 vinicius>
 ;; Keywords: wp, ebnf, PostScript
 ;; Version: 4.2
 ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/
@@ -393,7 +393,7 @@
 ;;    6.  A = B | .                ==>   A = [B].
 ;;    7.  A =   | B .              ==>   A = [B].
 ;;
-;; factoration:
+;; factorization:
 ;;    8.  A = B C | B D.           ==>   A = B (C | D).
 ;;    9.  A = C B | D B.           ==>   A = (C | D) B.
 ;;    10. A = B C E | B D E.       ==>   A = B (C | D) E.
@@ -1114,19 +1114,18 @@
 
 
 ;; to avoid gripes with Emacs 20
-(eval-and-compile
-  (or (fboundp 'assq-delete-all)
-      (defun assq-delete-all (key alist)
-	"Delete from ALIST all elements whose car is KEY.
+(or (fboundp 'assq-delete-all)
+    (defun assq-delete-all (key alist)
+      "Delete from ALIST all elements whose car is KEY.
 Return the modified alist.
 Elements of ALIST that are not conses are ignored."
-	(let ((tail alist))
-	  (while tail
-	    (if (and (consp (car tail))
-		     (eq (car (car tail)) key))
-		(setq alist (delq (car tail) alist)))
-	    (setq tail (cdr tail)))
-	  alist))))
+      (let ((tail alist))
+	(while tail
+	  (if (and (consp (car tail))
+		   (eq (car (car tail)) key))
+	      (setq alist (delq (car tail) alist)))
+	  (setq tail (cdr tail)))
+	alist)))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1138,12 +1137,14 @@
 (defgroup postscript nil
   "PostScript Group"
   :tag "PostScript"
+  :version "20"
   :group 'emacs)
 
 
 (defgroup ebnf2ps nil
   "Translate an EBNF to a syntactic chart on PostScript"
   :prefix "ebnf-"
+  :version "20"
   :group 'wp
   :group 'postscript)
 
@@ -1152,6 +1153,7 @@
   "Special customization"
   :prefix "ebnf-"
   :tag "Special"
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1159,6 +1161,7 @@
   "Except customization"
   :prefix "ebnf-"
   :tag "Except"
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1166,6 +1169,7 @@
   "Repeat customization"
   :prefix "ebnf-"
   :tag "Repeat"
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1173,6 +1177,7 @@
   "Terminal customization"
   :prefix "ebnf-"
   :tag "Terminal"
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1180,6 +1185,7 @@
   "Non-Terminal customization"
   :prefix "ebnf-"
   :tag "Non-Terminal"
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1187,6 +1193,7 @@
   "Production customization"
   :prefix "ebnf-"
   :tag "Production"
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1194,6 +1201,7 @@
   "Shapes customization"
   :prefix "ebnf-"
   :tag "Shape"
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1201,6 +1209,7 @@
   "Displacement customization"
   :prefix "ebnf-"
   :tag "Displacement"
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1208,6 +1217,7 @@
   "Syntactic customization"
   :prefix "ebnf-"
   :tag "Syntactic"
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1215,12 +1225,14 @@
   "Optimization customization"
   :prefix "ebnf-"
   :tag "Optimization"
+  :version "20"
   :group 'ebnf2ps)
 
 
 (defcustom ebnf-horizontal-orientation nil
   "*Non-nil means productions are drawn horizontally."
   :type 'boolean
+  :version "20"
   :group 'ebnf-displacement)
 
 
@@ -1229,6 +1241,7 @@
 
 It is only used when `ebnf-horizontal-orientation' is non-nil."
   :type 'boolean
+  :version "20"
   :group 'ebnf-displacement)
 
 
@@ -1237,6 +1250,7 @@
 
 Value less or equal to zero forces ebnf2ps to set a proper default value."
   :type 'number
+  :version "20"
   :group 'ebnf-displacement)
 
 
@@ -1245,6 +1259,7 @@
 
 Value less or equal to zero forces ebnf2ps to set a proper default value."
   :type 'number
+  :version "20"
   :group 'ebnf-displacement)
 
 
@@ -1258,12 +1273,14 @@
    any other value	centralize"
   :type '(radio :tag "Sequence Justification"
 		(const left) (const right) (other :tag "center" center))
+  :version "20"
   :group 'ebnf-displacement)
 
 
 (defcustom ebnf-special-show-delimiter t
   "*Non-nil means special delimiter (character `?') is shown."
   :type 'boolean
+  :version "20"
   :group 'ebnf-special)
 
 
@@ -1285,6 +1302,7 @@
 			       (const underline) (const strikeout)
 			       (const overline)  (const shadow)
 			       (const box)       (const outline))))
+  :version "20"
   :group 'ebnf-special)
 
 
@@ -1294,24 +1312,28 @@
 See documentation for `ebnf-non-terminal-shape'."
   :type '(radio :tag "Special Shape"
 		(const miter) (const round) (const bevel))
+  :version "20"
   :group 'ebnf-special)
 
 
 (defcustom ebnf-special-shadow nil
   "*Non-nil means special box will have a shadow."
   :type 'boolean
+  :version "20"
   :group 'ebnf-special)
 
 
 (defcustom ebnf-special-border-width 0.5
   "*Specify border width for special box."
   :type 'number
+  :version "20"
   :group 'ebnf-special)
 
 
 (defcustom ebnf-special-border-color "Black"
   "*Specify border color for special box."
   :type 'string
+  :version "20"
   :group 'ebnf-special)
 
 
@@ -1333,6 +1355,7 @@
 			       (const underline) (const strikeout)
 			       (const overline)  (const shadow)
 			       (const box)       (const outline))))
+  :version "20"
   :group 'ebnf-except)
 
 
@@ -1342,24 +1365,28 @@
 See documentation for `ebnf-non-terminal-shape'."
   :type '(radio :tag "Except Shape"
 		(const miter) (const round) (const bevel))
+  :version "20"
   :group 'ebnf-except)
 
 
 (defcustom ebnf-except-shadow nil
   "*Non-nil means except box will have a shadow."
   :type 'boolean
+  :version "20"
   :group 'ebnf-except)
 
 
 (defcustom ebnf-except-border-width 0.25
   "*Specify border width for except box."
   :type 'number
+  :version "20"
   :group 'ebnf-except)
 
 
 (defcustom ebnf-except-border-color "Black"
   "*Specify border color for except box."
   :type 'string
+  :version "20"
   :group 'ebnf-except)
 
 
@@ -1381,6 +1408,7 @@
 			       (const underline) (const strikeout)
 			       (const overline)  (const shadow)
 			       (const box)       (const outline))))
+  :version "20"
   :group 'ebnf-repeat)
 
 
@@ -1390,24 +1418,28 @@
 See documentation for `ebnf-non-terminal-shape'."
   :type '(radio :tag "Repeat Shape"
 		(const miter) (const round) (const bevel))
+  :version "20"
   :group 'ebnf-repeat)
 
 
 (defcustom ebnf-repeat-shadow nil
   "*Non-nil means repeat box will have a shadow."
   :type 'boolean
+  :version "20"
   :group 'ebnf-repeat)
 
 
 (defcustom ebnf-repeat-border-width 0.0
   "*Specify border width for repeat box."
   :type 'number
+  :version "20"
   :group 'ebnf-repeat)
 
 
 (defcustom ebnf-repeat-border-color "Black"
   "*Specify border color for repeat box."
   :type 'string
+  :version "20"
   :group 'ebnf-repeat)
 
 
@@ -1429,6 +1461,7 @@
 			       (const underline) (const strikeout)
 			       (const overline)  (const shadow)
 			       (const box)       (const outline))))
+  :version "20"
   :group 'ebnf-terminal)
 
 
@@ -1438,30 +1471,35 @@
 See documentation for `ebnf-non-terminal-shape'."
   :type '(radio :tag "Terminal Shape"
 		(const miter) (const round) (const bevel))
+  :version "20"
   :group 'ebnf-terminal)
 
 
 (defcustom ebnf-terminal-shadow nil
   "*Non-nil means terminal box will have a shadow."
   :type 'boolean
+  :version "20"
   :group 'ebnf-terminal)
 
 
 (defcustom ebnf-terminal-border-width 1.0
   "*Specify border width for terminal box."
   :type 'number
+  :version "20"
   :group 'ebnf-terminal)
 
 
 (defcustom ebnf-terminal-border-color "Black"
   "*Specify border color for terminal box."
   :type 'string
+  :version "20"
   :group 'ebnf-terminal)
 
 
 (defcustom ebnf-production-name-p t
   "*Non-nil means production name will be printed."
   :type 'boolean
+  :version "20"
   :group 'ebnf-production)
 
 
@@ -1477,6 +1515,7 @@
 		(const :tag "Ascending" ascending)
 		(const :tag "Descending" descending)
 		(other :tag "No Sort" nil))
+  :version "20"
   :group 'ebnf-production)
 
 
@@ -1519,6 +1558,7 @@
 			       (const underline) (const strikeout)
 			       (const overline)  (const shadow)
 			       (const box)       (const outline))))
+  :version "20"
   :group 'ebnf-production)
 
 
@@ -1540,6 +1580,7 @@
 			       (const underline) (const strikeout)
 			       (const overline)  (const shadow)
 			       (const box)       (const outline))))
+  :version "20"
   :group 'ebnf-non-terminal)
 
 
@@ -1563,24 +1604,28 @@
 Any other value is treated as `miter'."
   :type '(radio :tag "Non-Terminal Shape"
 		(const miter) (const round) (const bevel))
+  :version "20"
   :group 'ebnf-non-terminal)
 
 
 (defcustom ebnf-non-terminal-shadow nil
   "*Non-nil means non-terminal box will have a shadow."
   :type 'boolean
+  :version "20"
   :group 'ebnf-non-terminal)
 
 
 (defcustom ebnf-non-terminal-border-width 1.0
   "*Specify border width for non-terminal box."
   :type 'number
+  :version "20"
   :group 'ebnf-non-terminal)
 
 
 (defcustom ebnf-non-terminal-border-color "Black"
   "*Specify border color for non-terminal box."
   :type 'string
+  :version "20"
   :group 'ebnf-non-terminal)
 
 
@@ -1637,6 +1682,7 @@
 		(const full)             (const semi-up-hollow)
 		(const semi-down-hollow) (const semi-up-full)
 		(const semi-down-full)   (const user))
+  :version "20"
   :group 'ebnf-shape)
 
 
@@ -1646,6 +1692,7 @@
 See documentation for `ebnf-non-terminal-shape'."
   :type '(radio :tag "Chart Flow Shape"
 		(const miter) (const round) (const bevel))
+  :version "20"
   :group 'ebnf-shape)
 
 
@@ -1685,6 +1732,7 @@
 The variable `ebnf-user-arrow' is only used when `ebnf-arrow-shape' is set to
 symbol `user'."
   :type '(sexp :tag "User Arrow Shape")
+  :version "20"
   :group 'ebnf-shape)
 
 
@@ -1728,6 +1776,7 @@
   :type '(radio :tag "Syntax"
 		(const ebnf) (const abnf)  (const iso-ebnf)
 		(const yacc) (const ebnfx) (const dtd))
+  :version "20"
   :group 'ebnf-syntactic)
 
 
@@ -1736,6 +1785,7 @@
 
 It's used only when `ebnf-syntax' is `ebnf'."
   :type 'character
+  :version "20"
   :group 'ebnf-syntactic)
 
 
@@ -1744,6 +1794,7 @@
 
 It's used only when `ebnf-syntax' is `ebnf'."
   :type 'character
+  :version "20"
   :group 'ebnf-syntactic)
 
 
@@ -1757,6 +1808,7 @@
 It's used only when `ebnf-syntax' is `ebnf'."
   :type '(radio :tag "Terminal Name"
 		(const nil) regexp)
+  :version "20"
   :group 'ebnf-syntactic)
 
 
@@ -1766,6 +1818,7 @@
 It's only used when `ebnf-terminal-regexp' is non-nil and when `ebnf-syntax' is
 `ebnf'."
   :type 'boolean
+  :version "20"
   :group 'ebnf-syntactic)
 
 
@@ -1784,6 +1837,7 @@
       }    ==>   :)
       ;    ==>   ."
   :type 'boolean
+  :version "20"
   :group 'ebnf-syntactic)
 
 
@@ -1795,6 +1849,7 @@
 
 It's only used when `ebnf-syntax' is `iso-ebnf'."
   :type 'boolean
+  :version "20"
   :group 'ebnf-syntactic)
 
 
@@ -1803,6 +1858,7 @@
 
 See `ebnf-eps-directory' command."
   :type 'regexp
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1811,6 +1867,7 @@
 
 See `ebnf-eps-buffer' and `ebnf-eps-region' commands."
   :type 'string
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1819,6 +1876,7 @@
 
 It must be a float between 0.0 (top) and 1.0 (bottom)."
   :type 'number
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1826,6 +1884,7 @@
   "*Specify additional border width over default terminal, non-terminal or
 special."
   :type 'number
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1834,18 +1893,21 @@
 			    (fboundp 'color-instance-rgb-components)) ; XEmacs
   "*Non-nil means use color."
   :type 'boolean
+  :version "20"
   :group 'ebnf2ps)
 
 
 (defcustom ebnf-line-width 1.0
   "*Specify flow line width."
   :type 'number
+  :version "20"
   :group 'ebnf2ps)
 
 
 (defcustom ebnf-line-color "Black"
   "*Specify flow line color."
   :type 'string
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1854,6 +1916,7 @@
 
 It is intended to help PostScript programmers in debugging."
   :type 'boolean
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1869,12 +1932,14 @@
 
 when executing ebnf2ps, set `ebnf-use-float-format' to nil."
   :type 'boolean
+  :version "20"
   :group 'ebnf2ps)
 
 
 (defcustom ebnf-stop-on-error nil
   "*Non-nil means signal error and stop. Nil means signal error and continue."
   :type 'boolean
+  :version "20"
   :group 'ebnf2ps)
 
 
@@ -1883,6 +1948,7 @@
 
 It's only used when `ebnf-syntax' is `yacc'."
   :type 'boolean
+  :version "20"
   :group 'ebnf-syntactic)
 
 
@@ -1892,6 +1958,7 @@
 It's interesting to set this variable if your Yacc/Bison grammar has a lot of
 middle action rule."
   :type 'boolean
+  :version "20"
   :group 'ebnf-optimization)
 
 
@@ -1911,13 +1978,14 @@
    6.  A = B | .                ==>   A = [B].
    7.  A =   | B .              ==>   A = [B].
 
-   factoration:
+   factorization:
    8.  A = B C | B D.           ==>   A = B (C | D).
    9.  A = C B | D B.           ==>   A = (C | D) B.
    10. A = B C E | B D E.       ==>   A = B (C | D) E.
 
 The above optimizations are specially useful when `ebnf-syntax' is `yacc'."
   :type 'boolean
+  :version "20"
   :group 'ebnf-optimization)
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/progmodes/idlw-help.el	Mon Nov 22 11:06:39 2004 +0000
@@ -0,0 +1,1178 @@
+;;; idlw-help.el --- HTML Help code for IDLWAVE
+;; Copyright (c) 2000 Carsten Dominik
+;; Copyright (c) 2001, 2002 J.D. Smith
+;; Copyright (c) 2003,2004 Free Software Foundation
+;;
+;; Authors: J.D. Smith <jdsmith@as.arizona.edu>
+;;          Carsten Dominik <dominik@astro.uva.nl>
+;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu>
+;; Version: 5.5
+
+;; This file is part of GNU Emacs.
+
+;; This file 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.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; The help link information for IDLWAVE's online help feature for
+;; system routines is extracted automatically from the IDL
+;; documentation, and is available, along with general routine
+;; information, in the file idlw-rinfo.el.  The HTML help file
+;; themselves are not distributable with Emacs, but are available,
+;; along with new versions of IDLWAVE, documentation, and more
+;; information, at:
+;;
+;;           http://idlwave.org
+;; 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+;;; Code:
+(require 'browse-url)
+
+(defgroup idlwave-online-help nil
+  "Online Help options for IDLWAVE mode."
+  :group 'idlwave)
+
+(defcustom idlwave-html-help-pre-v6 nil
+  "Whether pre or post-v6.0 IDL help documents are being used."
+  :group 'idlwave-online-help
+  :type 'boolean)
+
+(defvar idlwave-html-link-sep 
+  (if idlwave-html-help-pre-v6 "#" "#wp"))
+
+(defcustom idlwave-html-help-location 
+  (if (memq system-type '(ms-dos windows-nt))
+      nil
+    "/usr/local/etc/")
+  "The directory where the idl_html_help/ dir or idl.chm help file
+(Windows only) lives."
+  :group 'idlwave-online-help
+  :type 'directory)
+
+(defcustom idlwave-help-use-hh nil
+  "Whether to use the HTMLHelp viewer with idl.chm (Windows only)."
+  :group 'idlwave-online-help
+  :type '(choice :tag "use help viewer"
+		 (const :tag "<none>" nil)
+		 (const :tag "hh" 'hh)
+		 (const :tag "keyhh" 'keyhh)))
+
+(defcustom idlwave-help-browser-function browse-url-browser-function
+  "Function to use to display html help.
+Defaults to `browse-url-browser-function', which see."
+  :group 'idlwave-online-help
+  :type 'function)
+
+(defcustom idlwave-help-browser-generic-program browse-url-generic-program
+  "Program to run if using browse-url-generic-program."
+  :group 'idlwave-online-help
+  :type 'string)
+
+(defcustom idlwave-help-browser-generic-args 
+  (if (boundp 'browse-url-generic-args)
+      browse-url-generic-args "")
+  "Program args to use if using browse-url-generic-program."
+  :group 'idlwave-online-help
+  :type 'string)
+
+(defcustom idlwave-help-browser-is-local nil
+  "Whether the browser will display locally in an Emacs window.
+Several browsers run and/or display inside Emacs windows, but most are
+external programs.  If the browser name contains \"-w3\", it is
+assumed to be local to Emacs.  For other local browsers, this variable
+must be explicitly set non-nil in order for the variable
+`idlwave-help-use-dedicated-frame' to function."
+  :group 'idlwave-online-help
+  :type 'boolean)
+
+(defvar idlwave-help-directory ""
+  "Obsolete variable.  See idlwave-html-help-location.")
+
+(defcustom idlwave-help-use-dedicated-frame t
+  "*Non-nil means, use a separate frame for Online Help if possible."
+  :group 'idlwave-online-help
+  :type 'boolean)
+
+(defcustom idlwave-help-frame-parameters
+  '((height . 32) (unsplittable . t))
+  "The frame parameters for the special Online Help frame.
+See also `idlwave-help-use-dedicated-frame'.
+If you do not set the frame width here, the value specified in
+`idlw-help.el' will be used."
+  :group 'idlwave-online-help
+  :type '(repeat
+	  (cons symbol sexp)))
+
+(defcustom idlwave-max-popup-menu-items 20
+  "Maximum number of items per pane in popup menus.
+Currently only used for class selection during completion help."
+  :group 'idlwave-online-help
+  :type 'integer)
+
+(defcustom idlwave-extra-help-function 'idlwave-help-with-source
+  "The function to call for online help if the normal help fails.
+Online help works only for system routines which are described in the
+IDL manuals.  A function may be specified to access help from other sources.
+
+The function must accept four arguments: NAME, TYPE, CLASS, KEYWORD.
+The Help buffer is current when this function is called, and the help
+text should be loaded into this buffer.  If help is found, the
+function should return the buffer position which should be used as
+`window-start' in the help window.  Also, the variable
+`idlwave-help-mode-line-indicator' should be set to a useful string,
+which will be displayed in the mode line of the help window.  If
+should also set the variable `idlwave-help-min-frame-width' to a
+positive integer.  IDLWAVE will ensure that the help frame is at least
+that many columns wide.  Failure to find help should be indicated by
+throwing an error.
+
+When this variable is non-nil, IDLWAVE will allow the mouse-3 help click
+for every routine and keyword, even though the item may not be highlighted
+in blue (indicating the availability of system documentation).
+
+The default value for this function is `idlwave-help-with-source' which
+loads the routine source file into the help buffer.  If you try to write
+a different function which accesses a special help file or so, it is
+probably a good idea to still call this function as a fallback."
+  :group 'idlwave-online-help
+  :type 'symbol)
+
+(defcustom idlwave-help-fontify-source-code nil
+  "*Non-nil means, fontify source code displayed as help like normal code."
+  :group 'idlwave-online-help
+  :type 'boolean)
+
+(defcustom idlwave-help-source-try-header t
+  "*Non-nil means, try to find help in routine header when displaying source.
+Routines which are not documented in the system manual use their source as
+help text.  When this variable is non-nil, we try to find a description of
+the help item in the first routine doclib header above the routine definition.
+If the variable is nil, or if we cannot find/parse the header, the routine
+definition is displayed instead."
+  :group 'idlwave-online-help
+  :type 'boolean)
+
+
+(defcustom idlwave-help-doclib-name "name"
+  "*A regexp for the heading word to search for in doclib headers
+which specifies the `name' section.  Can be used for localization
+support."
+  :group 'idlwave-online-help
+  :type 'string)
+
+(defcustom idlwave-help-doclib-keyword "KEYWORD"
+  "*A regexp for the heading word to search for in doclib headers
+which specifies the `keywords' section.  Can be used for localization
+support."
+  :group 'idlwave-online-help
+  :type 'string)
+
+(defface idlwave-help-link-face
+  '((((class color)) (:foreground "Blue"))
+    (t (:weight bold)))
+  "Face for highlighting links into IDLWAVE online help."
+  :group 'idlwave-online-help)
+
+(defvar idlwave-help-activate-links-aggressively nil
+  "Obsolete variable.")
+  
+(defvar idlwave-completion-help-info)
+
+(defvar idlwave-help-frame nil
+  "The frame for display of IDL online help.")
+(defvar idlwave-help-frame-width 102
+  "The default width of the help frame.")
+
+(defvar idlwave-html-help-is-available nil
+  "Is the system online help text avaiable?")
+
+(defvar idlwave-help-mode-line-indicator ""
+  "Used for the special mode line in the idlwave-help-mode.")
+
+(defvar idlwave-help-window-configuration nil)
+(defvar idlwave-help-special-topic-words nil) ; defined by get_rinfo
+
+;; Define the key bindings for the Help application
+
+(defvar idlwave-help-mode-map (make-sparse-keymap)
+  "The keymap used in idlwave-help-mode.")
+
+(define-key idlwave-help-mode-map "q" 'idlwave-help-quit)
+(define-key idlwave-help-mode-map "w" 'widen)
+(define-key idlwave-help-mode-map "\C-m" (lambda (arg)
+					   (interactive "p")
+					   (scroll-up arg)))
+(define-key idlwave-help-mode-map " " 'scroll-up)
+(define-key idlwave-help-mode-map [delete] 'scroll-down)
+(define-key idlwave-help-mode-map "h" 'idlwave-help-find-header)
+(define-key idlwave-help-mode-map "H" 'idlwave-help-find-first-header)
+(define-key idlwave-help-mode-map "." 'idlwave-help-toggle-header-match-and-def)
+(define-key idlwave-help-mode-map "F" 'idlwave-help-fontify)
+(define-key idlwave-help-mode-map "\M-?" 'idlwave-help-return-to-calling-frame)
+(define-key idlwave-help-mode-map "x" 'idlwave-help-return-to-calling-frame)
+
+;; Define the menu for the Help application
+
+(easy-menu-define
+  idlwave-help-menu idlwave-help-mode-map
+  "Menu for Help IDLWAVE system"
+  '("IDLHelp"
+    ["Definition <-> Help Text" idlwave-help-toggle-header-match-and-def t]
+    ["Find DocLib Header" idlwave-help-find-header t]
+    ["Find First DocLib Header" idlwave-help-find-first-header t]
+    ["Fontify help buffer" idlwave-help-fontify t]
+    "--"
+    ["Quit" idlwave-help-quit t]))
+
+(defun idlwave-help-mode ()
+  "Major mode for displaying IDL Help.
+
+This is a VIEW mode for the ASCII version of IDL Help files,
+with some extras.  Its main purpose is speed - so don't
+expect a fully hyper-linked help.
+
+Scrolling:          SPC  DEL  RET
+Text Searches:      Inside Topic: Use Emacs search functions
+Exit:               [q]uit or mouse button 3 will kill the frame
+
+When the hep text is a source file, the following commands are available
+
+Fontification:      [F]ontify the buffer like source code
+Jump:               [h] to function doclib header
+                    [H] to file doclib header
+                    [.] back and forward between header and definition
+
+Here are all keybindings.
+\\{idlwave-help-mode-map}"
+  (kill-all-local-variables)
+  (buffer-disable-undo)
+  (setq major-mode 'idlwave-help-mode
+	mode-name "IDLWAVE Help")
+  (use-local-map idlwave-help-mode-map)
+  (easy-menu-add idlwave-help-menu idlwave-help-mode-map)
+  (setq truncate-lines t)
+  (setq case-fold-search t)
+  (setq mode-line-format
+	(list ""
+	      'mode-line-modified
+	      'mode-line-buffer-identification
+	      ":  " 'idlwave-help-mode-line-indicator
+	      " -%-"))
+  (setq buffer-read-only t)
+  (set (make-local-variable 'idlwave-help-def-pos) nil)
+  (set (make-local-variable 'idlwave-help-args) nil)
+  (set (make-local-variable 'idlwave-help-in-header) nil)
+  (run-hooks 'idlwave-help-mode-hook))
+
+(defun idlwave-html-help-location ()
+  "Return the help directory where HTML files are, or nil if that is unknown."
+  (or (and (stringp idlwave-html-help-location)
+	   (> (length idlwave-html-help-location) 0)
+	   (file-directory-p idlwave-html-help-location)
+	   idlwave-html-help-location)
+      (getenv "IDLWAVE_HELP_LOCATION")
+      (and (memq system-type '(ms-dos windows-nt)) ; Base it on sysdir
+	   idlwave-help-use-hh
+	   (stringp idlwave-system-directory)
+	   (> (length idlwave-system-directory) 0)
+	   (file-directory-p idlwave-system-directory)
+	   (expand-file-name "HELP" idlwave-system-directory))))
+
+(defvar idlwave-current-obj_new-class)
+(defvar idlwave-help-diagnostics)
+(defvar idlwave-experimental)
+(defvar idlwave-last-context-help-pos)
+(defun idlwave-do-context-help (&optional arg)
+  "Wrapper around the call to idlwave-context-help1.
+It collects and prints the diagnostics messages."
+  (let ((marker (list (current-buffer) (point)))
+	(idlwave-help-diagnostics nil))
+    ;; Check for frame switching.  When the command is invoked twice
+    ;; at the same position, we try to switch to the help frame
+    ;; FIXME:  Frame switching works only on XEmacs
+    (if (and idlwave-experimental
+	     (equal last-command this-command)
+	     (equal idlwave-last-context-help-pos marker))
+	(idlwave-help-select-help-frame)
+      ;; Do the real thing.
+      (setq idlwave-last-context-help-pos marker)
+      (idlwave-do-context-help1 arg)
+      (if idlwave-help-diagnostics
+	  (message "%s" (mapconcat 'identity 
+				   (nreverse idlwave-help-diagnostics)
+				   "; "))))))
+
+(defvar idlwave-help-do-class-struct-tag nil)
+(defvar idlwave-help-do-struct-tag nil)
+(defun idlwave-do-context-help1 (&optional arg)
+  "The work-horse version of `idlwave-context-help', which see."
+  (save-excursion
+    (if (equal (char-after) ?/) 
+	(forward-char 1)
+      (if (equal (char-before) ?=)
+	  (backward-char 1)))
+    (let* ((idlwave-query-class nil)
+	   (idlwave-force-class-query (equal arg '(4)))
+	   (chars "a-zA-Z0-9_$.!")
+	   (beg (save-excursion (skip-chars-backward chars) (point)))
+	   (end (save-excursion (skip-chars-forward chars) (point)))
+	   (this-word (buffer-substring-no-properties beg end))
+	   (st-ass (assoc (downcase this-word) 
+			  idlwave-help-special-topic-words))
+	   (classtag (and (string-match "self\\." this-word)
+			  (< beg (- end 4))))
+	   (structtag (and (fboundp 'idlwave-complete-structure-tag)
+			   (string-match "\\`\\([^.]+\\)\\." this-word)
+			   (< beg (- end 4))))
+	   module keyword cw mod1 mod2 mod3)
+      (if (or arg 
+	      (and (not st-ass)
+		   (not classtag)
+		   (not structtag)
+		   (not (member (string-to-char this-word) '(?! ?.)))))
+	  ;; Need the module information
+	  (progn
+	    ;; MODULE is (name type class), for this or any inheriting class
+	    (setq module (idlwave-what-module-find-class)
+		  cw (nth 2 (idlwave-where))) ;what would we complete here?
+	    ;; Correct for OBJ_NEW, we may need an INIT method instead.
+	    (if (equal (idlwave-downcase-safe (car module)) "obj_new")
+		(let* ((bos (save-excursion (idlwave-beginning-of-statement)
+					    (point)))
+		       (str (buffer-substring bos (point))))
+		  (if (string-match "OBJ_NEW([ \t]*['\"]\\([a-zA-Z][a-zA-Z0-9$_]+\\)['\"]" str)
+		      (setq module (list "init" 'fun (match-string 1 str))
+			    idlwave-current-obj_new-class (match-string 1 str))
+		    )))))
+      (cond 
+       (arg (setq mod1 module))
+       
+       ;; A special topic -- only system help
+       (st-ass (setq mod1 (list (cdr st-ass))))
+       
+       ;; A system variable -- only system help
+       ((string-match 
+	 "\\`!\\([a-zA-Z0-9_]+\\)\\(\.\\([A-Za-z0-9_]+\\)\\)?" 
+	 this-word)
+	(let* ((word  (match-string-no-properties 1 this-word))
+	       (entry (assq (idlwave-sintern-sysvar word)
+			    idlwave-system-variables-alist))
+	       (tag (match-string-no-properties 3 this-word))
+	       (tag-target (if tag
+			       (cdr
+				(assq (idlwave-sintern-sysvartag tag)
+				      (cdr (assq 'tags entry))))))
+	       (link (nth 1 (assq 'link entry))))
+	  (if tag-target
+	      (setq link (idlwave-substitute-link-target link 
+							 tag-target)))
+	  (setq mod1 (list link))))
+			  
+       ;; An executive command -- only system help
+       ((string-match "^\\.\\([A-Z_]+\\)" this-word)
+	(let* ((word  (match-string 1 this-word))
+	       (link  (cdr (assoc-ignore-case 
+			    word
+			    idlwave-executive-commands-alist))))
+	  (setq mod1 (list link))))
+       
+       ;; A class -- system OR in-text help (via class__define).
+       ((and (eq cw 'class)
+	     (or (idlwave-in-quote)  ; e.g. obj_new
+		 (re-search-backward "\\<inherits[ \t]+[A-Za-z0-9_]*\\="
+				     (max (point-min) (- (point) 40)) t)))
+	;; Class completion inside string delimiters must be
+	;; the class inside OBJ_NEW.
+	(let* ((entry  (assq
+			(idlwave-sintern-class this-word)
+			idlwave-system-class-info))
+	       (name   (concat (downcase this-word) "__define"))
+	       (link   (nth 1 (assq 'link entry))))
+	  (setq mod1 (list link name 'pro))))
+       
+       ;; A class structure tag (self.BLAH) -- only in-text help available
+       (classtag
+	(let ((tag (substring this-word (match-end 0)))
+	      class-with found-in)
+	  (when (setq class-with 
+		      (idlwave-class-or-superclass-with-tag
+		       (nth 2 (idlwave-current-routine))
+		       tag))
+	    (setq found-in (idlwave-class-found-in class-with))
+	    (if (assq (idlwave-sintern-class class-with) 
+		      idlwave-system-class-info)
+		(error "No help available for system class tags"))
+	    (setq idlwave-help-do-class-struct-tag t)
+	    (setq mod1 (list nil 
+			     (if found-in
+				 (cons (concat found-in "__define") class-with)
+			       (concat class-with "__define"))
+			     'pro
+			     nil ; no class.... it's a procedure!
+			     tag)))))
+       
+       ;; A regular structure tag -- only in text, and if
+       ;; optional `complete-structtag' loaded.
+       (structtag
+	(let ((var (match-string 1 this-word))
+	      (tag (substring this-word (match-end 0))))
+	  ;; Check if we need to update the "current" structure
+	  (idlwave-prepare-structure-tag-completion var)
+	  (setq idlwave-help-do-struct-tag
+		idlwave-structtag-struct-location
+		mod1 (list nil nil nil nil tag))))
+       
+       ;; A routine keyword -- in text or system help
+       ((and (memq cw '(function-keyword procedure-keyword))
+	     (stringp this-word)
+	     (string-match "\\S-" this-word)
+	     (not (string-match "!" this-word)))
+	(cond ((or (= (char-before beg) ?/)
+		   (save-excursion (goto-char end)
+				   (looking-at "[ \t]*=")))
+	       ;; Certainly a keyword. Check for abbreviation etc.
+	       (setq keyword (idlwave-expand-keyword this-word module))
+	       (cond
+		((null keyword)
+		 (idlwave-help-diagnostics
+		  (format "%s does not accept `%s' kwd"
+			  (idlwave-make-full-name (nth 2 module)
+						  (car module))
+			  (upcase this-word))
+		  'ding))
+		((consp keyword)
+		 (idlwave-help-diagnostics
+		  (format "%d matches for kwd abbrev `%s'"
+			  (length keyword) this-word)
+		  'ding)
+		 ;; We continue anyway with the first match...
+		 (setq keyword (car keyword))))
+	       ;; Keyword, or just module
+	       (setq mod1 (append (list t) module (list keyword)))
+	       (setq mod2 (append (list t) module)))
+	      ((equal (char-after end) ?\()
+	       ;; A function - what-module will have caught this
+	       (setq mod1 (append (list t) module)))
+	      (t
+	       ;; undecided - try function, keyword, then enclosing mod.
+	       ;; Check for keyword abbreviations, but do not report
+	       ;; errors, because it might be something else.
+	       ;; FIXME: is this a good way to handle this?
+	       (setq keyword (idlwave-expand-keyword this-word module))
+	       (if (consp keyword) (setq keyword (car keyword)))
+	       (setq mod1 (append (list t) module (list keyword))
+		     mod2 (list t this-word 'fun nil)
+		     mod3 (append (list t) module)))))
+       
+       ;; Everything else
+       (t
+	(setq mod1 (append (list t) module))))
+      (if mod3
+	  (condition-case nil
+	      (apply 'idlwave-online-help mod1)
+	    (error (condition-case nil
+		       (apply 'idlwave-online-help mod2)
+		     (error (apply 'idlwave-online-help mod3)))))
+	(if mod2
+	    (condition-case nil
+		(apply 'idlwave-online-help mod1)
+	      (error (apply 'idlwave-online-help mod2)))
+	  (if mod1
+	      (apply 'idlwave-online-help mod1)
+	    (error "Don't know which item to show help for")))))))
+
+(defun idlwave-do-mouse-completion-help (ev)
+  "Display online help on an item in the *Completions* buffer.
+Needs additional info stored in global `idlwave-completion-help-info'."
+  (let* ((cw (selected-window))
+	 (info idlwave-completion-help-info) ; global passed in
+	 (what (nth 0 info))
+	 (name (nth 1 info))
+	 (type (nth 2 info))
+	 (class (nth 3 info))
+	 (need-class class)
+	 (kwd (nth 4 info))
+	 (sclasses (nth 5 info))
+	 word link)
+    (mouse-set-point ev)
+
+	  
+    ;; See if we can also find help somewhere, e.g. for multiple classes
+    (setq word (idlwave-this-word))
+    (if (string= word "")
+	(error "No help item selected"))
+    (setq link (get-text-property 0 'link word))
+    (select-window cw)
+    (cond 
+     ;; Routine name
+     ((memq what '(procedure function routine))
+      (setq name word)
+      (if (or (eq class t)
+	      (and (stringp class) sclasses))
+	  (let* ((classes (idlwave-all-method-classes
+			   (idlwave-sintern-method name)
+			   type)))
+	    (setq link t)		; No specific link valid yet
+	    (if sclasses
+		(setq classes (idlwave-members-only 
+			       classes (cons class sclasses))))
+	    (setq class (idlwave-popup-select ev classes 
+					      "Select Class" 'sort))))
+
+      ;; XXX is this necessary, given all-method-classes?
+      (if (stringp class)
+	  (setq class (idlwave-find-inherited-class
+		       (idlwave-sintern-routine-or-method name class)
+		       type (idlwave-sintern-class class)))))
+
+     ;; Keyword
+     ((eq what 'keyword)
+      (setq kwd word)
+      (if (or (eq class t)
+	      (and (stringp class) sclasses))
+	  (let ((classes  (idlwave-all-method-keyword-classes
+			   (idlwave-sintern-method name)
+			   (idlwave-sintern-keyword kwd)
+			   type)))
+	    (setq link t) ; Link can't be correct yet
+	    (if sclasses
+		(setq classes (idlwave-members-only 
+			       classes (cons class sclasses))))
+	    (setq class (idlwave-popup-select ev classes
+					      "Select Class" 'sort))
+	    ;; XXX is this necessary, given all-method-keyword-classes?
+	    (if (stringp class)
+		(setq class (idlwave-find-inherited-class
+			     (idlwave-sintern-routine-or-method name class)
+			     type (idlwave-sintern-class class)))))
+	(if (string= (downcase name) "obj_new")
+	    (setq class idlwave-current-obj_new-class
+		  name "Init"))))
+	  
+     ;; Class name
+     ((eq what 'class)
+      (setq class word
+	    word nil))
+     
+     ;; A special named function to call which sets some of our variables
+     ((and (symbolp what) 
+	   (fboundp what))
+      (funcall what 'set word))
+
+     (t (error "Cannot help with this item")))
+    (if (and need-class (not class) (not (and link (not (eq link t)))))
+	(error "Cannot help with this item"))
+    (idlwave-online-help link (or name word) type class kwd)))
+
+(defvar idlwave-highlight-help-links-in-completion)
+(defvar idlwave-completion-help-links)
+(defun idlwave-highlight-linked-completions ()
+  "Highlight all completions for which help is available and attach link.
+Those words in `idlwave-completion-help-links' have links.  The
+`idlwave-help-link-face' face is used for this."
+  (if idlwave-highlight-help-links-in-completion      
+      (with-current-buffer (get-buffer "*Completions*")
+	(save-excursion
+	  (let* ((case-fold-search t)
+		 (props (list 'face 'idlwave-help-link-face))
+		 (info idlwave-completion-help-info) ; global passed in
+		 (what (nth 0 info))  ; what was completed, or a func
+		 (class (nth 3 info)) ; any class
+		 word beg end doit)
+	    (goto-char (point-min))
+	    (re-search-forward "possible completions are:" nil t)
+	    (while (re-search-forward "\\s-\\([A-Za-z0-9_.]+\\)\\(\\s-\\|\\'\\)"
+				      nil t)
+	      (setq beg (match-beginning 1) end (match-end 1)
+		    word (match-string 1) doit nil)
+	      ;; Call special completion function test
+	      (if (and (symbolp what) 
+		       (fboundp what))
+		  (setq doit (funcall what 'test word))
+		;; Look for special link property passed in help-links
+		(if idlwave-completion-help-links
+		    (setq doit (assoc-ignore-case 
+				word idlwave-completion-help-links))))
+	      (when doit
+		(if (consp doit)
+		    (setq props (append props `(link ,(cdr doit)))))
+		(let ((buffer-read-only nil))
+		  (add-text-properties beg end props)))
+	      (goto-char end)))))))
+
+;; Arrange for this function to be called after completion
+(add-hook 'idlwave-completion-setup-hook
+	  'idlwave-highlight-linked-completions)
+
+(defvar idlwave-help-return-frame nil
+  "The frame to return to from the help frame.")
+
+(defun idlwave-help-quit ()
+  "Exit IDLWAVE Help buffer.  Kill the dedicated frame if any."
+  (interactive)
+  (cond ((and idlwave-help-use-dedicated-frame
+	      (eq (selected-frame) idlwave-help-frame))
+	 (if (and idlwave-experimental
+		  (frame-live-p idlwave-help-return-frame))
+	     ;; Try to select the return frame.
+	     ;; This can crash on slow network connections, obviously when
+	     ;; we kill the help frame before the return-frame is selected.
+	     ;; To protect the workings, we wait for up to one second 
+	     ;; and check if the return-frame *is* now selected.
+	     ;; This is marked "eperimental" since we are not sure when its OK.
+	     (let ((maxtime 1.0) (time 0.) (step 0.1))
+	       (select-frame idlwave-help-return-frame)
+	       (while (and (sit-for step)
+			   (not (eq (selected-frame) 
+				    idlwave-help-return-frame))
+			   (< (setq time (+ time step)) maxtime)))))
+	 (delete-frame idlwave-help-frame))
+	((window-configuration-p idlwave-help-window-configuration)
+	 (set-window-configuration idlwave-help-window-configuration)
+	 (select-window (previous-window)))
+	(t (kill-buffer (idlwave-help-get-help-buffer)))))
+
+
+(defvar default-toolbar-visible-p)
+
+(defun idlwave-help-display-help-window (&optional pos-or-func)
+  "Display the help window.  
+Move window start to POS-OR-FUNC, if passed as a position, or call it
+if passed as a function.  See `idlwave-help-use-dedicated-frame'."
+  (let ((cw (selected-window))
+	(buf (idlwave-help-get-help-buffer)))
+    (if (and window-system idlwave-help-use-dedicated-frame)
+	(progn
+	  (idlwave-help-show-help-frame)
+	  (switch-to-buffer buf))
+      ;; Do it in this frame and save the window configuration
+      (if (not (get-buffer-window buf nil))
+	  (setq idlwave-help-window-configuration 
+		(current-window-configuration)))
+      (display-buffer buf nil (selected-frame))
+      (select-window (get-buffer-window buf)))
+    (raise-frame)
+    (if pos-or-func 
+	(if (functionp pos-or-func) 
+	    (funcall pos-or-func)
+	  (goto-char pos-or-func)
+	  (recenter 0)))
+    (select-window cw)))
+
+(defun idlwave-help-select-help-frame ()
+  "Select the help frame."
+  (if (and (frame-live-p idlwave-help-frame)
+	   (not (eq (selected-frame) idlwave-help-frame)))
+      (progn
+	(setq idlwave-help-return-frame (selected-frame))
+	(select-frame idlwave-help-frame))))
+
+(defun idlwave-help-return-to-calling-frame ()
+  "Select the frame from which the help frame was selected."
+  (interactive)
+  (if (and (frame-live-p idlwave-help-return-frame)
+	   (not (eq (selected-frame) idlwave-help-return-frame)))
+      (select-frame idlwave-help-return-frame)))
+
+(defun idlwave-online-help (link &optional name type class keyword)
+  "Display HTML or other special help on a certain topic.  
+Either loads an HTML link, if LINK is non-nil, or gets special-help on
+the optional arguments, if any special help is defined.  If LINK is
+`t', first look up the optional arguments in the routine info list to
+see if a link is set for it.  Try extra help functions if necessary."
+  ;; Lookup link
+  (if (eq link t) 
+      (let ((entry (idlwave-best-rinfo-assoc name type class 
+					     (idlwave-routines) nil t)))
+	(cond
+	 ;; Try keyword link
+	 ((and keyword 
+	       (setq link (cdr (idlwave-entry-find-keyword entry keyword)))))
+	 ;; Default, regular entry link
+	 (t (setq link (idlwave-entry-has-help entry))))))
+
+  (cond
+   ;; An explicit link
+   ((stringp link) 
+    (idlwave-help-html-link link))
+   
+   ;; Any extra help
+   (idlwave-extra-help-function
+    (idlwave-help-get-special-help name type class keyword))
+   
+   ;; Nothing worked
+   (t (idlwave-help-error name type class keyword))))
+
+
+(defun idlwave-help-get-special-help (name type class keyword)
+  "Call the function given by `idlwave-extra-help-function'."
+  (let* ((cw (selected-window))
+	 (help-pos (save-excursion
+		     (set-buffer (idlwave-help-get-help-buffer))
+		     (let ((buffer-read-only nil))
+		       (funcall idlwave-extra-help-function 
+				name type class keyword)))))
+    (if help-pos
+	(idlwave-help-display-help-window help-pos)
+      (idlwave-help-error name type class keyword))
+    (select-window cw)))
+
+(defun idlwave-help-html-link (link)
+  "Get html help on a given LINK."
+  (let ((browse-url-browser-function idlwave-help-browser-function)
+	(help-loc (idlwave-html-help-location))
+	(browse-url-generic-program idlwave-help-browser-generic-program)
+	;(browse-url-generic-args idlwave-help-browser-generic-args)
+	full-link)
+    
+    (if (and (memq system-type '(ms-dos windows-nt))
+	     idlwave-help-use-hh)
+	(progn
+	  (setq browse-url-browser-function 'browse-url-generic
+		full-link (concat (expand-file-name "idl.chm" help-loc)
+				  "::/"
+				  link))
+	  (if (memq 'keyhh idlwave-help-use-hh)
+	      (setq browse-url-generic-program "KEYHH"
+		    browse-url-generic-args '("-IDLWAVE"))
+	    (setq browse-url-generic-program "HH")))
+      ;; Just a regular file name (+ anchor name)
+      (unless (and (stringp help-loc)
+		   (file-directory-p help-loc))
+	(error 
+	 "Invalid help location; customize `idlwave-html-help-location'."))
+      (setq full-link (concat 
+		       "file://"
+		       (expand-file-name 
+			link 
+			(expand-file-name "idl_html_help" help-loc)))))
+
+    ;; Check for a local browser
+    (if (or idlwave-help-browser-is-local
+	    (string-match "w3" (symbol-name idlwave-help-browser-function)))
+	(idlwave-help-display-help-window '(lambda () (browse-url full-link)))
+      (browse-url full-link))))
+
+;; A special help routine for source-level syntax help in files.
+(defvar idlwave-help-def-pos)
+(defvar idlwave-help-args)
+(defvar idlwave-help-in-header)
+(defvar idlwave-help-fontify-source-code)
+(defvar idlwave-help-source-try-header)
+(defun idlwave-help-with-source (name type class keyword)
+  "Provide help for routines not documented in the IDL manuals.  Works
+by loading the routine source file into the help buffer.  Depending on
+the value of `idlwave-help-source-try-header', it attempts to show the
+routine definition or the header description.  If
+`idlwave-help-do-class-struct-tag' is non-nil, keyword is a tag to
+show help on from the class definition structure.  If
+`idlwave-help-do-struct-tag' is non-nil, show help from the matching
+structure tag definition.
+
+This function can be used as `idlwave-extra-help-function'."
+  (let* ((class-struct-tag idlwave-help-do-class-struct-tag)
+	 (struct-tag idlwave-help-do-struct-tag)
+	 (case-fold-search t)
+	 (real-class (if (consp name) (cdr name)))
+	 (name (if (consp name) (car name) name))
+	 (class-only (and (stringp class) (not (stringp name))))
+	 file header-pos def-pos in-buf)
+    (if class-only   ;Help with class?  Using "Init" as source.
+	(setq name "Init"
+	      type 'fun))
+    (if (not struct-tag) 
+	(setq file
+	      (idlwave-routine-source-file
+	       (nth 3 (idlwave-best-rinfo-assoc
+		       name (or type t) class (idlwave-routines))))))
+    (setq idlwave-help-def-pos nil
+	  idlwave-help-args (list name type class keyword)
+	  idlwave-help-in-header nil
+	  idlwave-help-do-struct-tag nil
+	  idlwave-help-do-class-struct-tag nil)
+    (if (or struct-tag (stringp file))
+	(progn
+	  (setq in-buf ; structure-tag completion is always in current buffer
+		(if struct-tag 
+		    idlwave-current-tags-buffer
+		  (idlwave-get-buffer-visiting file)))
+	  ;; see if file is in a visited buffer, insert those contents
+	  (if in-buf
+	      (progn
+		(setq file (buffer-file-name in-buf))
+		(erase-buffer)
+		(insert-buffer in-buf))
+	    (if (file-exists-p file) ;; otherwise just load the file
+		(progn
+		  (erase-buffer)
+		  (insert-file-contents file nil nil nil 'replace))
+	      (idlwave-help-error name type class keyword)))
+	  (if (and idlwave-help-fontify-source-code (not in-buf))
+	      (idlwave-help-fontify)))
+      (idlwave-help-error name type class keyword))
+    (setq idlwave-help-mode-line-indicator file)
+
+    ;; Try to find a good place to display
+    (setq def-pos
+	  ;; Find the class structure tag if that's what we're after
+	  (cond 
+	   ;; Class structure tags: find the class or named structure
+	   ;; definition
+	   (class-struct-tag
+	    (save-excursion 
+	      (setq class
+		    (if (string-match "[a-zA-Z0-9]\\(__\\)" name) 
+			(substring name 0 (match-beginning 1))
+		      idlwave-current-tags-class))
+	      (and
+	       (idlwave-find-class-definition class nil real-class)
+	       (idlwave-find-struct-tag keyword))))
+	   
+	   ;; Generic structure tags: the structure definition
+	   ;; location within the file has been recorded in
+	   ;; `struct-tag'
+	   (struct-tag
+	    (save-excursion
+	      (and
+	       (integerp struct-tag)
+	       (goto-char struct-tag)
+	       (idlwave-find-struct-tag keyword))))
+	   
+	   ;; Just find the routine definition
+	   (t
+	    (if class-only (point-min)
+	      (idlwave-help-find-routine-definition name type class keyword))))
+	  idlwave-help-def-pos def-pos)
+
+    (if (and idlwave-help-source-try-header 
+	     (not (or struct-tag class-struct-tag)))
+	;; Check if we can find the header
+	(save-excursion
+	  (goto-char (or def-pos (point-max)))
+	  (setq header-pos (idlwave-help-find-in-doc-header
+			    name type class keyword 'exact)
+		idlwave-help-in-header header-pos)))
+
+    (if (or header-pos def-pos)
+	(progn 
+	  (if (boundp 'idlwave-help-min-frame-width)
+	      (setq idlwave-help-min-frame-width 80))
+	  (goto-char (or header-pos def-pos)))
+      (idlwave-help-error name type class keyword))
+
+    (point)))
+
+
+(defun idlwave-help-find-routine-definition (name type class keyword)
+  "Find the definition of routine CLASS::NAME in current buffer.
+KEYWORD is ignored. Returns the point of match if successful, nil otherwise."
+  (save-excursion
+    (goto-char (point-max))
+    (if (re-search-backward 
+	 (concat "^[ \t]*"
+		 (if (eq type 'pro) "pro"
+		   (if (eq type 'fun) "function"
+		     "\\(pro\\|function\\)"))
+		 "[ \t]+"
+		 (regexp-quote (downcase (idlwave-make-full-name class name)))
+		 "[, \t\r\n]")
+	 nil t)
+	(match-beginning 0)
+      nil)))
+
+(defvar idlwave-doclib-start)
+(defvar idlwave-doclib-end)
+(defun idlwave-help-find-in-doc-header (name type class keyword
+					     &optional exact)
+  "Find the requested help in the doc-header above point.
+
+First checks if there is a doc-lib header which describes the correct
+routine.  Then tries to find the KEYWORDS section and the KEYWORD, if
+given.  Returns the point which should be window start of the help
+window.  If EXACT is non-nil, the full help position must be found -
+down to the keyword requested.  This setting is for context help, if
+the exact spot is needed.
+
+If EXACT is nil, the position of the header is returned if it
+describes the correct routine - even if the keyword description cannot
+be found.  TYPE is ignored.
+
+This function expects a more or less standard routine header.  In
+particlar it looks for the `NAME:' tag, either with a colon, or alone
+on a line.  Then `NAME:' must be followed by the routine name on the
+same or the next line.  When KEYWORD is non-nil, looks first for a
+`KEYWORDS' section.  It is amazing how inconsisten this is through
+some IDL libraries I have seen.  We settle for a line containing an
+upper case \"KEYWORD\" string.  If this line is not fould we search
+for the keyword anyway to increase the hit-rate
+
+When one of these sections exists we check for a line starting with any of
+
+  /KEYWORD  KEYWORD-  KEYWORD=  KEYWORD
+
+with spaces allowed between the keyword and the following dash or equal sign.
+If there is a match, we assume it is the keyword description."
+  (let* ((case-fold-search t)
+	 (rname (if (stringp class)
+		    (concat 
+		     "\\("
+		     ;; Traditional name or class::name
+		     "\\("
+		     "\\(" (regexp-quote (downcase class)) "::\\)?"
+		     (regexp-quote (downcase name))
+		     "\\>\\)"
+		     (concat 
+		      "\\|"
+		      ;; class__define or just class
+		      (regexp-quote (downcase class)) "\\(__define\\)?")
+		     "\\)")
+		  (regexp-quote (downcase name))))
+	 
+	 ;; NAME tag plus the routine name.  The new version is from JD.
+	 (name-re (concat 
+		   "\\(^;+\\*?[ \t]*"
+		   idlwave-help-doclib-name
+		   "\\([ \t]*:\\|[ \t]*$\\)[ \t]*\\(\n;+[ \t]*\\)*"
+		   rname
+		   "\\|"
+		   "^;+[ \t]*"
+		   rname
+		   ":[ \t]*$\\)"))
+
+	 ;; Header start plus name
+	 (header-re (concat "\\(" idlwave-doclib-start "\\).*\n"
+			    "\\(^;+.*\n\\)*"
+			    "\\(" name-re "\\)"))
+	 ;; A keywords section
+	 (kwds-re (concat		                    ; forgiving
+		   "^;+\\*?[ \t]*"
+		   "\\([-A-Z_ ]*"
+		   idlwave-help-doclib-keyword
+		   "[-A-Z_ ]*\\)"
+		   "\\(:\\|[ \t]*\n\\)"))
+
+	 ;; The individual keyword description line.
+	 (kwd-re (if keyword                                ; hard (well...)
+		     (concat
+		      "^;+[ \t]+"
+		      "\\(/" (regexp-quote (upcase keyword))
+		      "\\|"  (regexp-quote (upcase keyword)) "[ \t]*[-=:\n]"
+		      "\\)")))
+	 (kwd-re2 (if keyword                               ; forgiving
+		      (concat
+		       "^;+[ \t]+"
+		       (regexp-quote (upcase keyword))
+		      "\\>")))
+	 dstart dend name-pos kwds-pos kwd-pos)
+    (catch 'exit 
+      (save-excursion
+	(goto-char (point-min))
+	(while (and (setq dstart (re-search-forward idlwave-doclib-start nil t))
+		    (setq dend (re-search-forward idlwave-doclib-end nil t)))
+	  ;; found a routine header
+	  (goto-char dstart)
+	  (if (setq name-pos (re-search-forward name-re dend t))
+	      (progn 
+		(if keyword
+		    ;; We do need a keyword
+		    (progn
+		      ;; Try to find a keyword section, but don't force it.
+		      (goto-char name-pos)
+		      (if (let ((case-fold-search nil))
+			    (re-search-forward kwds-re dend t))
+			  (setq kwds-pos (match-beginning 0)))
+		      ;; Find the keyword description
+		      (if (or (let ((case-fold-search nil))
+				(re-search-forward kwd-re dend t))
+			      (re-search-forward kwd-re dend t)
+			      (let ((case-fold-search nil))
+				(re-search-forward kwd-re2 dend t))
+			      (re-search-forward kwd-re2 dend t))
+			  (setq kwd-pos (match-beginning 0))
+			(if exact
+			    (progn
+			      (idlwave-help-diagnostics
+			       (format "Could not find description of kwd %s"
+				       (upcase keyword)))
+			      (throw 'exit nil))))))
+		;; Return the best position we got
+		(throw 'exit (or kwd-pos kwds-pos name-pos dstart)))
+	    (goto-char dend))))
+      (idlwave-help-diagnostics "Could not find doclib header")
+      (throw 'exit nil))))
+
+(defun idlwave-help-diagnostics (string &optional ding)
+  "Add a diagnostics string to the list.
+When DING is non-nil, ring the bell as well."
+  (if (boundp 'idlwave-help-diagnostics)
+      (progn
+	(setq idlwave-help-diagnostics
+	      (cons string idlwave-help-diagnostics))
+	(if ding (ding)))))
+
+(defun idlwave-help-toggle-header-top-and-def (arg)
+  (interactive "P")
+  (let (pos)
+    (if idlwave-help-in-header
+	;; Header was the last thing displayed
+	(progn
+	  (setq idlwave-help-in-header nil)
+	  (setq pos idlwave-help-def-pos))
+      ;; Try to display header
+      (setq pos (idlwave-help-find-in-doc-header
+		 (nth 0 idlwave-help-args)
+		 (nth 1 idlwave-help-args)
+		 (nth 2 idlwave-help-args)
+		 nil))
+      (if pos
+	  (setq idlwave-help-in-header t)
+	(error "Cannot find doclib header for routine %s"
+	       (idlwave-make-full-name (nth 2 idlwave-help-args)
+				       (nth 0 idlwave-help-args)))))
+    (if pos
+	(progn
+	  (goto-char pos)
+	  (recenter 0)))))
+
+(defun idlwave-help-find-first-header (arg)
+  (interactive "P")
+  (let (pos)
+    (save-excursion
+      (goto-char (point-min))
+      (if (re-search-forward idlwave-doclib-start nil t)
+	  (setq pos (match-beginning 0))))
+    (if pos
+	(progn
+	  (goto-char pos)
+	  (recenter 0))
+      (error "No DocLib Header in current file"))))
+
+(defun idlwave-help-find-header (arg)
+  "Jump to the DocLib Header."
+  (interactive "P")
+  (if arg
+      (idlwave-help-find-first-header nil)
+    (setq idlwave-help-in-header nil)
+    (idlwave-help-toggle-header-match-and-def arg 'top)))
+  
+(defun idlwave-help-toggle-header-match-and-def (arg &optional top)
+  (interactive "P")
+  (let ((args idlwave-help-args)
+	pos)
+    (if idlwave-help-in-header
+	;; Header was the last thing displayed
+	(progn
+	  (setq idlwave-help-in-header nil)
+	  (setq pos idlwave-help-def-pos))
+      ;; Try to display header
+      (setq pos (apply 'idlwave-help-find-in-doc-header
+		       (if top 
+			   (list (car args) (nth 1 args) (nth 2 args) nil)
+			 args)))
+      (if pos
+	  (setq idlwave-help-in-header t)
+	(error "Cannot find doclib header for routine %s"
+	       (idlwave-make-full-name (nth 2 idlwave-help-args)
+				       (nth 0 idlwave-help-args)))))
+    (if pos
+	(progn
+	  (goto-char pos)
+	  (recenter 0)))))
+
+(defvar font-lock-verbose)
+(defvar idlwave-mode-syntax-table)
+(defvar idlwave-font-lock-defaults)
+(defun idlwave-help-fontify ()
+  "Fontify the Help buffer as source code.
+Useful when source code is displayed as help.  See the option
+`idlwave-help-fontify-source-code'."
+  (interactive)
+  (if (featurep 'font-lock)
+      (let ((major-mode 'idlwave-mode)
+	    (font-lock-verbose
+	     (if (interactive-p) font-lock-verbose nil))
+	    (syntax-table (syntax-table)))
+	(unwind-protect
+	    (progn
+	      (set-syntax-table idlwave-mode-syntax-table)
+	      (set (make-local-variable 'font-lock-defaults)
+		   idlwave-font-lock-defaults)
+	      (font-lock-fontify-buffer))
+	  (set-syntax-table syntax-table)))))
+
+      
+(defun idlwave-help-error (name type class keyword)
+  (error "Can't find help on %s%s %s"
+	 (or (and (or class name) (idlwave-make-full-name class name))
+	     "<unknown>")
+	 (if keyword (format ", keyword %s" (upcase keyword)) "")
+	 (if idlwave-html-help-location
+	     ""
+	   "(help location unknown)")))
+
+(defun idlwave-help-show-help-frame ()
+  "Show the help frame, creating it if necessary"
+  ;; Use a special frame for this
+  (unless (frame-live-p idlwave-help-frame)
+    (setq idlwave-help-frame
+	  (make-frame idlwave-help-frame-parameters))
+    ;; Strip menubar (?) and toolbar from the Help frame.
+    (if (fboundp 'set-specifier)
+	(progn
+	  ;; XEmacs
+	  (let ((sval (cons idlwave-help-frame nil)))
+	    ;; (set-specifier menubar-visible-p sval)
+	    (set-specifier default-toolbar-visible-p sval)))
+      ;; Emacs
+      (modify-frame-parameters idlwave-help-frame
+			       '(;;(menu-bar-lines . 0)
+				 (tool-bar-lines . 0)))))
+  (select-frame idlwave-help-frame))
+
+(defun idlwave-help-get-help-buffer ()
+  "Return the IDLWAVE Help buffer.  Make it first if necessary."
+  (let ((buf (get-buffer "*IDLWAVE Help*")))
+    (if buf
+	nil
+      (setq buf (get-buffer-create "*IDLWAVE Help*"))
+      (save-excursion
+	(set-buffer buf)
+	(idlwave-help-mode)))
+    buf))
+
+(defun idlwave-grep (regexp list)
+  (let (rtn)
+    (while list
+      (if (string-match regexp (car list))
+	  (setq rtn (cons (car list) rtn)))
+      (setq list (cdr list)))
+    (nreverse rtn)))
+
+(defun idlwave-entry-has-help (entry)
+  (and entry (car (nth 5 entry))))
+
+(defun idlwave-has-help (name type class)
+  "Does this have help associated with it?"
+  (let ((entry (idlwave-best-rinfo-assoc name type class (idlwave-routines))))
+    (idlwave-entry-has-help entry)))
+
+(provide 'idlw-help)
+(provide 'idlwave-help)
+
+;; arch-tag: d27b5505-59de-497f-ba3f-f199fd4fb911
+;;; idlw-help.el ends here
--- a/lisp/progmodes/idlw-rinfo.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/progmodes/idlw-rinfo.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1,10 +1,9 @@
 ;;; idlw-rinfo.el --- Routine Information for IDLWAVE
 ;; Copyright (c) 1999 Carsten Dominik
-;; Copyright (c) 1999, 2000, 2001, 2002 Free Software Foundation
+;; Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation
 
-;; Author: Carsten Dominik <dominik@astro.uva.nl>
-;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu>
-;; Version: 4.15
+;; Author: J.D. Smith <jdsmith@as.arizona.edu>
+;; Version: 5.5
 ;; Keywords: languages
 
 ;; This file is part of GNU Emacs.
@@ -31,1509 +30,2039 @@
 ;; information is extracted automatically from the IDL documentation
 ;; and by talking to IDL.
 ;;
-;; Created by get_rinfo on Tue Sep 10 09:15:48 2002
-;; IDL version: 5.5
-;; Number of files scanned:  6
-;;       943 syntax entries in file refguide.txt
-;;       327 syntax entries in file sdf.txt
-;;         0 syntax entries in file datamine.txt
-;;         6 syntax entries in file edg.txt
-;;        45 syntax entries in file obsolete.txt
-;;        38 syntax entries in file whatsnew55.txt
-;; Number of routines found: 1324
-;; Number of keywords found: 6129
+;; Created by get_html_rinfo on Sun Oct 10 16:06:07 2004
+;; IDL version: 6.1
+;; Number of files scanned:  3393
+;; Number of routines found: 1850
+;; Number of keywords found: 7685
 ;;
-;; Fixed up documentation with file: help55fixup.txt
-;;	 93 total fix matches.
-;
 ;; New versions of IDLWAVE, documentation, and more information
 ;; available from:
 ;;                 http://idlwave.org
-;;
+;; 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;; Code:
 (defconst idlwave-system-routines
   '(
-    ("ANNOTATE"               pro nil                 (system) "%s" (("COLOR_INDICES") ("DRAWABLE") ("LOAD_FILE") ("TEK_COLORS") ("WINDOW")))
-    ("ARROW"                  pro nil                 (system) "%s, X0, Y0, X1, Y1" (("COLOR") ("DATA") ("HSIZE") ("HTHICK") ("NORMALIZED") ("SOLID") ("THICK")))
-    ("AXIS"                   pro nil                 (system) "%s [, X [, Y [, Z]]]" (("CHARSIZE") ("CHARTHICK") ("COLOR") ("DATA") ("DEVICE") ("FONT") ("NODATA") ("NOERASE") ("NORMAL") ("SAVE") ("SUBTITLE") ("T3D") ("TICKLEN") ("XAXIS") ("XCHARSIZE") ("XGRIDSTYLE") ("XLOG") ("XMARGIN") ("XMINOR") ("XRANGE") ("XSTYLE") ("XTHICK") ("XTICK_GET") ("XTICKFORMAT") ("XTICKINTERVAL") ("XTICKLAYOUT") ("XTICKLEN") ("XTICKNAME") ("XTICKS") ("XTICKUNITS") ("XTICKV") ("XTITLE") ("YAXIS") ("YCHARSIZE") ("YGRIDSTYLE") ("YLOG") ("YMARGIN") ("YMINOR") ("YNOZERO") ("YRANGE") ("YSTYLE") ("YTHICK") ("YTICK_GET") ("YTICKFORMAT") ("YTICKINTERVAL") ("YTICKLAYOUT") ("YTICKLEN") ("YTICKNAME") ("YTICKS") ("YTICKUNITS") ("YTICKV") ("YTITLE") ("ZAXIS") ("ZCHARSIZE") ("ZGRIDSTYLE") ("ZLOG") ("ZMARGIN") ("ZMINOR") ("ZRANGE") ("ZSTYLE") ("ZTHICK") ("ZTICK_GET") ("ZTICKFORMAT") ("ZTICKINTERVAL") ("ZTICKLAYOUT") ("ZTICKLEN") ("ZTICKNAME") ("ZTICKS") ("ZTICKUNITS") ("ZTICKV") ("ZTITLE") ("ZVALUE")))
-    ("BAR_PLOT"               pro nil                 (system) "%s, Values" (("BACKGROUND") ("BARNAMES") ("BAROFFSET") ("BARSPACE") ("BARWIDTH") ("BASELINES") ("BASERANGE") ("COLORS") ("OUTLINE") ("OVERPLOT") ("ROTATE") ("TITLE") ("XTITLE") ("YTITLE")))
-    ("BLAS_AXPY"              pro nil                 (system) "%s, Y, A, X [, D1, Loc1 [, D2, Range]]" nil)
-    ("BOX_CURSOR"             pro nil                 (system) "%s, [ X0, Y0, NX, NY]" (("FIXED_SIZE") ("INIT") ("MESSAGE")))
-    ("BREAKPOINT"             pro nil                 (system) "%s [, File], Index" (("AFTER") ("CLEAR") ("CONDITION") ("DISABLE") ("ENABLE") ("ON_RECOMPILE") ("ONCE") ("SET")))
-    ("BYTEORDER"              pro nil                 (system) "%s, Variable1, ..., Variablen" (("DTOGFLOAT") ("DTOVAX") ("DTOXDR") ("FTOVAX") ("FTOXDR") ("GFLOATTOD") ("HTONL") ("HTONS") ("L64SWAP") ("LSWAP") ("NTOHL") ("NTOHS") ("SSWAP") ("SWAP_IF_BIG_ENDIAN") ("SWAP_IF_LITTLE_ENDIAN") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD") ("VAXTOD") ("VAXTOF") ("XDRTOD") ("XDRTOF")))
-    ("CALDAT"                 pro nil                 (system) "%s, Julian, Month [, Day [, Year [, Hour [, Minute [, Second]]]]]" nil)
-    ("CALENDAR"               pro nil                 (system) "%s [[, Month] , Year]" nil)
-    ("CALL_METHOD"            pro nil                 (system) "%s, Name, ObjRef, [, P1, ..., Pn]" nil)
-    ("CALL_PROCEDURE"         pro nil                 (system) "%s, Name [, P1, ..., Pn]" nil)
-    ("CATCH"                  pro nil                 (system) "%s, Variable" (("CANCEL")))
-    ("CD"                     pro nil                 (system) "%s [, Directory]" (("CURRENT")))
-    ("CDF_ATTDELETE"          pro nil                 (system) "%s, Id, Attribute [, EntryNum]" (("ZVARIABLE")))
-    ("CDF_ATTGET"             pro nil                 (system) "%s, Id, Attribute, EntryNum, Value" (("CDF_TYPE") ("ZVARIABLE")))
-    ("CDF_ATTINQ"             pro nil                 (system) "%s, Id, Attribute, Name, Scope, MaxEntry [, MaxZEntry]" nil)
-    ("CDF_ATTPUT"             pro nil                 (system) "%s, Id, Attribute, EntryNum, Value" (("ZVARIABLE")))
-    ("CDF_ATTRENAME"          pro nil                 (system) "%s, Id, OldAttr, NewName" nil)
-    ("CDF_CLOSE"              pro nil                 (system) "%s, Id" nil)
-    ("CDF_COMPRESSION"        pro nil                 (system) "%s, Id" (("GET_COMPRESSION") ("GET_GZIP_LEVEL") ("GET_VAR_COMPRESSION") ("GET_VAR_GZIP_LEVEL") ("SET_COMPRESSION") ("SET_GZIP_LEVEL") ("SET_VAR_COMPRESSION") ("SET_VAR_GZIP_LEVEL") ("VARIABLE") ("ZVARIABLE")))
-    ("CDF_CONTROL"            pro nil                 (system) "%s, Id" (("ATTRIBUTE") ("GET_ATTR_INFO") ("GET_CACHESIZE") ("GET_COPYRIGHT") ("GET_FILENAME") ("GET_FORMAT") ("GET_NEGTOPOSFP0_MODE") ("GET_NUMATTRS") ("GET_READONLY_MODE") ("GET_RVAR_CACHESIZE") ("GET_VAR_INFO") ("GET_ZMODE") ("GET_ZVAR_CACHESIZE") ("SET_CACHESIZE") ("SET_EXTENDRECS") ("SET_INITIALRECS") ("SET_NEGTOPOSFP0_MODE") ("SET_PADVALUE") ("SET_READONLY_MODE") ("SET_RVAR_CACHESIZE") ("SET_RVARS_CACHESIZE") ("SET_ZMODE") ("SET_ZVAR_CACHESIZE") ("SET_ZVARS_CACHESIZE") ("VARIABLE") ("ZVARIABLE")))
-    ("CDF_DELETE"             pro nil                 (system) "%s, Id" nil)
-    ("CDF_DOC"                pro nil                 (system) "%s, Id, Version, Release, Copyright" (("INCREMENT")))
-    ("CDF_EPOCH"              pro nil                 (system) "%s, Epoch, Year [, Month, Day, Hour, Minute, Second, Milli]" (("BREAKDOWN_EPOCH") ("COMPUTE_EPOCH")))
-    ("CDF_LIB_INFO"           pro nil                 (system) "%s" (("COPYRIGHT") ("INCREMENT") ("RELEASE") ("SUBINCREMENT") ("VERSION")))
-    ("CDF_VARDELETE"          pro nil                 (system) "%s, Id, Variable" (("ZVARIABLE")))
-    ("CDF_VARGET"             pro nil                 (system) "%s, Id, Variable, Value" (("COUNT") ("INTERVAL") ("OFFSET") ("REC_COUNT") ("REC_INTERVAL") ("REC_START") ("STRING") ("ZVARIABLE")))
-    ("CDF_VARGET1"            pro nil                 (system) "%s, Id, Variable, Value" (("OFFSET") ("REC_START") ("STRING") ("ZVARIABLE")))
-    ("CDF_VARPUT"             pro nil                 (system) "%s, Id, Variable, Value" (("COUNT") ("INTERVAL") ("OFFSET") ("REC_INTERVAL") ("REC_START") ("ZVARIABLE")))
-    ("CDF_VARRENAME"          pro nil                 (system) "%s, Id, OldVariable, NewName" (("ZVARIABLE")))
-    ("CHOLDC"                 pro nil                 (system) "%s, A, P" (("DOUBLE")))
-    ("CIR_3PNT"               pro nil                 (system) "%s, X, Y, R, X0, Y0" nil)
-    ("CLOSE"                  pro nil                 (system) "%s[, Unit1, ..., Unitn]" (("ALL") ("EXIT_STATUS") ("FILE") ("FORCE")))
-    ("COLOR_CONVERT"          pro nil                 (system) "%s, I0, I1, I2, O0, O1, O2" (("HLS_RGB") ("HSV_RGB") ("RGB_HLS") ("RGB_HSV")))
-    ("COMMON"                 pro nil                 (system) "%s VOLUME_DATA, A" (("A")))
-    ("CONSTRAINED_MIN"        pro nil                 (system) "%s, X, Xbnd, Gbnd, Nobj, Gcomp, Inform" (("ESPTOP") ("LIMSER") ("MAXIMIZE") ("NSTOP") ("REPORT") ("TITLE")))
-    ("CONTOUR"                pro nil                 (system) "%s, Z [, X, Y]" (("BACKGROUND") ("C_ANNOTATION") ("C_CHARSIZE") ("C_CHARTHICK") ("C_COLORS") ("C_LABELS") ("C_LINESTYLE") ("C_ORIENTATION") ("C_SPACING") ("C_THICK") ("CELL_FILL") ("CHARSIZE") ("CHARTHICK") ("CLIP") ("CLOSED") ("COLOR") ("DATA") ("DEVICE") ("DOWNHILL") ("FILL") ("FOLLOW") ("FONT") ("IRREGULAR") ("ISOTROPIC") ("LEVELS") ("MAX_VALUE") ("MIN_VALUE") ("NLEVELS") ("NOCLIP") ("NODATA") ("NOERASE") ("NORMAL") ("NSUM") ("OVERPLOT") ("PATH_DATA_COORDS") ("PATH_DOUBLE") ("PATH_FILENAME") ("PATH_INFO") ("PATH_XY") ("POLAR") ("POSITION") ("SUBTITLE") ("T3D") ("THICK") ("TICKLEN") ("TITLE") ("TRIANGULATION") ("XCHARSIZE") ("XGRIDSTYLE") ("XLOG") ("XMARGIN") ("XMINOR") ("XRANGE") ("XSTYLE") ("XTHICK") ("XTICK_GET") ("XTICKFORMAT") ("XTICKINTERVAL") ("XTICKLAYOUT") ("XTICKLEN") ("XTICKNAME") ("XTICKS") ("XTICKUNITS") ("XTICKV") ("XTITLE") ("YCHARSIZE") ("YGRIDSTYLE") ("YLOG") ("YMARGIN") ("YMINOR") ("YNOZERO") ("YRANGE") ("YSTYLE") ("YTHICK") ("YTICK_GET") ("YTICKFORMAT") ("YTICKINTERVAL") ("YTICKLAYOUT") ("YTICKLEN") ("YTICKNAME") ("YTICKS") ("YTICKUNITS") ("YTICKV") ("YTITLE") ("ZAXIS") ("ZCHARSIZE") ("ZGRIDSTYLE") ("ZLOG") ("ZMARGIN") ("ZMINOR") ("ZRANGE") ("ZSTYLE") ("ZTHICK") ("ZTICK_GET") ("ZTICKFORMAT") ("ZTICKINTERVAL") ("ZTICKLAYOUT") ("ZTICKLEN") ("ZTICKNAME") ("ZTICKS") ("ZTICKUNITS") ("ZTICKV") ("ZTITLE") ("ZVALUE")))
-    ("CPU"                    pro nil                 (system) "%s" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NTHREADS") ("VECTOR_ENABLE")))
-    ("CREATE_VIEW"            pro nil                 (system) "%s" (("AX") ("AY") ("AZ") ("PERSP") ("RADIANS") ("WINX") ("WINY") ("XMAX") ("XMIN") ("YMAX") ("YMIN") ("ZFAC") ("ZMAX") ("ZMIN") ("ZOOM")))
-    ("CURSOR"                 pro nil                 (system) "%s, X, Y [, Wait]" (("CHANGE") ("DATA") ("DEVICE") ("DOWN") ("NORMAL") ("NOWAIT") ("UP") ("WAIT")))
-    ("CW_ANIMATE_GETP"        pro nil                 (system) "%s, Widget, Pixmaps" (("KILL_ANYWAY")))
-    ("CW_ANIMATE_LOAD"        pro nil                 (system) "%s, Widget" (("CYCLE") ("FRAME") ("IMAGE") ("ORDER") ("WINDOW") ("XOFFSET") ("YOFFSET")))
-    ("CW_ANIMATE_RUN"         pro nil                 (system) "%s, Widget [, Rate{0 to 100}]" (("NFRAMES") ("STOP")))
-    ("CW_LIGHT_EDITOR_GET"    pro nil                 (system) "%s, WidgetID" (("DIRECTION_DISABLED") ("DRAG_EVENTS") ("HIDE_DISABLED") ("LIGHT") ("LOCATION_DISABLED") ("TYPE_DISABLED") ("XRANGE") ("XSIZE") ("YRANGE") ("YSIZE") ("ZRANGE")))
-    ("CW_LIGHT_EDITOR_SET"    pro nil                 (system) "%s, WidgetID" (("DIRECTION_DISABLED") ("DRAG_EVENTS") ("HIDE_DISABLED") ("LIGHT") ("LOCATION_DISABLED") ("TYPE_DISABLED") ("XRANGE") ("XSIZE") ("YRANGE") ("YSIZE") ("ZRANGE")))
-    ("CW_PALETTE_EDITOR_GET"  pro nil                 (system) "%s, WidgetID" (("ALPHA") ("HISTOGRAM")))
-    ("CW_PALETTE_EDITOR_SET"  pro nil                 (system) "%s, WidgetID" (("ALPHA") ("HISTOGRAM")))
-    ("DEFINE_KEY"             pro nil                 (system) "%s, Key [, Value]" (("BACK_CHARACTER") ("BACK_WORD") ("CONTROL") ("DELETE_CHARACTER") ("DELETE_CURRENT") ("DELETE_EOL") ("DELETE_LINE") ("DELETE_WORD") ("END_OF_FILE") ("END_OF_LINE") ("ENTER_LINE") ("ESCAPE") ("FORWARD_CHARACTER") ("FORWARD_WORD") ("INSERT_OVERSTRIKE_TOGGLE") ("MATCH_PREVIOUS") ("NEXT_LINE") ("NOECHO") ("PREVIOUS_LINE") ("RECALL") ("REDRAW") ("START_OF_LINE") ("TERMINATE")))
-    ("DEFINE_MSGBLK"          pro nil                 (system) "%s, BlockName, ErrorNames, ErrorFormats" (("IGNORE_DUPLICATE") ("PREFIX")))
-    ("DEFINE_MSGBLK_FROM_FILE" pro nil                 (system) "%s, Filename" (("BLOCK") ("IGNORE_DUPLICATE") ("PREFIX") ("VERBOSE")))
-    ("DEFSYSV"                pro nil                 (system) "%s, Name, Value [, Read_Only]" (("EXISTS")))
-    ("DELETE_SYMBOL"          pro nil                 (system) "%s, Name" (("TYPE")))
-    ("DELLOG"                 pro nil                 (system) "%s, Lognam" (("TABLE")))
-    ("DELVAR"                 pro nil                 (system) "%s, V1, ..., Vn" nil)
-    ("DEVICE"                 pro nil                 (system) "%s" (("AVANTGARDE") ("AVERAGE_LINES") ("BINARY") ("BITS_PER_PIXEL") ("BKMAN") ("BOLD") ("BOOK") ("BYPASS_TRANSLATION") ("CLOSE") ("CLOSE_DOCUMENT") ("CLOSE_FILE") ("COLOR") ("COLORS") ("COPY") ("COURIER") ("CURSOR_CROSSHAIR") ("CURSOR_IMAGE") ("CURSOR_MASK") ("CURSOR_ORIGINAL") ("CURSOR_STANDARD") ("CURSOR_XY") ("DECOMPOSED") ("DEMI") ("DEPTH") ("DIRECT_COLOR") ("EJECT") ("ENCAPSULATED") ("ENCODING") ("FILENAME") ("FLOYD") ("FONT_INDEX") ("FONT_SIZE") ("GET_CURRENT_FONT") ("GET_DECOMPOSED") ("GET_FONTNAMES") ("GET_FONTNUM") ("GET_GRAPHICS_FUNCTION") ("GET_PAGESIZE") ("GET_SCREEN_SIZE") ("GET_VISUAL_DEPTH") ("GET_VISUAL_NAME") ("GET_WINDOW_POSITION") ("GET_WRITE_MASK") ("GIN_CHARS") ("GLYPH_CACHE") ("HELVETICA") ("INCHES") ("INDEX_COLOR") ("ISOLATIN1") ("ITALIC") ("LANDSCAPE") ("LANUAGE_LEVEL") ("LIGHT") ("MEDIUM") ("NARROW") ("NCAR") ("OBLIQUE") ("OPTIMIZE") ("ORDERED") ("OUTPUT") ("PALATINO") ("PIXELS") ("PLOT_TO") ("PLOTTER_ON_OFF") ("POLYFILL") ("PORTRAIT") ("PRE_DEPTH") ("PRE_XSIZE") ("PRE_YSIZE") ("PREVIEW") ("PRINT_FILE") ("PSEUDO_COLOR") ("RESET_STRING") ("RESOLUTION") ("RETAIN") ("SCALE_FACTOR") ("SCHOOLBOOK") ("SET_CHARACTER_SIZE") ("SET_COLORMAP") ("SET_COLORS") ("SET_FONT") ("SET_GRAPHICS_FUNCTION") ("SET_RESOLUTION") ("SET_STRING") ("SET_TRANSLATION") ("SET_WRITE_MASK") ("STATIC_COLOR") ("STATIC_GRAY") ("SYMBOL") ("TEK4014") ("TEK4100") ("TEXT") ("THRESHOLD") ("TIMES") ("TRANSLATION") ("TRUE_COLOR") ("TT_FONT") ("TTY") ("VT240") ("VT241") ("VT340") ("VT341") ("WINDOW_STATE") ("XOFFSET") ("XON_XOFF") ("XSIZE") ("YOFFSET") ("YSIZE") ("Z_BUFFERING") ("ZAPFCHANCERY") ("ZAPFDINGBATS")))
-    ("DFPMIN"                 pro nil                 (system) "%s, X, Gtol, Fmin, Func, Dfunc" (("DOUBLE") ("EPS") ("ITER") ("ITMAX") ("STEPMAX") ("TOLX")))
-    ("DISSOLVE"               pro nil                 (system) "%s, Image" (("ORDER") ("SIZ") ("WAIT") ("X0") ("Y0")))
-    ("DLM_LOAD"               pro nil                 (system) "%s, DLMNameStr1 [, DLMNameStr2,..., DLMNameStrn]" nil)
-    ("DLM_REGISTER"           pro nil                 (system) "%s, DLMDefFilePath1 [, DLMDefFilePath2, ..., DLMDefFilePathn]" nil)
-    ("DO_APPLE_SCRIPT"        pro nil                 (system) "%s, Script" (("AG_STRING") ("RESULT")))
-    ("DOC_LIBRARY"            pro nil                 (system) "%s [, Name]" (("DIRECTORY") ("FILE") ("MULTI") ("OUTPUTS") ("PATH") ("PRINT")))
-    ("DRAW_ROI"               pro nil                 (system) "%s, oROI" (("CLIP") ("COLOR") ("DATA") ("DEVICE") ("LINE_FILL") ("LINESTYLE") ("NOCLIP") ("NORMAL") ("ORIENTATION") ("PSYM") ("SPACING") ("SYMSIZE") ("T3D") ("THICK")))
-    ("EFONT"                  pro nil                 (system) "%s [, Init_Font]" (("BLOCK") ("GROUP")))
-    ("EMPTY"                  pro nil                 (system) "%s" nil)
-    ("ENABLE_SYSRTN"          pro nil                 (system) "%s [, Routines]" (("DISABLE") ("EXCLUSIVE") ("FUNCTIONS")))
-    ("ERASE"                  pro nil                 (system) "%s [, Background_Color]" (("CHANNEL") ("COLOR")))
-    ("ERRPLOT"                pro nil                 (system) "%s, [ X, ] Low, High" (("WIDTH")))
-    ("EXIT"                   pro nil                 (system) "%s" (("NO_CONFIRM") ("STATUS")))
-    ("EXPAND"                 pro nil                 (system) "%s, A, Nx, Ny, Result" (("FILLVAL") ("MAXVAL")))
-    ("FILE_CHMOD"             pro nil                 (system) "%s, File [, Mode]" (("A_EXECUTE") ("A_READ") ("A_WRITE") ("G_EXECTUE") ("G_READ") ("G_WRITE") ("NOEXPAND_PATH") ("O_EXECTUE") ("O_READ") ("O_WRITE") ("SETGID") ("SETUID") ("STICKY_BIT") ("U_EXECTUE") ("U_READ") ("U_WRITE")))
-    ("FILE_DELETE"            pro nil                 (system) "%s, File1 [,... FileN]" (("NOEXPAND_PATH") ("QUIET")))
-    ("FILE_MKDIR"             pro nil                 (system) "%s, File1 [,... FileN]" (("NOEXPAND_PATH")))
-    ("FLICK"                  pro nil                 (system) "%s, A, B [, Rate]" nil)
-    ("FLOW3"                  pro nil                 (system) "%s, Vx, Vy, Vz" (("ARROWSIZE") ("BLOB") ("LEN") ("NSTEPS") ("NVECS") ("SX") ("SY") ("SZ")))
-    ("FLUSH"                  pro nil                 (system) "%s, Unit1, ..., Unitn" nil)
-    ("FREE_LUN"               pro nil                 (system) "%s [, Unit1, ..., Unitn]" (("EXIT_STATUS") ("FORCE")))
-    ("FUNCT"                  pro nil                 (system) "%s, X, A, F [, Pder]" nil)
-    ("GAMMA_CT"               pro nil                 (system) "%s, Gamma" (("CURRENT") ("INTENSITY")))
-    ("GET_LUN"                pro nil                 (system) "%s, Unit" nil)
-    ("GRID_INPUT"             pro nil                 (system) "%s, X, Y, F, X1, Y1, F1" (("DEGREES") ("DUPLICATES") ("EPSILON") ("EXCLUDE") ("POLAR") ("SPHERE")))
-    ("H_EQ_CT"                pro nil                 (system) "%s [, Image]" nil)
-    ("H_EQ_INT"               pro nil                 (system) "%s [, Image]" nil)
-    ("HANDLE_FREE"            pro nil                 (system) "%s, ID" nil)
-    ("HANDLE_MOVE"            pro nil                 (system) "%s, Static_ID, Move_ID" nil)
-    ("HANDLE_VALUE"           pro nil                 (system) "%s, ID, Value" nil)
-    ("HDF_AN_END"             pro nil                 (system) "%s, an_id" nil)
-    ("HDF_AN_ENDACCESS"       pro nil                 (system) "%s, ann_id" nil)
-    ("HDF_CLOSE"              pro nil                 (system) "%s, FileHandle" nil)
-    ("HDF_DELDD"              pro nil                 (system) "%s, FileHandle, Tag, Ref" nil)
-    ("HDF_DF24_ADDIMAGE"      pro nil                 (system) "%s, Filename, Image" (("FORCE_BASELINE") ("JPEG") ("QUALITY") ("RLE")))
-    ("HDF_DF24_GETIMAGE"      pro nil                 (system) "%s, Filename, Image" (("LINE") ("PIXEL") ("PLANE")))
-    ("HDF_DF24_GETINFO"       pro nil                 (system) "%s, Filename, Width, Height, Interlace" nil)
-    ("HDF_DF24_READREF"       pro nil                 (system) "%s, Filename, Refno" nil)
-    ("HDF_DF24_RESTART"       pro nil                 (system) "%s" nil)
-    ("HDF_DFAN_ADDFDS"        pro nil                 (system) "%s, Filename, Description" nil)
-    ("HDF_DFAN_ADDFID"        pro nil                 (system) "%s, Filename, Label" nil)
-    ("HDF_DFAN_GETDESC"       pro nil                 (system) "%s, Filename, Tag, Ref, Description" (("STRING")))
-    ("HDF_DFAN_GETFDS"        pro nil                 (system) "%s, Filename, Description" (("FIRST") ("STRING")))
-    ("HDF_DFAN_GETFID"        pro nil                 (system) "%s, Filename, Label" (("FIRST")))
-    ("HDF_DFAN_GETLABEL"      pro nil                 (system) "%s, Filename, Tag, Ref, Label" nil)
-    ("HDF_DFAN_PUTDESC"       pro nil                 (system) "%s, Filename, Tag, Ref, Description" nil)
-    ("HDF_DFAN_PUTLABEL"      pro nil                 (system) "%s, Filename, Tag, Ref, Label" nil)
-    ("HDF_DFP_ADDPAL"         pro nil                 (system) "%s, Filename, Palette" nil)
-    ("HDF_DFP_GETPAL"         pro nil                 (system) "%s, Filename, Palette" nil)
-    ("HDF_DFP_PUTPAL"         pro nil                 (system) "%s, Filename, Palette" (("DELETE") ("OVERWRITE")))
-    ("HDF_DFP_READREF"        pro nil                 (system) "%s, Filename, Refno" nil)
-    ("HDF_DFP_RESTART"        pro nil                 (system) "%s" nil)
-    ("HDF_DFP_WRITEREF"       pro nil                 (system) "%s, Filename, Refno" nil)
-    ("HDF_DFR8_ADDIMAGE"      pro nil                 (system) "%s, Filename, Image" (("FORCE_BASELINE") ("IMCOMP") ("JPEG") ("PALETTE") ("QUALITY") ("RLE")))
-    ("HDF_DFR8_GETIMAGE"      pro nil                 (system) "%s, Filename, Image [, Palette]" nil)
-    ("HDF_DFR8_GETINFO"       pro nil                 (system) "%s, Filename, Width, Height, Has_Palette" nil)
-    ("HDF_DFR8_PUTIMAGE"      pro nil                 (system) "%s, Filename, Image" (("FORCE_BASELINE") ("IMCOMP") ("JPEG") ("PALETTE") ("QUALITY") ("RLE")))
-    ("HDF_DFR8_READREF"       pro nil                 (system) "%s, Filename, Refno" nil)
-    ("HDF_DFR8_RESTART"       pro nil                 (system) "%s" nil)
-    ("HDF_DFR8_SETPALETTE"    pro nil                 (system) "%s, Palette" nil)
-    ("HDF_DFSD_ADDDATA"       pro nil                 (system) "%s, Filename, Data" (("OVERWRITE") ("SET_DIM") ("SET_TYPE")))
-    ("HDF_DFSD_DIMGET"        pro nil                 (system) "%s, Dimension" (("FORMAT") ("LABEL") ("SCALE") ("UNIT")))
-    ("HDF_DFSD_DIMSET"        pro nil                 (system) "%s, Dimension" (("FORMAT") ("LABEL") ("SCALE") ("UNIT")))
-    ("HDF_DFSD_ENDSLICE"      pro nil                 (system) "%s" nil)
-    ("HDF_DFSD_GETDATA"       pro nil                 (system) "%s, Filename, Data" (("GET_DIMS") ("GET_TYPE")))
-    ("HDF_DFSD_GETINFO"       pro nil                 (system) "%s, Filename" (("CALDATA") ("COORDSYS") ("DIMS") ("FORMAT") ("LABEL") ("LASTREF") ("NSDS") ("RANGE") ("TYPE") ("UNIT")))
-    ("HDF_DFSD_GETSLICE"      pro nil                 (system) "%s, Filename, Data" (("COUNT") ("OFFSET")))
-    ("HDF_DFSD_PUTSLICE"      pro nil                 (system) "%s, Data" (("COUNT")))
-    ("HDF_DFSD_READREF"       pro nil                 (system) "%s, Filename, Refno" nil)
-    ("HDF_DFSD_SETINFO"       pro nil                 (system) "%s" (("BYTE") ("CALDATA") ("CLEAR") ("COORDSYS") ("DIMS") ("DOUBLE") ("FLOAT") ("FORMAT") ("INT") ("LABEL") ("LEN_COORDSYS") ("LEN_FORMAT") ("LEN_LABEL") ("LEN_UNIT") ("LONG") ("RANGE") ("RESTART") ("UNIT")))
-    ("HDF_DFSD_STARTSLICE"    pro nil                 (system) "%s, Filename" nil)
-    ("HDF_DUPDD"              pro nil                 (system) "%s, FileHandle, NewTag, NewRef, OldTag, OldRef" nil)
-    ("HDF_GR_END"             pro nil                 (system) "%s, gr_id" nil)
-    ("HDF_GR_ENDACCESS"       pro nil                 (system) "%s, ri_id" nil)
-    ("HDF_LIB_INFO"           pro nil                 (system) "%s, [FileHandle]" (("MAJOR") ("MINOR") ("RELEASE") ("VERSION")))
-    ("HDF_SD_ADDDATA"         pro nil                 (system) "%s, SDS_ID, Data" (("COUNT") ("NOREVERSE") ("START") ("STRIDE")))
-    ("HDF_SD_ATTRINFO"        pro nil                 (system) "%s, S_ID, Attr_Index" (("COUNT") ("DATA") ("HDF_TYPE") ("NAME") ("TYPE")))
-    ("HDF_SD_ATTRSET"         pro nil                 (system) "%s, S_ID, Attr_Name, Values [, Count]" (("BYTE") ("DFNT_CHAR") ("DFNT_FLOAT32") ("DFNT_FLOAT64") ("DFNT_INT16") ("DFNT_INT32") ("DFNT_INT8") ("DFNT_UINT16") ("DFNT_UINT32") ("DFNT_UINT8") ("DOUBLE") ("FLOAT") ("INT") ("LONG") ("SHORT") ("STRING")))
-    ("HDF_SD_DIMGET"          pro nil                 (system) "%s, Dim_ID" (("COMPATIBILITY") ("COUNT") ("FORMAT") ("LABEL") ("NAME") ("NATTR") ("SCALE") ("TYPE") ("UNIT")))
-    ("HDF_SD_DIMSET"          pro nil                 (system) "%s, Dim_ID" (("BW_INCOMP") ("FORMAT") ("LABEL") ("NAME") ("SCALE") ("UNIT")))
-    ("HDF_SD_END"             pro nil                 (system) "%s, SD_ID" nil)
-    ("HDF_SD_ENDACCESS"       pro nil                 (system) "%s, SD_ID" nil)
-    ("HDF_SD_FILEINFO"        pro nil                 (system) "%s, SD_ID, Datasets, Attributes" nil)
-    ("HDF_SD_GETDATA"         pro nil                 (system) "%s, SDS_ID, Data" (("COUNT") ("NOREVERSE") ("START") ("STRIDE")))
-    ("HDF_SD_GETINFO"         pro nil                 (system) "%s, SDS_ID" (("CALDATA") ("COORDSYS") ("DIMS") ("FILL") ("FORMAT") ("HDF_TYPE") ("LABEL") ("NAME") ("NATTS") ("NDIMS") ("NOREVERSE") ("RANGE") ("TYPE") ("UNIT")))
-    ("HDF_SD_SETCOMPRESS"     pro nil                 (system) "%s, SDS_ID, comptype" (("EFFORT")))
-    ("HDF_SD_SETEXTFILE"      pro nil                 (system) "%s, SDS_ID, Filename" (("OFFSET")))
-    ("HDF_SD_SETINFO"         pro nil                 (system) "%s, SDS_ID" (("CALDATA") ("COORDSYS") ("FILL") ("FORMAT") ("LABEL") ("RANGE") ("UNIT")))
-    ("HDF_UNPACKDATA"         pro nil                 (system) "%s, packeddata, data1 [, data2 [, data3 [, data4 [, data5 [, data6 [, data7 [, data8]]]]]]]" (("HDF_ORDER") ("HDF_TYPE") ("NREC")))
-    ("HDF_VD_ATTRINFO"        pro nil                 (system) "%s, VData, FieldID, AttrID, Values" (("COUNT") ("DATA") ("HDF_TYPE") ("NAME") ("TYPE")))
-    ("HDF_VD_ATTRSET"         pro nil                 (system) "%s, VData, FieldID, Attr_Name, Values [, Count]" (("BYTE") ("DFNT_CHAR8") ("DFNT_FLOAT32") ("DFNT_FLOAT64") ("DFNT_INT16") ("DFNT_INT32") ("DFNT_INT8") ("DFNT_UCHAR8") ("DFNT_UINT16") ("DFNT_UINT32") ("DFNT_UINT8") ("DOUBLE") ("FLOAT") ("INT") ("LONG") ("SHORT") ("STRING") ("UINT") ("ULONG")))
-    ("HDF_VD_DETACH"          pro nil                 (system) "%s, VData" nil)
-    ("HDF_VD_FDEFINE"         pro nil                 (system) "%s, VData, Fieldname" (("BYTE") ("DLONG") ("DOUBLE") ("DULONG") ("FLOAT") ("INT") ("LONG") ("ORDER") ("UINT") ("ULONG")))
-    ("HDF_VD_GET"             pro nil                 (system) "%s, VData" (("CLASS") ("COUNT") ("FIELDS") ("INTERLACE") ("NAME") ("NFIELDS") ("REF") ("SIZE") ("TAG")))
-    ("HDF_VD_GETINFO"         pro nil                 (system) "%s, VData, Index" (("NAME") ("ORDER") ("SIZE") ("TYPE")))
-    ("HDF_VD_INSERT"          pro nil                 (system) "%s, VGroup, VData(or Vgroup)" (("POSITION")))
-    ("HDF_VD_SEEK"            pro nil                 (system) "%s, VData, Record" nil)
-    ("HDF_VD_SETINFO"         pro nil                 (system) "%s, VData" (("CLASS") ("FULL_INTERLACE") ("NAME") ("NO_INTERLACE")))
-    ("HDF_VD_WRITE"           pro nil                 (system) "%s, VData, Fields, Data" (("FULL_INTERLACE") ("NO_INTERLACE") ("NRECORDS")))
-    ("HDF_VG_ADDTR"           pro nil                 (system) "%s, VGroup, Tag, Ref" nil)
-    ("HDF_VG_DETACH"          pro nil                 (system) "%s, VGroup" nil)
-    ("HDF_VG_GETINFO"         pro nil                 (system) "%s, VGroup" (("CLASS") ("NAME") ("NENTRIES") ("REF") ("TAG")))
-    ("HDF_VG_GETTR"           pro nil                 (system) "%s, VGroup, Index, Tags, Refs" nil)
-    ("HDF_VG_GETTRS"          pro nil                 (system) "%s, VGroup, Tags, Refs" (("MAXSIZE")))
-    ("HDF_VG_INSERT"          pro nil                 (system) "%s, VGroup, VData(or Vgroup)" (("POSITION")))
-    ("HDF_VG_SETINFO"         pro nil                 (system) "%s, VGroup" (("CLASS") ("NAME")))
-    ("HEAP_FREE"              pro nil                 (system) "%s, Var" (("OBJ") ("PTR") ("VERBOSE")))
-    ("HEAP_GC"                pro nil                 (system) "%s" (("OBJ") ("PTR") ("VERBOSE")))
-    ("HELP"                   pro nil                 (system) "%s, Expression1, ..., Expressionn" (("ALL_KEYS") ("BREAKPOINTS") ("BRIEF") ("CALLS") ("DEVICE") ("DLM") ("FILES") ("FULL") ("FUNCTIONS") ("HEAP_VARIABLES") ("KEYS") ("LAST_MESSAGE") ("MEMORY") ("MESSAGES") ("NAMES") ("OBJECTS") ("OUTPUT") ("PROCEDURES") ("RECALL_COMMANDS") ("ROUTINES") ("SOURCE_FILES") ("STRUCTURES") ("SYSTEM_VARIABLES") ("TRACEBACK")))
-    ("HLS"                    pro nil                 (system) "%s, Litlo, Lithi, Satlo, Sathi, Hue, Loops [, Colr]" nil)
-    ("HSV"                    pro nil                 (system) "%s, Vlo, Vhi, Satlo, Sathi, Hue, Loops [, Colr]" nil)
-    ("IDL_SYSRTN_GENERIC"     pro nil                 (system) "%s IDL_SysRtnGetRealPtr(int is_function, char *name)" nil)
-    ("IMAGE_CONT"             pro nil                 (system) "%s, A" (("ASPECT") ("INTERP") ("WINDOW_SCALE")))
-    ("IMAGE_STATISTICS"       pro nil                 (system) "%s, Data" (("COUNT") ("DATA_SUM") ("LABELED") ("LUT") ("MASK") ("MAXIMUM") ("MEAN") ("MINIMUM") ("STDDEV") ("SUM_OF_SQUARES") ("VARIANCE") ("VECTOR") ("WEIGHT_SUM") ("WEIGHTED")))
-    ("INTERLEAVED"            pro nil                 (system) "%s Result = GRIDDATA( X, F ) Planar Result = GRIDDATA( X, Y, F ) Sphere From Cartesian Coordinates Result = GRIDDATA( X, Y, Z, F)" (("ANISOTROPY") ("DEGREES") ("DELTA") ("DIMENSION") ("EMPTY_SECTORS") ("FAULT_POLYGONS") ("FAULT_XY") ("FUNCTION_TYPE") ("GRID") ("INVERSE_DISTANCE") ("KRIGING") ("LINEAR") ("MAX_PER_SECTOR") ("METHOD") ("MIN_CURVATURE") ("MIN_POINTS") ("MISSING") ("NATURAL_NEIGHBOR") ("NEAREST_NEIGHBOR") ("NEIGHBORHOOD") ("POLYNOMIAL_REGRESSION") ("POWER") ("QUINTIC") ("RADIAL_BASIS_FUNCTION") ("SEARCH_ELLIPSE") ("SECTORS") ("SHEPARDS") ("SMOOTHING") ("SPHERE") ("START") ("TRIANGLES") ("VARIOGRAM") ("XOUT") ("YOUT")))
-    ("INTERVAL_VOLUME"        pro nil                 (system) "%s, Data, Value0, Value1, Outverts, Outconn" (("AUXDATA_IN") ("AUXDATA_OUT") ("GEOM_XYZ") ("TETRAHEDRA")))
-    ("ISOCONTOUR"             pro nil                 (system) "%s, Values, Outverts, Outconn" (("AUXDATA_IN") ("AUXDATA_OUT") ("C_VALUE") ("DOUBLE") ("FILL") ("GEOMX") ("GEOMY") ("GEOMZ") ("LEVEL_VALUES") ("N_LEVELS") ("OUTCONN_INDICES") ("POLYGONS")))
-    ("ISOSURFACE"             pro nil                 (system) "%s, Data, Value, Outverts, Outconn" (("AUXDATA_IN") ("AUXDATA_OUT") ("GEOM_XYZ") ("TETRAHEDRA")))
-    ("JOURNAL"                pro nil                 (system) "%s [, Arg]" nil)
-    ("LINKIMAGE"              pro nil                 (system) "%s, Name, Image [, Type [, Entry]]" (("DEFAULT") ("DEVICE") ("FUNCT") ("KEYWORDS") ("MAX_ARGS") ("MIN_ARGS")))
-    ("LIVE_CONTOUR"           pro nil                 (system) "%s [, Z1,..., Z25]" (("BUFFER") ("DIMENSIONS") ("DOUBLE") ("DRAW_DIMENSIONS") ("ERROR") ("INDEXED_COLOR") ("INSTANCING") ("LOCATION") ("MANAGE_STYLE") ("NAME") ("NO_DRAW") ("NO_SELECTION") ("NO_STATUS") ("NO_TOOLBAR") ("PARENT_BASE") ("PREFERENCE_FILE") ("REFERENCE_OUT") ("RENDERER") ("REPLACE") ("STYLE") ("TEMPLATE_FILE") ("TITLE") ("TLB_LOCATION") ("WINDOW_IN") ("X") ("XINDEPENDENT") ("XRANGE") ("Y") ("YINDEPENDENT") ("YRANGE")))
-    ("LIVE_CONTROL"           pro nil                 (system) "%s, [Name]" (("DIALOG") ("ERROR") ("NO_DRAW") ("PROPERTIES") ("SELECT") ("UPDATE_DATA") ("WINDOW_IN")))
-    ("LIVE_DESTROY"           pro nil                 (system) "%s, [Name1,..., Name25]" (("ENVIRONMENT") ("ERROR") ("NO_DRAW") ("PURGE") ("WINDOW_IN")))
-    ("LIVE_EXPORT"            pro nil                 (system) "%s" (("APPEND") ("COMPRESSION") ("DIALOG") ("DIMENSIONS") ("ERROR") ("FILENAME") ("ORDER") ("PROGRESSIVE") ("QUALITY") ("RESOLUTION") ("TYPE") ("UNITS") ("VISUALIZATION_IN") ("WINDOW_IN")))
-    ("LIVE_IMAGE"             pro nil                 (system) "%s, Image" (("BLUE") ("BUFFER") ("DIMENSIONS") ("DRAW_DIMENSIONS") ("ERROR") ("GREEN") ("INDEXED_COLOR") ("INSTANCING") ("LOCATION") ("MANAGE_STYLE") ("NAME") ("NO_DRAW") ("NO_SELECTION") ("NO_STATUS") ("NO_TOOLBAR") ("PARENT_BASE") ("PREFERENCE_FILE") ("RED") ("REFERENCE_OUT") ("RENDERER") ("REPLACE") ("STYLE") ("TEMPLATE_FILE") ("TITLE") ("TLB_LOCATION") ("WINDOW_IN")))
-    ("LIVE_INFO"              pro nil                 (system) "%s, [Name]" (("ERROR") ("PROPERTIES") ("WINDOW_IN")))
-    ("LIVE_LINE"              pro nil                 (system) "%s" (("ARROW_ANGLE") ("ARROW_END") ("ARROW_SIZE") ("ARROW_START") ("COLOR") ("DIALOG") ("DIMENSIONS") ("ERROR") ("HIDE") ("LINESTYLE") ("LOCATION") ("NAME") ("NO_DRAW") ("NO_SELECTION") ("REFERENCE_OUT") ("THICK") ("VISUALIZATION_IN") ("WINDOW_IN")))
-    ("LIVE_LOAD"              pro nil                 (system) "%s" nil)
-    ("LIVE_OPLOT"             pro nil                 (system) "%s, Yvector1 [,... , Yvector25]" (("ERROR") ("INDEPENDENT") ("NAME") ("NEW_AXES") ("NO_DRAW") ("NO_SELECTION") ("REFERENCE_OUT") ("REPLACE") ("SUBTYPE") ("VISUALIZATION_IN") ("WINDOW_IN") ("XAXIS_IN") ("YAXIS_IN")))
-    ("LIVE_PLOT"              pro nil                 (system) "%s, Yvector1 [, Yvector2,..., Yvector25]" (("BUFFER") ("DIMENSIONS") ("DOUBLE") ("DRAW_DIMENSIONS") ("ERROR") ("HISTOGRAM") ("INDEPENDENT") ("INDEXED_COLOR") ("INSTANCING") ("LINE") ("LOCATION") ("MANAGE_STYLE") ("NAME") ("NO_DRAW") ("NO_SELECTION") ("NO_STATUS") ("NO_TOOLBAR") ("PARENT_BASE") ("POLAR") ("PREFERENCE_FILE") ("REFERENCE_OUT") ("RENDERER") ("REPLACE") ("SCATTER") ("STYLE") ("TEMPLATE_FILE") ("TITLE") ("TLB_LOCATION") ("WINDOW_IN") ("X") ("XRANGE") ("Y") ("YRANGE")))
-    ("LIVE_PRINT"             pro nil                 (system) "%s" (("DIALOG") ("ERROR") ("SETUP") ("WINDOW_IN")))
-    ("LIVE_RECT"              pro nil                 (system) "%s" (("COLOR") ("DIALOG") ("DIMENSIONS") ("ERROR") ("HIDE") ("LINESTYLE") ("LOCATION") ("NAME") ("NO_DRAW") ("NO_SELECTION") ("REFERENCE_OUT") ("THICK") ("VISUALIZATION_IN") ("WINDOW_IN")))
-    ("LIVE_SURFACE"           pro nil                 (system) "%s, Data, Data2,..." (("BUFFER") ("DIMENSIONS") ("DOUBLE") ("DRAW_DIMENSIONS") ("ERROR") ("INDEXED_COLOR") ("INSTANCING") ("LOCATION") ("MANAGE_STYLE") ("NAME") ("NO_DRAW") ("NO_SELECTION") ("NO_STATUS") ("NO_TOOLBAR") ("PARENT_BASE") ("PREFERENCE_FILE") ("REFERENCE_OUT") ("RENDERER") ("REPLACE") ("STYLE") ("TEMPLATE_FILE") ("TITLE") ("TLB_LOCATION") ("WINDOW_IN") ("X") ("XINDEPENDENT") ("XRANGE") ("Y") ("YINDEPENDENT") ("YRANGE")))
-    ("LIVE_TEXT"              pro nil                 (system) "%s[, Text]" (("ALIGNMENT") ("COLOR") ("DIALOG") ("ENABLE_FORMATTING") ("ERROR") ("FONTNAME") ("FONTSIZE") ("HIDE") ("LOCATION") ("NAME") ("NO_DRAW") ("NO_SELECTION") ("REFERENCE_OUT") ("TEXTANGLE") ("VERTICAL_ALIGNMENT") ("VISUALIZATION_IN") ("WINDOW_IN")))
-    ("LJLCT"                  pro nil                 (system) "%s" nil)
-    ("LOADCT"                 pro nil                 (system) "%s [, Table]" (("BOTTOM") ("FILE") ("GET_NAMES") ("NCOLORS") ("SILENT")))
-    ("LUDC"                   pro nil                 (system) "%s, A, Index" (("COLUMN") ("DOUBLE") ("INTERCHANGES")))
-    ("MAKE_DLL"               pro nil                 (system) "%s, InputFiles [, OutputFile], ExportedRoutineNames" (("CC") ("COMPILE_DIRECTORY") ("DLL_PATH") ("EXPORTED_DATA") ("EXTRA_CFLAGS") ("EXTRA_LFLAGS") ("INPUT_DIRECTORY") ("LD") ("NOCLEANUP") ("OUTPUT_DIRECTORY") ("SHOW_ALL_OUTPUT") ("VAX_FLOAT") ("VERBOSE")))
-    ("MAP_CONTINENTS"         pro nil                 (system) "%s" (("COASTS") ("COLOR") ("CONTINENTS") ("COUNTRIES") ("FILL_CONTINENTS") ("HIRES") ("LIMIT") ("MLINESTYLE") ("MLINETHICK") ("ORIENTATION") ("RIVERS") ("SPACING") ("T3D") ("USA") ("ZVALUE")))
-    ("MAP_GRID"               pro nil                 (system) "%s" (("BOX_AXES") ("CHARSIZE") ("CLIP_TEXT") ("COLOR") ("FILL_HORIZON") ("GLINESTYLE") ("GLINETHICK") ("HORIZON") ("INCREMENT") ("LABEL") ("LATALIGN") ("LATDEL") ("LATLAB") ("LATNAMES") ("LATS") ("LONALIGN") ("LONDEL") ("LONLAB") ("LONNAMES") ("LONS") ("NO_GRID") ("ORIENTATION") ("T3D") ("ZVALUE")))
-    ("MAP_PROJ_INFO"          pro nil                 (system) "%s [, iproj]" (("AZIMUTHAL") ("CIRCLE") ("CURRENT") ("CYLINDRICAL") ("LL_LIMITS") ("NAME") ("PROJ_NAMES") ("UV_LIMITS") ("UV_RANGE")))
-    ("MAP_SET"                pro nil                 (system) "%s [, P0lat, P0lon, Rot]" (("ADVANCE") ("AITOFF") ("ALBERS") ("AZIMUTHAL") ("CENTRAL_AZIMUTH") ("CHARSIZE") ("CLIP") ("COLOR") ("CON_COLOR") ("CONIC") ("CONTINENTS") ("CYLINDRICAL") ("E_CONTINENTS") ("E_GRID") ("E_HORIZON") ("ELLIPSOID") ("GLINESTYLE") ("GLINETHICK") ("GNOMIC") ("GOODESHOMOLOSINE") ("GRID") ("HAMMER") ("HIRES") ("HORIZON") ("ISOTROPIC") ("LABEL") ("LAMBERT") ("LATALIGN") ("LATDEL") ("LATLAB") ("LIMIT") ("LONDEL") ("LONLAB") ("MERCATOR") ("MILLER_CYLINDRICAL") ("MLINESTYLE") ("MLINETHICK") ("MOLLEWIDE") ("NAME") ("NOBORDER") ("NOERASE") ("ORTHOGRAPHIC") ("POSITION") ("REVERSE") ("ROBINSON") ("SAT_P") ("SATELLITE") ("SCALE") ("SINUSOIDAL") ("STANDARD_PARALLELS") ("STEREOGRAPHIC") ("T3D") ("TITLE") ("TRANSVERSE_MERCATOR") ("USA") ("XMARGIN") ("YMARGIN") ("ZVALUE")))
-    ("MESH_OBJ"               pro nil                 (system) "%s, Type, Vertex_List, Polygon_List, Array1 [, Array2]" (("CLOSED") ("DEGREES") ("P1") ("P2") ("P3") ("P4") ("P5")))
-    ("MESSAGE"                pro nil                 (system) "%s, [Text]" (("BLOCK") ("CONTINUE") ("INFORMATIONAL") ("IOERROR") ("NAME") ("NONAME") ("NOPREFIX") ("NOPRINT") ("RESET")))
-    ("MK_HTML_HELP"           pro nil                 (system) "%s, Sources, Filename" (("STRICT") ("TITLE") ("VERBOSE")))
-    ("MODIFYCT"               pro nil                 (system) "%s, Itab, Name, R, G, B" (("FILE")))
-    ("MPEG_CLOSE"             pro nil                 (system) "%s, mpegID" nil)
-    ("MPEG_PUT"               pro nil                 (system) "%s, mpegID" (("COLOR") ("FRAME") ("IMAGE") ("ORDER") ("WINDOW")))
-    ("MPEG_SAVE"              pro nil                 (system) "%s, mpegID" (("FILENAME")))
-    ("MSG_CAT_CLOSE"          pro nil                 (system) "%s, object" nil)
-    ("MSG_CAT_COMPILE"        pro nil                 (system) "%s, input[, output]" (("LOCALE_ALIAS") ("MBCS")))
-    ("MULTI"                  pro nil                 (system) "%s, N" nil)
-    ("NCDF_ATTDEL"            pro nil                 (system) "%s, Cdfid [, Varid]" (("GLOBAL")))
-    ("NCDF_ATTGET"            pro nil                 (system) "%s, Cdfid [, Varid]" (("GLOBAL")))
-    ("NCDF_ATTPUT"            pro nil                 (system) "%s, Cdfid [, Varid]" (("BYTE") ("CHAR") ("DOUBLE") ("FLOAT") ("GLOBAL") ("LENGTH") ("LONG") ("SHORT")))
-    ("NCDF_ATTRENAME"         pro nil                 (system) "%s, Cdfid [, Varid]" (("GLOBAL")))
-    ("NCDF_CLOSE"             pro nil                 (system) "%s, Cdfid" nil)
-    ("NCDF_CONTROL"           pro nil                 (system) "%s, Cdfid" (("ABORT") ("ENDEF") ("FILL") ("NOFILL") ("NOVERBOSE") ("OLDFILL") ("REDEF") ("SYNC") ("VERBOSE")))
-    ("NCDF_DIMINQ"            pro nil                 (system) "%s, Cdfid, Dimid, Name, Size" nil)
-    ("NCDF_DIMRENAME"         pro nil                 (system) "%s, Cdfid, Dimid, NewName" nil)
-    ("NCDF_VARGET"            pro nil                 (system) "%s, Cdfid, Varid, Value" (("COUNT") ("OFFSET") ("STRIDE")))
-    ("NCDF_VARGET1"           pro nil                 (system) "%s, Cdfid, Varid, Value" (("OFFSET")))
-    ("NCDF_VARPUT"            pro nil                 (system) "%s, Cdfid, Varid, Value" (("COUNT") ("OFFSET") ("STRIDE")))
-    ("NCDF_VARRENAME"         pro nil                 (system) "%s, Cdfid, Varid, Name" nil)
-    ("OBJ_DESTROY"            pro nil                 (system) "%s, ObjRef [, Arg1, ..., Argn]" nil)
-    ("ON_ERROR"               pro nil                 (system) "%s, N" nil)
-    ("ON_IOERROR"             pro nil                 (system) "%s, Label" nil)
-    ("ONLINE_HELP"            pro nil                 (system) "%s [, Value]" (("BOOK") ("CONTEXT") ("FULL_PATH") ("HTML_HELP") ("QUIT") ("TOPICS")))
-    ("OPENR"                  pro nil                 (system) "%s, Unit, File [, Record_Length]" (("APPEND") ("BLOCK") ("BUFSIZE") ("COMPRESS") ("DEFAULT") ("DELETE") ("ERROR") ("EXTENDSIZE") ("F77_UNFORMATTED") ("FIXED") ("FORTRAN") ("GET_LUN") ("INITIALSIZE") ("KEYED") ("LIST") ("MACCREATOR") ("MACTYPE") ("MORE") ("NOEXPAND_PATH") ("NONE") ("PRINT") ("RAWIO") ("SEGMENTED") ("SHARED") ("STDIO") ("STREAM") ("SUBMIT") ("SUPERSEDE") ("SWAP_ENDIAN") ("SWAP_IF_BIG_ENDIAN") ("SWAP_IF_LITTLE_ENDIAN") ("TRUNCATE_ON_CLOSE") ("UDF_BLOCK") ("VARIABLE") ("VAX_FLOAT") ("WIDTH") ("XDR")))
-    ("OPENU"                  pro nil                 (system) "%s, Unit, File [, Record_Length]" (("APPEND") ("BLOCK") ("BUFSIZE") ("COMPRESS") ("DEFAULT") ("DELETE") ("ERROR") ("EXTENDSIZE") ("F77_UNFORMATTED") ("FIXED") ("FORTRAN") ("GET_LUN") ("INITIALSIZE") ("KEYED") ("LIST") ("MACCREATOR") ("MACTYPE") ("MORE") ("NOEXPAND_PATH") ("NONE") ("PRINT") ("RAWIO") ("SEGMENTED") ("SHARED") ("STDIO") ("STREAM") ("SUBMIT") ("SUPERSEDE") ("SWAP_ENDIAN") ("SWAP_IF_BIG_ENDIAN") ("SWAP_IF_LITTLE_ENDIAN") ("TRUNCATE_ON_CLOSE") ("UDF_BLOCK") ("VARIABLE") ("VAX_FLOAT") ("WIDTH") ("XDR")))
-    ("OPENW"                  pro nil                 (system) "%s, Unit, File [, Record_Length]" (("APPEND") ("BLOCK") ("BUFSIZE") ("COMPRESS") ("DEFAULT") ("DELETE") ("ERROR") ("EXTENDSIZE") ("F77_UNFORMATTED") ("FIXED") ("FORTRAN") ("GET_LUN") ("INITIALSIZE") ("KEYED") ("LIST") ("MACCREATOR") ("MACTYPE") ("MORE") ("NOEXPAND_PATH") ("NONE") ("PRINT") ("RAWIO") ("SEGMENTED") ("SHARED") ("STDIO") ("STREAM") ("SUBMIT") ("SUPERSEDE") ("SWAP_ENDIAN") ("SWAP_IF_BIG_ENDIAN") ("SWAP_IF_LITTLE_ENDIAN") ("TRUNCATE_ON_CLOSE") ("UDF_BLOCK") ("VARIABLE") ("VAX_FLOAT") ("WIDTH") ("XDR")))
-    ("OPLOT"                  pro nil                 (system) "%s, [X,] Y" (("CLIP") ("COLOR") ("LINESTYLE") ("MAX_VALUE") ("MIN_VALUE") ("NOCLIP") ("NSUM") ("POLAR") ("PSYM") ("SYMSIZE") ("T3D") ("THICK") ("ZVALUE")))
-    ("OPLOTERR"               pro nil                 (system) "%s, [ X ,] Y , Err [, Psym]" nil)
-    ("PARTICLE_TRACE"         pro nil                 (system) "%s, Data, Seeds, Verts, Conn [, Normals]" (("ANISOTROPY") ("INTEGRATION") ("MAX_ITERATIONS") ("MAX_STEPSIZE") ("SEED_NORMAL") ("TOLERANCE") ("UNIFORM")))
-    ("PLOT"                   pro nil                 (system) "%s, [X,] Y" (("BACKGROUND") ("CHARSIZE") ("CHARTHICK") ("CLIP") ("COLOR") ("DATA") ("DEVICE") ("FONT") ("ISOTROPIC") ("LINESTYLE") ("MAX_VALUE") ("MIN_VALUE") ("NOCLIP") ("NODATA") ("NOERASE") ("NORMAL") ("NSUM") ("POLAR") ("POSITION") ("PSYM") ("SUBTITLE") ("SYMSIZE") ("T3D") ("THICK") ("TICKLEN") ("TITLE") ("XCHARSIZE") ("XGRIDSTYLE") ("XLOG") ("XMARGIN") ("XMINOR") ("XRANGE") ("XSTYLE") ("XTHICK") ("XTICK_GET") ("XTICKFORMAT") ("XTICKINTERVAL") ("XTICKLAYOUT") ("XTICKLEN") ("XTICKNAME") ("XTICKS") ("XTICKUNITS") ("XTICKV") ("XTITLE") ("YCHARSIZE") ("YGRIDSTYLE") ("YLOG") ("YMARGIN") ("YMINOR") ("YNOZERO") ("YRANGE") ("YSTYLE") ("YTHICK") ("YTICK_GET") ("YTICKFORMAT") ("YTICKINTERVAL") ("YTICKLAYOUT") ("YTICKLEN") ("YTICKNAME") ("YTICKS") ("YTICKUNITS") ("YTICKV") ("YTITLE") ("ZCHARSIZE") ("ZGRIDSTYLE") ("ZMARGIN") ("ZMINOR") ("ZRANGE") ("ZSTYLE") ("ZTHICK") ("ZTICK_GET") ("ZTICKFORMAT") ("ZTICKINTERVAL") ("ZTICKLAYOUT") ("ZTICKLEN") ("ZTICKNAME") ("ZTICKS") ("ZTICKUNITS") ("ZTICKV") ("ZTITLE") ("ZVALUE")))
-    ("PLOT_3DBOX"             pro nil                 (system) "%s, X, Y, Z" (("AX") ("AZ") ("BACKGROUND") ("CHARSIZE") ("CHARTHICK") ("CLIP") ("COLOR") ("DATA") ("DEVICE") ("GRIDSTYLE") ("ISOTROPIC") ("LINESTYLE") ("MAX_VALUE") ("MIN_VALUE") ("NOCLIP") ("NODATA") ("NOERASE") ("NORMAL") ("NSUM") ("POLAR") ("POSITION") ("PSYM") ("SOLID_WALLS") ("SUBTITLE") ("T3D") ("THICK") ("TICKLEN") ("TITLE") ("XCHARSIZE") ("XGRIDSTYLE") ("XLOG") ("XMARGIN") ("XMINOR") ("XRANGE") ("XSTYLE") ("XTHICK") ("XTICKFORMAT") ("XTICKINTERVAL") ("XTICKLAYOUT") ("XTICKLEN") ("XTICKNAME") ("XTICKS") ("XTICKUNITS") ("XTICKV") ("XTITLE") ("XY_PLANE") ("XYSTYLE") ("XZ_PLANE") ("XZSTYLE") ("YCHARSIZE") ("YGRIDSTYLE") ("YLOG") ("YMARGIN") ("YMINOR") ("YNOZERO") ("YRANGE") ("YSTYLE") ("YTHICK") ("YTICKFORMAT") ("YTICKINTERVAL") ("YTICKLAYOUT") ("YTICKLEN") ("YTICKNAME") ("YTICKS") ("YTICKUNITS") ("YTICKV") ("YTITLE") ("YZ_PLANE") ("YZSTYLE") ("ZAXIS") ("ZCHARSIZE") ("ZGRIDSTYLE") ("ZMARGIN") ("ZMINOR") ("ZRANGE") ("ZSTYLE") ("ZTHICK") ("ZTICKFORMAT") ("ZTICKINTERVAL") ("ZTICKLAYOUT") ("ZTICKLEN") ("ZTICKNAME") ("ZTICKS") ("ZTICKUNITS") ("ZTICKV") ("ZTITLE")))
-    ("PLOT_FIELD"             pro nil                 (system) "%s, U, V" (("ASPECT") ("LENGTH") ("N") ("TITLE")))
-    ("PLOTERR"                pro nil                 (system) "%s, [ X ,] Y , Err" (("PSYM") ("TYPE")))
-    ("PLOTS"                  pro nil                 (system) "%s, X [, Y [, Z]]" (("CLIP") ("COLOR") ("CONTINUE") ("DATA") ("DEVICE") ("LINESTYLE") ("NOCLIP") ("NORMAL") ("PSYM") ("SYMSIZE") ("T3D") ("THICK") ("Z")))
-    ("POINT_LUN"              pro nil                 (system) "%s, Unit, Position" nil)
-    ("POLAR_CONTOUR"          pro nil                 (system) "%s, Z, Theta, R" (("C_ANNOTATION") ("C_CHARSIZE") ("C_CHARTHICK") ("C_COLORS") ("C_LINESTYLE") ("C_ORIENTATION") ("C_SPACING") ("C_THICK") ("CLOSED") ("FILL") ("IRREGULAR") ("LEVELS") ("MAX_VALUE") ("MIN_VALUE") ("NLEVELS") ("OVERPLOT") ("PATH_DATA_COORDS") ("SHOW_TRIANGULATION") ("TRIANGULATION") ("XLOG") ("YLOG") ("ZAXIS")))
-    ("POLYFILL"               pro nil                 (system) "%s, X [, Y [, Z]]" (("CLIP") ("COLOR") ("DATA") ("DEVICE") ("IMAGE_COORD") ("IMAGE_INTERP") ("LINE_FILL") ("LINESTYLE") ("NOCLIP") ("NORMAL") ("ORIENTATION") ("PATTERN") ("SPACING") ("T3D") ("THICK") ("TRANSPARENT") ("Z")))
-    ("POLYWARP"               pro nil                 (system) "%s, Xi, Yi, Xo, Yo, Degree, Kx, Ky" (("DOUBLE") ("STATUS")))
-    ("POPD"                   pro nil                 (system) "%s" nil)
-    ("POWELL"                 pro nil                 (system) "%s, P, Xi, Ftol, Fmin, Func" (("DOUBLE") ("ITER") ("ITMAX")))
-    ("PRINT"                  pro nil                 (system) "%s [, Expr1, ..., Exprn]" (("AM_PM") ("DAYS_OF_WEEK") ("FORMAT") ("MONTHS") ("REWRITE") ("STDIO_NON_FINITE")))
-    ("PRINTD"                 pro nil                 (system) "%s" nil)
-    ("PRINTF"                 pro nil                 (system) "%s [, Unit, Expr1, ..., Exprn]" (("AM_PM") ("DAYS_OF_WEEK") ("FORMAT") ("MONTHS") ("REWRITE") ("STDIO_NON_FINITE")))
-    ("PROFILER"               pro nil                 (system) "%s [, Module]" (("CLEAR") ("DATA") ("OUTPUT") ("REPORT") ("RESET") ("SYSTEM")))
-    ("PROFILES"               pro nil                 (system) "%s, Image" (("ORDER") ("SX") ("SY") ("WSIZE")))
-    ("PS_SHOW_FONTS"          pro nil                 (system) "%s" (("NOLATIN")))
-    ("PSAFM"                  pro nil                 (system) "%s, Input_Filename, Output_Filename" nil)
-    ("PSEUDO"                 pro nil                 (system) "%s, Litlo, Lithi, Satlo, Sathi, Hue, Loops [, Colr]" nil)
-    ("PTR_FREE"               pro nil                 (system) "%s, P1, ... ..., Pn" nil)
-    ("PUSHD"                  pro nil                 (system) "%s, Dir" nil)
-    ("QHULL"                  pro nil                 (system) "%s, V, Tr or, QHULL, V0 , V1, [, V2 ... [, V6] ] , Tr" (("BOUNDS") ("CONNECTIVITY") ("DELAUNAY") ("SPHERE") ("VDIAGRAM") ("VNORMALS") ("VVERTICES")))
-    ("RDPIX"                  pro nil                 (system) "%s, Image [, X0, Y0]" nil)
-    ("READ"                   pro nil                 (system) "%s, [Prompt,] Var1, ..., Varn" (("AM_PM") ("DAYS_OF_WEEK") ("FORMAT") ("KEY_ID") ("KEY_MATCH") ("KEY_VALUE") ("MONTHS") ("PROMPT")))
-    ("READ_INTERFILE"         pro nil                 (system) "%s, File, Data" nil)
-    ("READ_JPEG"              pro nil                 (system) "%s [, Filename]" (("BUFFER") ("COLORS") ("DITHER") ("GRAYSCALE") ("ORDER") ("TRUE") ("TWO_PASS_QUANTIZE") ("UNIT")))
-    ("READ_PICT"              pro nil                 (system) "%s, Filename, Image [, R, G, B]" nil)
-    ("READ_PPM"               pro nil                 (system) "%s, Filename, Image" (("MAXVAL")))
-    ("READ_SRF"               pro nil                 (system) "%s, Filename, Image [, R, G, B]" nil)
-    ("READ_WAVE"              pro nil                 (system) "%s, File, Variables, Names, Dimensions" (("MESHNAMES")))
-    ("READ_X11_BITMAP"        pro nil                 (system) "%s, File, Bitmap [, X, Y]" (("EXPAND_TO_BYTES")))
-    ("READF"                  pro nil                 (system) "%s, [Prompt,] Var1, ..., Varn" (("AM_PM") ("DAYS_OF_WEEK") ("FORMAT") ("KEY_ID") ("KEY_MATCH") ("KEY_VALUE") ("MONTHS") ("PROMPT")))
-    ("READS"                  pro nil                 (system) "%s, Input, Var1, ..., Varn" (("AM_PM") ("DAYS_OF_WEEK") ("FORMAT") ("MONTHS")))
-    ("READU"                  pro nil                 (system) "%s, Unit, Var1, ..., Varn" (("KEY_ID") ("KEY_MATCH") ("KEY_VALUE") ("TRANSFER_COUNT")))
-    ("REDUCE_COLORS"          pro nil                 (system) "%s, Image, Values" nil)
-    ("REPLICATE_INPLACE"      pro nil                 (system) "%s, X, Value [, D1, Loc1 [, D2, Range]]" nil)
-    ("RESOLVE_ALL"            pro nil                 (system) "%s" (("CONTINUE_ON_ERROR") ("QUIET")))
-    ("RESOLVE_ROUTINE"        pro nil                 (system) "%s, Name" (("COMPILE_FULL_FILE") ("EITHER") ("IS_FUNCTION") ("NO_RECOMPILE")))
-    ("RESTORE"                pro nil                 (system) "%s [, Filename]" (("FILENAME") ("RELAXED_STRUCTURE_ASSIGNMENT") ("RESTORED_OBJECTS") ("VERBOSE")))
-    ("RETALL"                 pro nil                 (system) "%s" nil)
-    ("RETURN"                 pro nil                 (system) "%s [, Return_value]" nil)
-    ("REWIND"                 pro nil                 (system) "%s, Unit" nil)
-    ("RIEMANN"                pro nil                 (system) "%s, P, A, Theta" (("BACKPROJECT") ("BILINEAR") ("CENTER") ("COR") ("CUBIC") ("D") ("ROW")))
-    ("SAVE"                   pro nil                 (system) "%s [, Var1, ..., Varn]" (("ALL") ("COMM") ("COMPRESS") ("FILENAME") ("ROUTINES") ("SYSTEM_VARIABLES") ("VARIABLES") ("VERBOSE")))
-    ("SCALE3"                 pro nil                 (system) "%s" (("AX") ("AZ") ("XRANGE") ("YRANGE") ("ZRANGE")))
-    ("SCALE3D"                pro nil                 (system) "%s" nil)
-    ("SET_PLOT"               pro nil                 (system) "%s, Device" (("COPY") ("INTERPOLATE")))
-    ("SET_SHADING"            pro nil                 (system) "%s" (("GOURAUD") ("LIGHT") ("REJECT") ("VALUES")))
-    ("SET_SYMBOL"             pro nil                 (system) "%s, Name, Value" (("TYPE")))
-    ("SETENV"                 pro nil                 (system) "%s, Environment_Expression" nil)
-    ("SETLOG"                 pro nil                 (system) "%s, Lognam, Value" (("CONCEALED") ("CONFINE") ("NO_ALIAS") ("TABLE") ("TERMINAL")))
-    ("SETUP_KEYS"             pro nil                 (system) "%s" (("APP_KEYPAD") ("EIGHTBIT") ("HP9000") ("MIPS") ("NUM_KEYPAD") ("PSTERM") ("SGI") ("SUN") ("VT200")))
-    ("SHADE_SURF"             pro nil                 (system) "%s, Z [, X, Y]" (("AX") ("AZ") ("CHARSIZE") ("CHARTHICK") ("COLOR") ("DATA") ("DEVICE") ("FONT") ("IMAGE") ("MAX_VALUE") ("MIN_VALUE") ("NODATA") ("NORMAL") ("PIXELS") ("POSITION") ("SAVE") ("SHADES") ("SUBTITLE") ("T3D") ("THICK") ("TICKLEN") ("TITLE") ("XCHARSIZE") ("XGRIDSTYLE") ("XLOG") ("XMARGIN") ("XMINOR") ("XRANGE") ("XSTYLE") ("XTHICK") ("XTICK_GET") ("XTICKFORMAT") ("XTICKINTERVAL") ("XTICKLAYOUT") ("XTICKLEN") ("XTICKNAME") ("XTICKS") ("XTICKUNITS") ("XTICKV") ("XTITLE") ("YCHARSIZE") ("YGRIDSTYLE") ("YLOG") ("YMARGIN") ("YMINOR") ("YRANGE") ("YSTYLE") ("YTHICK") ("YTICK_GET") ("YTICKFORMAT") ("YTICKINTERVAL") ("YTICKLAYOUT") ("YTICKLEN") ("YTICKNAME") ("YTICKS") ("YTICKUNITS") ("YTICKV") ("YTITLE") ("ZCHARSIZE") ("ZGRIDSTYLE") ("ZMARGIN") ("ZMINOR") ("ZRANGE") ("ZSTYLE") ("ZTHICK") ("ZTICK_GET") ("ZTICKFORMAT") ("ZTICKINTERVAL") ("ZTICKLAYOUT") ("ZTICKLEN") ("ZTICKNAME") ("ZTICKS") ("ZTICKUNITS") ("ZTICKV") ("ZTITLE") ("ZVALUE")))
-    ("SHADE_SURF_IRR"         pro nil                 (system) "%s, Z, X, Y" (("AX") ("AZ") ("IMAGE") ("PLIST") ("T3D")))
-    ("SHADE_VOLUME"           pro nil                 (system) "%s, Volume, Value, Vertex, Poly" (("LOW") ("SHADES") ("VERBOSE") ("XRANGE") ("YRANGE") ("ZRANGE")))
-    ("SHOW3"                  pro nil                 (system) "%s, Image [, X, Y]" (("E_CONTOUR") ("E_SURFACE") ("INTERP") ("SSCALE")))
-    ("SHOWFONT"               pro nil                 (system) "%s, Font, Name" (("ENCAPSULATED") ("TT_FONT")))
-    ("SKIPF"                  pro nil                 (system) "%s, Unit, Files or SKIPF, Unit, Records, R" nil)
-    ("SLICER3"                pro nil                 (system) "%s [, hData3D]" (("DATA_NAMES") ("DETACH") ("GROUP") ("MODAL")))
-    ("SLIDE_IMAGE"            pro nil                 (system) "%s [, Image]" (("BLOCK") ("CONGRID") ("FULL_WINDOW") ("GROUP") ("ORDER") ("REGISTER") ("RETAIN") ("SHOW_FULL") ("SLIDE_WINDOW") ("TITLE") ("TOP_ID") ("XSIZE") ("XVISIBLE") ("YSIZE") ("YVISIBLE")))
-    ("SOCKET"                 pro nil                 (system) "%s, Unit, Host, Port" (("CONNECT_TIMEOUT") ("ERROR") ("GET_LUN") ("RAWIO") ("READ_TIMEOUT") ("STDIO") ("SWAP_ENDIAN") ("SWAP_IF_BIG_ENDIAN") ("SWAP_IF_LITTLE_ENDIAN") ("WIDTH") ("WRITE_TIMEOUT")))
-    ("SPAWN"                  pro nil                 (system) "%s [, Command [, Result] [, ErrResult]]" (("COUNT") ("EXIT_STATUS") ("FORCE") ("HIDE") ("LOG_OUTPUT") ("MACCREATOR") ("NOCLISYM") ("NOLOGNAM") ("NOSHELL") ("NOTIFY") ("NOTTYRESET") ("NOWAIT") ("NULL_STDIN") ("PID") ("SH") ("STDERR") ("UNIT")))
-    ("SPH_4PNT"               pro nil                 (system) "%s, X, Y, Z, Xc, Yc, Zc, R" (("DOUBLE")))
-    ("SPLINE_P"               pro nil                 (system) "%s, X, Y, Xr, Yr" (("INTERVAL") ("TAN0") ("TAN1")))
-    ("STOP"                   pro nil                 (system) "%s [, Expr1, ..., Exprn]" nil)
-    ("STREAMLINE"             pro nil                 (system) "%s, Verts, Conn, Normals, Outverts, Outconn" (("ANISOTROPY") ("PROFILE") ("SIZE")))
-    ("STRETCH"                pro nil                 (system) "%s [, Low, High [, Gamma]]" (("CHOP")))
-    ("STRPUT"                 pro nil                 (system) "%s, Destination, Source [, Position]" nil)
-    ("STRUCT_ASSIGN"          pro nil                 (system) "%s, Source, Destination" (("NOZERO") ("VERBOSE")))
-    ("STRUCT_HIDE"            pro nil                 (system) "%s, Arg1 [, Arg2, ..., Argn]" nil)
-    ("SURFACE"                pro nil                 (system) "%s, Z [, X, Y]" (("AX") ("AZ") ("BACKGROUND") ("BOTTOM") ("CHARSIZE") ("CHARTHICK") ("CLIP") ("COLOR") ("DATA") ("DEVICE") ("FONT") ("HORIZONTAL") ("ISOTROPIC") ("LEGO") ("LINESTYLE") ("LOWER_ONLY") ("MAX_VALUE") ("MIN_VALUE") ("NOCLIP") ("NODATA") ("NOERASE") ("NORMAL") ("NSUM") ("POLAR") ("POSITION") ("SAVE") ("SHADES") ("SKIRT") ("SUBTITLE") ("T3D") ("THICK") ("TICKLEN") ("TITLE") ("UPPER_ONLY") ("XCHARSIZE") ("XGRIDSTYLE") ("XLOG") ("XMARGIN") ("XMINOR") ("XRANGE") ("XSTYLE") ("XTHICK") ("XTICK_GET") ("XTICKFORMAT") ("XTICKINTERVAL") ("XTICKLAYOUT") ("XTICKLEN") ("XTICKNAME") ("XTICKS") ("XTICKUNITS") ("XTICKV") ("XTITLE") ("YCHARSIZE") ("YGRIDSTYLE") ("YLOG") ("YMARGIN") ("YMINOR") ("YNOZERO") ("YRANGE") ("YSTYLE") ("YTHICK") ("YTICK_GET") ("YTICKFORMAT") ("YTICKINTERVAL") ("YTICKLAYOUT") ("YTICKLEN") ("YTICKNAME") ("YTICKS") ("YTICKUNITS") ("YTICKV") ("YTITLE") ("ZAXIS") ("ZCHARSIZE") ("ZGRIDSTYLE") ("ZLOG") ("ZMARGIN") ("ZMINOR") ("ZRANGE") ("ZSTYLE") ("ZTHICK") ("ZTICK_GET") ("ZTICKFORMAT") ("ZTICKINTERVAL") ("ZTICKLAYOUT") ("ZTICKLEN") ("ZTICKNAME") ("ZTICKS") ("ZTICKUNITS") ("ZTICKV") ("ZTITLE") ("ZVALUE")))
-    ("SURFR"                  pro nil                 (system) "%s" (("AX") ("AZ")))
-    ("SVDC"                   pro nil                 (system) "%s, A, W, U, V" (("COLUMN") ("DOUBLE") ("ITMAX")))
-    ("T3D"                    pro nil                 (system) "%s [, Array]" (("MATRIX") ("OBLIQUE") ("PERSPECTIVE") ("RESET") ("ROTATE") ("SCALE") ("TRANSLATE") ("XYEXCH") ("XZEXCH") ("YZEXCH")))
-    ("TAPRD"                  pro nil                 (system) "%s, Array, Unit [, Byte_Reverse]" nil)
-    ("TAPWRT"                 pro nil                 (system) "%s, Array, Unit [, Byte_Reverse]" nil)
-    ("TEK_COLOR"              pro nil                 (system) "%s [, Start_Index, Colors]" nil)
-    ("THREED"                 pro nil                 (system) "%s, A [, Sp]" (("TITLE") ("XTITLE") ("YTITLE")))
-    ("TIFF_DUMP"              pro nil                 (system) "%s, File" nil)
-    ("TIFF_WRITE"             pro nil                 (system) "%s, File, Array [, Orientation]" nil)
-    ("TIME_TEST2"             pro nil                 (system) "%s [, Filename]" nil)
-    ("TRIANGULATE"            pro nil                 (system) "%s, X, Y, Triangles [, B]" (("CONNECTIVITY") ("DEGREES") ("FVALUE") ("REPEATS") ("SPHERE")))
-    ("TRIQL"                  pro nil                 (system) "%s, D, E, A" (("DOUBLE")))
-    ("TRIRED"                 pro nil                 (system) "%s, A, D, E" (("DOUBLE")))
-    ("TV"                     pro nil                 (system) "%s, Image [, Position] or TV, Image [, X, Y [, Channel]]" (("CENTIMETERS") ("CHANNEL") ("DATA") ("DEVICE") ("INCHES") ("NORMAL") ("ORDER") ("T3D") ("TRUE") ("WORDS") ("XSIZE") ("YSIZE") ("Z")))
-    ("TVCRS"                  pro nil                 (system) "%s [, ON_OFF] or TVCRS [, X, Y]" (("CENTIMETERS") ("DATA") ("DEVICE") ("HIDE_CURSOR") ("INCHES") ("NORMAL") ("T3D") ("Z")))
-    ("TVLCT"                  pro nil                 (system) "%s, V1, V2, V3 [, Start]" (("GET") ("HLS") ("HSV")))
-    ("TVSCL"                  pro nil                 (system) "%s, Image [, Position] or TVSCL, Image [, X, Y [, Channel]]" (("CENTIMETERS") ("CHANNEL") ("DATA") ("DEVICE") ("INCHES") ("NAN") ("NORMAL") ("ORDER") ("T3D") ("TOP") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD") ("TRUE") ("WORDS") ("XSIZE") ("YSIZE") ("Z")))
-    ("USERSYM"                pro nil                 (system) "%s, X [, Y]" (("COLOR") ("FILL") ("THICK")))
-    ("VECTOR_FIELD"           pro nil                 (system) "%s, Field, Outverts, Outconn" (("ANISOTROPY") ("SCALE") ("VERTICES")))
-    ("VEL"                    pro nil                 (system) "%s, U, V" (("LENGTH") ("NSTEPS") ("NVECS") ("TITLE") ("XMAX")))
-    ("VELOVECT"               pro nil                 (system) "%s, U, V [, X, Y]" (("COLOR") ("DOTS") ("LENGTH") ("MISSING") ("OVERPLOT")))
-    ("VORONOI"                pro nil                 (system) "%s, X, Y, I0, C, Xp, Yp, Rect" nil)
-    ("WAIT"                   pro nil                 (system) "%s, Seconds" nil)
-    ("WDELETE"                pro nil                 (system) "%s [, Window_Index [, ...]]" nil)
-    ("WEOF"                   pro nil                 (system) "%s, Unit" nil)
-    ("WF_DRAW"                pro nil                 (system) "%s, X, Y" (("COLD") ("COLOR") ("CONVERGENCE") ("DATA") ("DEVICE") ("FRONT_TYPE") ("INTERVAL") ("NORMAL") ("OCCLUDED") ("PSYM") ("STATIONARY") ("SYM_HT") ("SYM_LEN") ("THICK") ("WARM")))
-    ("WIDED"                  pro nil                 (system) "%s" nil)
-    ("WIDGET_CONTROL"         pro nil                 (system) "%s [, Widget_ID]" (("ALIGNMENT") ("ALL_TABLE_EVENTS") ("ALL_TEXT_EVENTS") ("AM_PM") ("APPEND") ("BAD_ID") ("BITMAP") ("CANCEL_BUTTON") ("CLEAR_EVENTS") ("COLUMN_LABELS") ("COLUMN_WIDTHS") ("CONTEXT_MENU") ("DAYS_OF_WEEK") ("DEFAULT_BUTTON") ("DEFAULT_FONT") ("DELAY_DESTROY") ("DELETE_COLUMNS") ("DELETE_ROWS") ("DESTROY") ("DRAW_BUTTON_EVENTS") ("DRAW_EXPOSE_EVENTS") ("DRAW_MOTION_EVENTS") ("DRAW_VIEWPORT_EVENTS") ("DRAW_XSIZE") ("DRAW_YSIZE") ("DYNAMIC_RESIZE") ("EDIT_CELL") ("EDITABLE") ("EVENT_FUNC") ("EVENT_PRO") ("FORMAT") ("FUNC_GET_VALUE") ("GET_DRAW_VIEW") ("GET_UVALUE") ("GET_VALUE") ("GROUP_LEADER") ("HOURGLASS") ("ICONIFY") ("INPUT_FOCUS") ("INSERT_COLUMNS") ("INSERT_ROWS") ("KBRD_FOCUS_EVENTS") ("KILL_NOTIFY") ("MAP") ("MONTHS") ("NO_COPY") ("NO_NEWLINE") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("REALIZE") ("RESET") ("ROW_HEIGHTS") ("ROW_LABELS") ("SCR_XSIZE") ("SCR_YSIZE") ("SEND_EVENT") ("SENSITIVE") ("SET_BUTTON") ("SET_DRAW_VIEW") ("SET_DROPLIST_SELECT") ("SET_LIST_SELECT") ("SET_LIST_TOP") ("SET_SLIDER_MAX") ("SET_SLIDER_MIN") ("SET_TABLE_SELECT") ("SET_TABLE_VIEW") ("SET_TEXT_SELECT") ("SET_TEXT_TOP_LINE") ("SET_UNAME") ("SET_UVALUE") ("SET_VALUE") ("SHOW") ("TABLE_XSIZE") ("TABLE_YSIZE") ("TIMER") ("TLB_GET_OFFSET") ("TLB_GET_SIZE") ("TLB_KILL_REQUEST_EVENTS") ("TLB_SET_TITLE") ("TLB_SET_XOFFSET") ("TLB_SET_YOFFSET") ("TRACKING_EVENTS") ("UNITS") ("UPDATE") ("USE_TABLE_SELECT") ("USE_TEXT_SELECT") ("X_BITMAP_EXTRA") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE")))
-    ("WIDGET_DISPLAYCONTEXTMENU" pro nil                 (system) "%s, Parent, X, Y, ContextBase_ID" nil)
-    ("WINDOW"                 pro nil                 (system) "%s [, Window_Index]" (("COLORS") ("FREE") ("PIXMAP") ("RETAIN") ("TITLE") ("XPOS") ("XSIZE") ("YPOS") ("YSIZE")))
-    ("WRITE_BMP"              pro nil                 (system) "%s, Filename, Image[, R, G, B]" (("FOUR_BIT") ("HEADER_DEFINE") ("IHDR") ("RGB")))
-    ("WRITE_IMAGE"            pro nil                 (system) "%s, Filename, Format, Data [, Red, Green, Blue]" (("APPEND")))
-    ("WRITE_JPEG"             pro nil                 (system) "%s [, Filename] , Image" (("ORDER") ("PROGRESSIVE") ("QUALITY") ("TRUE") ("UNIT")))
-    ("WRITE_NRIF"             pro nil                 (system) "%s, File, Image [, R, G, B]" nil)
-    ("WRITE_PICT"             pro nil                 (system) "%s, Filename [, Image, R, G, B]" nil)
-    ("WRITE_PNG"              pro nil                 (system) "%s, Filename, Image[, R, G, B]" (("ORDER") ("TRANSPARENT") ("VERBOSE")))
-    ("WRITE_PPM"              pro nil                 (system) "%s, Filename, Image" (("ASCII")))
-    ("WRITE_SPR"              pro nil                 (system) "%s, AS, Filename" nil)
-    ("WRITE_SRF"              pro nil                 (system) "%s, Filename [, Image, R, G, B]" (("ORDER") ("WRITE_32")))
-    ("WRITE_TIFF"             pro nil                 (system) "%s, Filename [, Image, Order]" (("APPEND") ("BITS_PER_SAMPLE") ("BLUE") ("COMPRESSION") ("FLOAT") ("GEOTIFF") ("GREEN") ("LONG") ("ORIENTATION") ("PLANARCONFIG") ("RED") ("SHORT") ("UNITS") ("VERBOSE") ("XRESOL") ("YRESOL")))
-    ("WRITE_WAV"              pro nil                 (system) "%s, Filename, Data, Rate" nil)
-    ("WRITE_WAVE"             pro nil                 (system) "%s, File, Array" (("BIN") ("DATANAME") ("MESHNAME") ("NOMESHDEF") ("VECTOR")))
-    ("WRITEU"                 pro nil                 (system) "%s, Unit, Expr1 ..., Exprn" (("REWRITE") ("TRANSFER_COUNT")))
-    ("WSET"                   pro nil                 (system) "%s [, Window_Index]" nil)
-    ("WSHOW"                  pro nil                 (system) "%s [, Window_Index [, Show]]" (("ICONIC")))
-    ("XBM_EDIT"               pro nil                 (system) "%s" (("BLOCK") ("FILENAME") ("GROUP") ("XSIZE") ("YSIZE")))
-    ("XDISPLAYFILE"           pro nil                 (system) "%s, Filename" (("BLOCK") ("DONE_BUTTON") ("EDITABLE") ("FONT") ("GROUP") ("HEIGHT") ("MODAL") ("TEXT") ("TITLE") ("WIDTH") ("WTEXT")))
-    ("XDXF"                   pro nil                 (system) "%s [, Filename]" (("BLOCK") ("GROUP") ("MODAL") ("SCALE") ("TEST")))
-    ("XINTERANIMATE"          pro nil                 (system) "%s [, Rate]" (("BLOCK") ("CLOSE") ("CYCLE") ("FRAME") ("GROUP") ("IMAGE") ("KEEP_PIXMAPS") ("MODAL") ("MPEG_BITRATE") ("MPEG_CLOSE") ("MPEG_FILENAME") ("MPEG_IFRAME_GAP") ("MPEG_MOTION_VEC_LENGTH") ("MPEG_OPEN") ("MPEG_QUALITY") ("ORDER") ("SET") ("SHOWLOAD") ("TITLE") ("TRACK") ("WINDOW") ("XOFFSET") ("YOFFSET")))
-    ("XLOADCT"                pro nil                 (system) "%s" (("BLOCK") ("BOTTOM") ("FILE") ("GROUP") ("MODAL") ("NCOLORS") ("SILENT") ("UPDATECALLBACK") ("UPDATECBDATA") ("USE_CURENT")))
-    ("XMANAGER"               pro nil                 (system) "%s [, Name, ID]" (("CATCH") ("CLEANUP") ("EVENT_HANDLER") ("GROUP_LEADER") ("JUST_REG") ("NO_BLOCK")))
-    ("XMNG_TMPL"              pro nil                 (system) "%s" (("BLOCK") ("GROUP")))
-    ("XMTOOL"                 pro nil                 (system) "%s" (("BLOCK") ("GROUP")))
-    ("XOBJVIEW"               pro nil                 (system) "%s, Obj" (("BACKGROUND") ("BLOCK") ("DOUBLE_VIEW") ("GROUP") ("JUST_REG") ("MODAL") ("REFRESH") ("RENDERER") ("SCALE") ("STATIONARY") ("TEST") ("TITLE") ("TLB") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE")))
-    ("XOBJVIEW_ROTATE"        pro nil                 (system) "%s, Axis, Angle" (("PREMULTIPLY")))
-    ("XOBJVIEW_WRITE_IMAGE"   pro nil                 (system) "%s, Filename, Format" (("DIMENSIONS")))
-    ("XPALETTE"               pro nil                 (system) "%s" (("BLOCK") ("GROUP") ("UPDATECALLBACK") ("UPDATECBDATA")))
-    ("XPCOLOR"                pro nil                 (system) "%s" (("GROUP")))
-    ("XPLOT3D"                pro nil                 (system) "%s, X, Y, Z" (("BLOCK") ("COLOR") ("DOUBLE_VIEW") ("GROUP") ("LINESTYLE") ("MODAL") ("NAME") ("OVERPLOT") ("SYMBOL") ("TEST") ("THICK") ("TITLE") ("XRANGE") ("XTITLE") ("YRANGE") ("YTITLE") ("ZRANGE") ("ZTITLE")))
-    ("XROI"                   pro nil                 (system) "%s [, ImageData] [, R] [, G] [, B]" (("BLOCK") ("FLOATING") ("GROUP") ("MODAL") ("REGIONS_IN") ("REGIONS_OUT") ("REJECTED") ("RENDERER") ("ROI_COLOR") ("ROI_GEOMETRY") ("ROI_SELECT_COLOR") ("STATISTICS") ("TITLE") ("TOOLS")))
-    ("XSURFACE"               pro nil                 (system) "%s, Data" (("BLOCK") ("GROUP")))
-    ("XVAREDIT"               pro nil                 (system) "%s, Var" (("GROUP") ("NAME") ("X_SCROLL_SIZE") ("Y_SCROLL_SIZE")))
-    ("XVOLUME"                pro nil                 (system) "%s, Vol" (("BLOCK") ("GROUP") ("INTERPOLATE") ("MODAL") ("RENDERER") ("REPLACE") ("SCALE") ("TEST") ("XSIZE") ("YSIZE")))
-    ("XVOLUME_ROTATE"         pro nil                 (system) "%s, Axis, Angle" (("PREMULTIPLY")))
-    ("XVOLUME_WRITE_IMAGE"    pro nil                 (system) "%s, Filename, Format" (("DIMENSIONS")))
-    ("XYOUTS"                 pro nil                 (system) "%s, [X, Y,] String" (("ALIGNMENT") ("CHARSIZE") ("CHARTHICK") ("CLIP") ("COLOR") ("DATA") ("DEVICE") ("FONT") ("NOCLIP") ("NORMAL") ("ORIENTATION") ("T3D") ("TEXT_AXES") ("WIDTH") ("Z")))
-    ("ZOOM"                   pro nil                 (system) "%s" (("CONTINUOUS") ("FACT") ("INTERP") ("KEEP") ("NEW_WINDOW") ("XSIZE") ("YSIZE") ("ZOOM_WINDOW")))
-    ("ZOOM_24"                pro nil                 (system) "%s" (("FACT") ("RIGHT") ("XSIZE") ("YSIZE")))
-    ("A_CORRELATE"            fun nil                 (system) "Result = %s(X, Lag)" (("COVARIANCE") ("DOUBLE")))
-    ("ABS"                    fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("ACOS"                   fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("ADAPT_HIST_EQUAL"       fun nil                 (system) "Result = %s (Image)" (("CLIP") ("FCN") ("NREGIONS") ("TOP")))
-    ("ALOG"                   fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("ALOG10"                 fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("AMOEBA"                 fun nil                 (system) "Result = %s( Ftol)" (("FUNCTION_NAME") ("FUNCTION_VALUE") ("NCALLS") ("NMAX") ("P0") ("SCALE") ("SIMPLEX")))
-    ("ARG_PRESENT"            fun nil                 (system) "Result = %s(Variable)" nil)
-    ("ARRAY_EQUAL"            fun nil                 (system) "Result = %s( Op1 , Op2)" (("NO_TYPECONV")))
-    ("ASCII_TEMPLATE"         fun nil                 (system) "Result = %s( [Filename])" (("BROWSE_LINES") ("CANCEL") ("GROUP")))
-    ("ASIN"                   fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("ASSOC"                  fun nil                 (system) "Result = %s( Unit, Array_Structure [, Offset])" (("PACKED")))
-    ("ATAN"                   fun nil                 (system) "Result = %s([Y,] X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("BESELI"                 fun nil                 (system) "Result = %s(X, N)" nil)
-    ("BESELJ"                 fun nil                 (system) "Result = %s(X, N)" nil)
-    ("BESELK"                 fun nil                 (system) "Result = %s( X, N )" nil)
-    ("BESELY"                 fun nil                 (system) "Result = %s(X, N)" nil)
-    ("BETA"                   fun nil                 (system) "Result = %s( Z, W)" (("DOUBLE")))
-    ("BILINEAR"               fun nil                 (system) "Result = %s(P, IX, JY)" nil)
-    ("BIN_DATE"               fun nil                 (system) "Result = %s(Ascii_Time)" nil)
-    ("BINARY_TEMPLATE"        fun nil                 (system) "Template = %s ( [Filename])" (("CANCEL") ("GROUP") ("N_ROWS") ("TEMPLATE")))
-    ("BINDGEN"                fun nil                 (system) "Result = %s(D1, ...,D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("BINOMIAL"               fun nil                 (system) "Result = %s(V, N, P)" (("DOUBLE") ("GAUSSIAN")))
-    ("BLK_CON"                fun nil                 (system) "Result = %s( Filter, Signal)" (("B_LENGTH") ("DOUBLE")))
-    ("BROYDEN"                fun nil                 (system) "Result = %s( X, Vecfunc)" (("CHECK") ("DOUBLE") ("EPS") ("ITMAX") ("STEPMAX") ("TOLF") ("TOLMIN") ("TOLX")))
-    ("BYTARR"                 fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("BYTE"                   fun nil                 (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("BYTSCL"                 fun nil                 (system) "Result = %s( Array)" (("MAX") ("MIN") ("NAN") ("TOP") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("C_CORRELATE"            fun nil                 (system) "Result = %s( X, Y, Lag)" (("COVARIANCE") ("DOUBLE")))
-    ("CALL_EXTERNAL"          fun nil                 (system) "Result = %s(Image, Entry [, P0, ..., PN-1])" (("ALL_VALUE") ("AUTOGLUE") ("B_VALUE") ("CC") ("CDECL") ("COMPILE_DIRECTORY") ("D_VALUE") ("DEFAULT") ("EXTRA_CFLAGS") ("EXTRA_LFLAGS") ("F_VALUE") ("I_VALUE") ("IGNORE_EXISTING_GLUE") ("L64_VALUE") ("LD") ("NOCLEANUP") ("PORTABLE") ("RETURN_TYPE") ("S_VALUE") ("SHOW_ALL_OUTPUT") ("UI_VALUE") ("UL64_VALUE") ("UL_VALUE") ("UNLOAD") ("VALUE") ("VAX_FLOAT") ("VERBOSE") ("WRITE_WRAPPER")))
-    ("CALL_FUNCTION"          fun nil                 (system) "Result = %s(Name [, P1, ..., Pn])" nil)
-    ("CALL_METHOD"            fun nil                 (system) "Result = %s, Name, ObjRef, [, P1, ..., Pn]" nil)
-    ("CDF_ATTCREATE"          fun nil                 (system) "Result = %s( Id, Attribute_Name)" (("GLOBAL_SCOPE") ("VARIABLE_SCOPE")))
-    ("CDF_ATTEXISTS"          fun nil                 (system) "Result = %s( Id, Attribute [, EntryNum])" (("ZVARIABLE")))
-    ("CDF_ATTNUM"             fun nil                 (system) "Result = %s(Id, Attribute_Name)" nil)
-    ("CDF_CREATE"             fun nil                 (system) "Result = %s( Filename, [Dimensions])" (("ALPHAOSF1_DECODING") ("ALPHAOSF1_ENCODING") ("ALPHAVMSD_DECODING") ("ALPHAVMSD_ENCODING") ("ALPHAVMSG_DECODING") ("ALPHAVMSG_ENCODING") ("CLOBBER") ("COL_MAJOR") ("DECSTATION_DECODING") ("DECSTATION_ENCODING") ("HOST_DECODING") ("HOST_ENCODING") ("HP_DECODING") ("HP_ENCODING") ("IBMPC_DECODING") ("IBMPC_ENCODING") ("IBMRS_DECODING") ("IBMRS_ENCODING") ("MAC_DECODING") ("MAC_ENCODING") ("MULTI_FILE") ("NETWORK_DECODING") ("NETWORK_ENCODING") ("NEXT_DECODING") ("NEXT_ENCODING") ("ROW_MAJOR") ("SGI_DECODING") ("SGI_ENCODING") ("SINGLE_FILE") ("SUN_DECODING") ("SUN_ENCODING")))
-    ("CDF_ENCODE_EPOCH"       fun nil                 (system) "Result = %s(Epoch)" (("EPOCH")))
-    ("CDF_ERROR"              fun nil                 (system) "Result = %s(Status)" nil)
-    ("CDF_EXISTS"             fun nil                 (system) "Result = %s( )" nil)
-    ("CDF_INQUIRE"            fun nil                 (system) "Result = %s(Id)" nil)
-    ("CDF_OPEN"               fun nil                 (system) "Result = %s(Filename)" nil)
-    ("CDF_PARSE_EPOCH"        fun nil                 (system) "Result = %s(Epoch_string)" nil)
-    ("CDF_VARCREATE"          fun nil                 (system) "Result = %s( Id, Name [, DimVary])" (("ALLOCATERECS") ("CDF_BYTE") ("CDF_CHAR") ("CDF_DOUBLE") ("CDF_EPOCH") ("CDF_FLOAT") ("CDF_INT1") ("CDF_INT2") ("CDF_INT4") ("CDF_REAL4") ("CDF_REAL8") ("CDF_UCHAR") ("CDF_UINT1") ("CDF_UINT2") ("CDF_UINT4") ("DIMENSIONS") ("NUMELEM") ("REC_NOVARY") ("REC_VARY") ("ZVARIABLE")))
-    ("CDF_VARINQ"             fun nil                 (system) "Result = %s( Id, Variable)" (("ZVARIABLE")))
-    ("CDF_VARNUM"             fun nil                 (system) "Result = %s( Id, VarName [, IsZVar] )" nil)
-    ("CEIL"                   fun nil                 (system) "Result = %s(X)" (("L64") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("CHEBYSHEV"              fun nil                 (system) "Result = %s(D, N)" nil)
-    ("CHECK_MATH"             fun nil                 (system) "Result = %s()" (("MASK") ("NOCLEAR") ("PRINT")))
-    ("CHISQR_CVF"             fun nil                 (system) "Result = %s(P, Df)" nil)
-    ("CHISQR_PDF"             fun nil                 (system) "Result = %s(V, Df)" nil)
-    ("CHOLSOL"                fun nil                 (system) "Result = %s( A, P, B)" (("DOUBLE")))
-    ("CINDGEN"                fun nil                 (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("CLUST_WTS"              fun nil                 (system) "Result = %s( Array)" (("DOUBLE") ("N_CLUSTERS") ("N_ITERATIONS") ("VARIABLE_WTS")))
-    ("CLUSTER"                fun nil                 (system) "Result = %s( Array, Weights)" (("DOUBLE") ("N_CLUSTERS")))
-    ("COLOR_QUAN"             fun nil                 (system) "Result = %s( Image_R, Image_G, Image_B, R, G, B) or Result = COLOR_QUAN( Image, Dim, R, G, B )" (("COLORS") ("CUBE") ("DITHER") ("ERROR") ("GET_TRANSLATION") ("MAP_ALL") ("TRANSLATION")))
-    ("COLORMAP_APPLICABLE"    fun nil                 (system) "Result = %s( redrawRequired )" nil)
-    ("COMFIT"                 fun nil                 (system) "Result = %s( X, Y, A)" (("EXPONENTIAL") ("GEOMETRIC") ("GOMPERTZ") ("HYPERBOLIC") ("LOGISTIC") ("LOGSQUARE") ("SIGMA") ("WEIGHTS") ("YFIT")))
-    ("COMPLEX"                fun nil                 (system) "Result = %s( Real [, Imaginary] ) or Result = COMPLEX(Expression, Offset, Dim1 [, ..., Dim8])" (("DOUBLE") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("COMPLEXARR"             fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("COMPLEXROUND"           fun nil                 (system) "Result = %s(Input)" nil)
-    ("COMPUTE_MESH_NORMALS"   fun nil                 (system) "Result = %s( fVerts[, iConn] )" nil)
-    ("COND"                   fun nil                 (system) "Result = %s( A)" (("DOUBLE") ("LNORM")))
-    ("CONGRID"                fun nil                 (system) "Result = %s( Array, X, Y, Z)" (("CENTER") ("CUBIC") ("INTERP") ("MINUS_ONE")))
-    ("CONJ"                   fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("CONVERT_COORD"          fun nil                 (system) "Result = %s( X [, Y [, Z]])" (("DATA") ("DEVICE") ("DOUBLE") ("NORMAL") ("T3D") ("TO_DATA") ("TO_DEVICE") ("TO_NORMAL")))
-    ("CONVOL"                 fun nil                 (system) "Result = %s( Array, Kernel [, Scale_Factor])" (("CENTER") ("EDGE_TRUNCATE") ("EDGE_WRAP") ("MISSING") ("NAN") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("COORD2TO3"              fun nil                 (system) "Result = %s( Mx, My, Dim, D0 [, PTI] )" nil)
-    ("CORRELATE"              fun nil                 (system) "Result = %s( X [, Y])" (("COVARIANCE") ("DOUBLE")))
-    ("COS"                    fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("COSH"                   fun nil                 (system) "Result = %s(X)" nil)
-    ("CRAMER"                 fun nil                 (system) "Result = %s( A, B)" (("DOUBLE") ("ZERO")))
-    ("CREATE_STRUCT"          fun nil                 (system) "Result = %s( [Tag1, Value1, ..., Tagn, Valuen] ) or Result = CREATE_STRUCT()" (("NAME")))
-    ("CROSSP"                 fun nil                 (system) "Result = %s(V1, V2)" nil)
-    ("CRVLENGTH"              fun nil                 (system) "Result = %s( X, Y)" (("DOUBLE")))
-    ("CT_LUMINANCE"           fun nil                 (system) "Result = %s( [R, G, B])" (("BRIGHT") ("DARK") ("READ_TABLES")))
-    ("CTI_TEST"               fun nil                 (system) "Result = %s( Obfreq)" (("COEFF") ("CORRECTED") ("CRAMV") ("DF") ("EXFREQ") ("RESIDUAL")))
-    ("CURVEFIT"               fun nil                 (system) "Result = %s( X, Y, Weights, A [, Sigma])" (("CHISQ") ("DOUBLE") ("FUNCTION_NAME") ("ITER") ("ITMAX") ("NODERIVATIVE") ("TOL")))
-    ("CV_COORD"               fun nil                 (system) "Result = %s()" (("DEGREES") ("DOUBLE") ("FROM_CYLIN") ("FROM_POLAR") ("FROM_RECT") ("FROM_SPHERE") ("TO_CYLIN") ("TO_POLAR") ("TO_RECT") ("TO_SPHERE")))
-    ("CVTTOBM"                fun nil                 (system) "Result = %s( Array)" (("THRESHOLD")))
-    ("CW_ANIMATE"             fun nil                 (system) "Result = %s( Parent, Sizex, Sizey, Nframes)" (("NO_KILL") ("OPEN_FUNC") ("PIXMAPS") ("TRACK") ("UNAME") ("UVALUE")))
-    ("CW_ARCBALL"             fun nil                 (system) "Result = %s( Parent)" (("COLORS") ("FRAME") ("LABEL") ("RETAIN") ("SIZE") ("UNAME") ("UPDATE") ("UVALUE") ("VALUE")))
-    ("CW_BGROUP"              fun nil                 (system) "Result = %s( Parent, Names)" (("BUTTON_UVALUE") ("COLUMN") ("EVENT_FUNC") ("EXCLUSIVE") ("FONT") ("FRAME") ("IDS") ("LABEL_LEFT") ("LABEL_TOP") ("MAP") ("NO_RELEASE") ("NONEXCLUSIVE") ("RETURN_ID") ("RETURN_INDEX") ("RETURN_NAME") ("ROW") ("SCROLL") ("SET_VALUE") ("SPACE") ("UNAME") ("UVALUE") ("X_SCROLL_SIZE") ("XOFFSET") ("XPAD") ("XSIZE") ("Y_SCROLL_SIZE") ("YOFFSET") ("YPAD") ("YSIZE")))
-    ("CW_CLR_INDEX"           fun nil                 (system) "Result = %s( Parent)" (("COLOR_VALUES") ("EVENT_FUNC") ("FRAME") ("LABEL") ("NCOLORS") ("START_COLOR") ("UNAME") ("UVALUE") ("VALUE") ("XSIZE") ("YSIZE")))
-    ("CW_COLORSEL"            fun nil                 (system) "Result = %s( Parent)" (("FRAME") ("UNAME") ("UVALUE") ("XOFFSET") ("YOFFSET")))
-    ("CW_DEFROI"              fun nil                 (system) "Result = %s( Draw)" (("IMAGE_SIZE") ("OFFSET") ("ORDER") ("RESTORE") ("ZOOM")))
-    ("CW_FIELD"               fun nil                 (system) "Result = %s( Parent)" (("ALL_EVENTS") ("COLUMN") ("FIELDFONT") ("FLOATING") ("FONT") ("FRAME") ("INTEGER") ("LONG") ("NOEDIT") ("RETURN_EVENTS") ("ROW") ("STRING") ("TEXT_FRAME") ("TITLE") ("UNAME") ("UVALUE") ("VALUE") ("XSIZE") ("YSIZE")))
-    ("CW_FILESEL"             fun nil                 (system) "Result = %s ( Parent)" (("FILENAME") ("FILTER") ("FIX_FILTER") ("FRAME") ("IMAGE_FILTER") ("MULTIPLE") ("PATH") ("SAVE") ("UNAME") ("UVALUE") ("WARN_EXIST")))
-    ("CW_FORM"                fun nil                 (system) "Result = %s( [Parent,] Desc)" (("COLUMN") ("IDS") ("TITLE") ("UNAME") ("UVALUE")))
-    ("CW_FSLIDER"             fun nil                 (system) "Result = %s( Parent)" (("DOUBLE") ("DRAG") ("EDIT") ("FORMAT") ("FRAME") ("MAXIMUM") ("MINIMUM") ("SCROLL") ("SUPPRESS_VALUE") ("TITLE") ("UNAME") ("UVALUE") ("VALUE") ("VERTICAL") ("XSIZE") ("YSIZE")))
-    ("CW_LIGHT_EDITOR"        fun nil                 (system) "Result = %s (Parent)" (("DIRECTION_DISABLED") ("DRAG_EVENTS") ("FRAME") ("HIDE_DISABLED") ("LIGHT") ("LOCATION_DISABLED") ("TYPE_DISABLED") ("UVALUE") ("XRANGE") ("XSIZE") ("YRANGE") ("YSIZE") ("ZRANGE")))
-    ("CW_ORIENT"              fun nil                 (system) "Result = %s( Parent)" (("AX") ("AZ") ("FRAME") ("TITLE") ("UNAME") ("UVALUE") ("XSIZE") ("YSIZE")))
-    ("CW_PALETTE_EDITOR"      fun nil                 (system) "Result = %s (Parent)" (("DATA") ("FRAME") ("HISTOGRAM") ("HORIZONTAL") ("SELECTION") ("UNAME") ("UVALUE") ("XSIZE") ("YSIZE")))
-    ("CW_PDMENU"              fun nil                 (system) "Result = %s( Parent, Desc)" (("COLUMN") ("CONTEXT_MENU") ("DELIMITER") ("FONT") ("HELP") ("IDS") ("MBAR") ("RETURN_FULL_NAME") ("RETURN_ID") ("RETURN_INDEX") ("RETURN_NAME") ("UNAME") ("UVALUE") ("XOFFSET") ("YOFFSET")))
-    ("CW_RGBSLIDER"           fun nil                 (system) "Result = %s( Parent)" (("CMY") ("COLOR_INDEX") ("DRAG") ("FRAME") ("GRAPHICS_LEVEL") ("HLS") ("HSV") ("LENGTH") ("RGB") ("UNAME") ("UVALUE") ("VALUE") ("VERTICAL")))
-    ("CW_TMPL"                fun nil                 (system) "Result = %s( Parent)" (("UNAME") ("UVALUE")))
-    ("CW_ZOOM"                fun nil                 (system) "Result = %s( Parent)" (("FRAME") ("MAX") ("MIN") ("RETAIN") ("SAMPLE") ("SCALE") ("TRACK") ("UNAME") ("UVALUE") ("X_SCROLL_SIZE") ("X_ZSIZE") ("XSIZE") ("Y_SCROLL_SIZE") ("Y_ZSIZE") ("YSIZE")))
-    ("DBLARR"                 fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("DCINDGEN"               fun nil                 (system) "Result = %s( D1, ..., D8 )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("DCOMPLEX"               fun nil                 (system) "Result = %s( Real [, Imaginary] ) or Result = DCOMPLEX( Expression, Offset, Dim1 [, ..., Dim8] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("DCOMPLEXARR"            fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("DEFROI"                 fun nil                 (system) "Result = %s( Sx, Sy [, Xverts, Yverts])" (("NOFILL") ("NOREGION") ("RESTORE") ("X0") ("Y0") ("ZOOM")))
-    ("DEMO_MODE"              fun nil                 (system) "Result = %s()" nil)
-    ("DERIV"                  fun nil                 (system) "Result = %s([X,] Y)" nil)
-    ("DERIVSIG"               fun nil                 (system) "Result = %s( [X, Y, Sigx,] Sigy )" nil)
-    ("DETERM"                 fun nil                 (system) "Result = %s( A)" (("CHECK") ("DOUBLE") ("ZERO")))
-    ("DIALOG_MESSAGE"         fun nil                 (system) "Result = %s( Message_Text)" (("CANCEL") ("DEFAULT_CANCEL") ("DEFAULT_NO") ("DIALOG_PARENT") ("DISPLAY_NAME") ("ERROR") ("INFORMATION") ("QUESTION") ("RESOURCE_NAME") ("TITLE")))
-    ("DIALOG_PICKFILE"        fun nil                 (system) "Result = %s()" (("DIALOG_PARENT") ("DIRECTORY") ("DISPLAY_NAME") ("FILE") ("FILTER") ("FIX_FILTER") ("GET_PATH") ("GROUP") ("MULTIPLE_FILES") ("MUST_EXIST") ("PATH") ("READ") ("RESOURCE_NAME") ("TITLE") ("WRITE")))
-    ("DIALOG_PRINTERSETUP"    fun nil                 (system) "Result = %s( [PrintDestination])" (("DIALOG_PARENT") ("DISPLAY_NAME") ("RESOURCE_NAME") ("TITLE")))
-    ("DIALOG_PRINTJOB"        fun nil                 (system) "Result = %s( [PrintDestination])" (("DIALOG_PARENT") ("DISPLAY_NAME") ("RESOURCE_NAME") ("TITLE")))
-    ("DIALOG_READ_IMAGE"      fun nil                 (system) "Result = %s ( [Filename])" (("BLUE") ("DIALOG_PARENT") ("FILE") ("FILTER_TYPE") ("FIX_FILTER") ("GET_PATH") ("GREEN") ("IMAGE") ("PATH") ("QUERY") ("RED") ("TITLE")))
-    ("DIALOG_WRITE_IMAGE"     fun nil                 (system) "Result = %s ( Image [, R, G, B])" (("DIALOG_PARENT") ("FILE") ("FIX_TYPE") ("NOWRITE") ("OPTIONS") ("PATH") ("TITLE") ("TYPE") ("WARN_EXIST")))
-    ("DIGITAL_FILTER"         fun nil                 (system) "Result = %s( Flow, Fhigh, A, Nterms )" nil)
-    ("DILATE"                 fun nil                 (system) "Result = %s( Image, Structure [, X0 [, Y0 [, Z0]]])" (("BACKGROUND") ("CONSTRAINED") ("GRAY") ("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES")))
-    ("DINDGEN"                fun nil                 (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("DIST"                   fun nil                 (system) "Result = %s(N [, M])" nil)
-    ("DOUBLE"                 fun nil                 (system) "Result = %s(Expression[, Offset [, Dim1, ..., Dimn]])" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("EIGENQL"                fun nil                 (system) "Result = %s( A)" (("ABSOLUTE") ("ASCENDING") ("DOUBLE") ("EIGENVECTORS") ("OVERWRITE") ("RESIDUAL")))
-    ("EIGENVEC"               fun nil                 (system) "Result = %s( A, Eval)" (("DOUBLE") ("ITMAX") ("RESIDUAL")))
-    ("ELMHES"                 fun nil                 (system) "Result = %s( A)" (("COLUMN") ("DOUBLE") ("NO_BALANCE")))
-    ("EOF"                    fun nil                 (system) "Result = %s(Unit)" nil)
-    ("EOS_EH_CONVANG"         fun nil                 (system) "Result = %s(inAngle, code)" nil)
-    ("EOS_EH_GETVERSION"      fun nil                 (system) "Result = %s(fid, version)" nil)
-    ("EOS_EH_IDINFO"          fun nil                 (system) "Result = %s(fid, HDFfid, sdInterfaceID)" nil)
-    ("EOS_EXISTS"             fun nil                 (system) "Result = %s( )" nil)
-    ("EOS_GD_ATTACH"          fun nil                 (system) "Result = %s(fid, gridname)" nil)
-    ("EOS_GD_ATTRINFO"        fun nil                 (system) "Result = %s(gridID, attrname, numbertype, count)" nil)
-    ("EOS_GD_BLKSOMOFFSET"    fun nil                 (system) "Result = %s(gridID, offset, code)" nil)
-    ("EOS_GD_CLOSE"           fun nil                 (system) "Result = %s(fid)" nil)
-    ("EOS_GD_COMPINFO"        fun nil                 (system) "Result = %s(gridID, fieldname, compcode, compparm)" nil)
-    ("EOS_GD_CREATE"          fun nil                 (system) "Result = %s(fid, gridname, xdimsize, ydimsize, upleftpt, lowrightpt)" nil)
-    ("EOS_GD_DEFBOXREGION"    fun nil                 (system) "Result = %s(gridID, cornerlon, cornerlat)" nil)
-    ("EOS_GD_DEFCOMP"         fun nil                 (system) "Result = %s(gridID, compcode [, compparm] )" nil)
-    ("EOS_GD_DEFDIM"          fun nil                 (system) "Result = %s(gridID, dimname, dim)" nil)
-    ("EOS_GD_DEFFIELD"        fun nil                 (system) "Result = %s(gridID, fieldname, dimlist, numbertype)" (("MERGE")))
-    ("EOS_GD_DEFORIGIN"       fun nil                 (system) "Result = %s(gridID, origincode)" nil)
-    ("EOS_GD_DEFPIXREG"       fun nil                 (system) "Result = %s(gridID, pixreg)" nil)
-    ("EOS_GD_DEFPROJ"         fun nil                 (system) "Result = %s(gridID, projcode, zonecode, spherecode, projparm)" nil)
-    ("EOS_GD_DEFTILE"         fun nil                 (system) "Result = %s( gridID, tilecode [, tilerank, tiledims] )" nil)
-    ("EOS_GD_DEFTIMEPERIOD"   fun nil                 (system) "Result = %s(gridID, periodID, starttime, stoptime)" nil)
-    ("EOS_GD_DEFVRTREGION"    fun nil                 (system) "Result = %s(gridID, regionID, vertObj, range)" nil)
-    ("EOS_GD_DETACH"          fun nil                 (system) "Result = %s(gridID)" nil)
-    ("EOS_GD_DIMINFO"         fun nil                 (system) "Result = %s(gridID, dimname)" nil)
-    ("EOS_GD_DUPREGION"       fun nil                 (system) "Result = %s(regionID)" nil)
-    ("EOS_GD_EXTRACTREGION"   fun nil                 (system) "Result = %s(gridID, regionID, fieldname, buffer)" nil)
-    ("EOS_GD_FIELDINFO"       fun nil                 (system) "Result = %s(gridID, fieldname, rank, dims, numbertype, dimlist)" nil)
-    ("EOS_GD_GETFILLVALUE"    fun nil                 (system) "Result = %s(gridID, fieldname, fillvalue)" nil)
-    ("EOS_GD_GETPIXELS"       fun nil                 (system) "Result = %s(gridID, nLonLat, lonVal, latVal, pixRow, pixCol)" nil)
-    ("EOS_GD_GETPIXVALUES"    fun nil                 (system) "Result = %s(gridID, nPixels, pixRow, pixCol, fieldname, buffer)" nil)
-    ("EOS_GD_GRIDINFO"        fun nil                 (system) "Result = %s(gridID, xdimsize, ydimsize, upleft, lowright)" nil)
-    ("EOS_GD_INQATTRS"        fun nil                 (system) "Result = %s( gridID, attrlist)" (("LENGTH")))
-    ("EOS_GD_INQDIMS"         fun nil                 (system) "Result = %s(gridID, dimname, dims)" nil)
-    ("EOS_GD_INQFIELDS"       fun nil                 (system) "Result = %s(gridID, fieldlist, rank, numbertype)" nil)
-    ("EOS_GD_INQGRID"         fun nil                 (system) "Result = %s( filename, gridlist)" (("LENGTH")))
-    ("EOS_GD_INTERPOLATE"     fun nil                 (system) "Result = %s(gridID, Interp, lonVal, latVal, fieldname, interpVal)" nil)
-    ("EOS_GD_NENTRIES"        fun nil                 (system) "Result = %s( gridID, entrycode)" (("LENGTH")))
-    ("EOS_GD_OPEN"            fun nil                 (system) "Result = %s( filename, access)" (("CREATE") ("RDWR") ("READ")))
-    ("EOS_GD_ORIGININFO"      fun nil                 (system) "Result = %s(gridID, origincode)" nil)
-    ("EOS_GD_PIXREGINFO"      fun nil                 (system) "Result = %s(gridID, pixregcode)" nil)
-    ("EOS_GD_PROJINFO"        fun nil                 (system) "Result = %s(gridID, projcode, zonecode, spherecode, projparm)" nil)
-    ("EOS_GD_QUERY"           fun nil                 (system) "Result = %s( Filename, GridName, [Info])" nil)
-    ("EOS_GD_READATTR"        fun nil                 (system) "Result = %s(gridID, attrname, datbuf)" nil)
-    ("EOS_GD_READFIELD"       fun nil                 (system) "Result = %s( gridID, fieldname, buffer)" (("EDGE") ("START") ("STRIDE")))
-    ("EOS_GD_READTILE"        fun nil                 (system) "Result = %s(gridID, fieldname, tilecoords, buffer)" nil)
-    ("EOS_GD_REGIONINFO"      fun nil                 (system) "Result = %s(gridID, regionID, fieldname, ntype, rank, dims, size, upleftpt, lowrightpt)" nil)
-    ("EOS_GD_SETFILLVALUE"    fun nil                 (system) "Result = %s(gridID, fieldname, fillvalue)" nil)
-    ("EOS_GD_SETTILECACHE"    fun nil                 (system) "Result = %s(gridID, fieldname, maxcache, cachecode)" nil)
-    ("EOS_GD_TILEINFO"        fun nil                 (system) "Result = %s(gridID, fieldname, tilecode, tilerank, tiledims)" nil)
-    ("EOS_GD_WRITEATTR"       fun nil                 (system) "Result = %s( gridID, attrname, datbuf)" (("COUNT") ("HDF_TYPE")))
-    ("EOS_GD_WRITEFIELD"      fun nil                 (system) "Result = %s( gridID, fieldname, data)" (("EDGE") ("START") ("STRIDE")))
-    ("EOS_GD_WRITEFIELDMETA"  fun nil                 (system) "Result = %s(gridID, fieldname, dimlist, numbertype)" nil)
-    ("EOS_GD_WRITETILE"       fun nil                 (system) "Result = %s(gridID, fieldname, tilecoords, data)" nil)
-    ("EOS_PT_ATTACH"          fun nil                 (system) "Result = %s(fid, pointname)" nil)
-    ("EOS_PT_ATTRINFO"        fun nil                 (system) "Result = %s( pointID, attrname, numbertype, count)" nil)
-    ("EOS_PT_BCKLINKINFO"     fun nil                 (system) "Result = %s(pointID, level, linkfield)" nil)
-    ("EOS_PT_CLOSE"           fun nil                 (system) "Result = %s(fid)" nil)
-    ("EOS_PT_CREATE"          fun nil                 (system) "Result = %s(fid, pointname)" nil)
-    ("EOS_PT_DEFBOXREGION"    fun nil                 (system) "Result = %s(pointID, cornerlon, cornerlat)" nil)
-    ("EOS_PT_DEFLEVEL"        fun nil                 (system) "Result = %s(pointID, levelname, fieldlist, fieldtype, fieldorder)" nil)
-    ("EOS_PT_DEFLINKAGE"      fun nil                 (system) "Result = %s(pointID, parent, child, linkfield)" nil)
-    ("EOS_PT_DEFTIMEPERIOD"   fun nil                 (system) "Result = %s(pointID, starttime, stoptime)" nil)
-    ("EOS_PT_DEFVRTREGION"    fun nil                 (system) "Result = %s( pointID, regionID, vertObj, range)" nil)
-    ("EOS_PT_DETACH"          fun nil                 (system) "Result = %s(pointID)" nil)
-    ("EOS_PT_EXTRACTPERIOD"   fun nil                 (system) "Result = %s(pointID, periodID, level, fieldlist, buffer)" nil)
-    ("EOS_PT_EXTRACTREGION"   fun nil                 (system) "Result = %s( pointID, regionID, level, fieldlist, buffer)" nil)
-    ("EOS_PT_FWDLINKINFO"     fun nil                 (system) "Result = %s(pointID, level, linkfield)" nil)
-    ("EOS_PT_GETLEVELNAME"    fun nil                 (system) "Result = %s( pointID, level, levelname)" (("LENGTH")))
-    ("EOS_PT_GETRECNUMS"      fun nil                 (system) "Result = %s( pointID, inlevel, outlevel, inNrec, inRecs, outNrec, outRecs)" nil)
-    ("EOS_PT_INQATTRS"        fun nil                 (system) "Result = %s( pointID, attrlist)" (("LENGTH")))
-    ("EOS_PT_INQPOINT"        fun nil                 (system) "Result = %s( filename, pointlist)" (("LENGTH")))
-    ("EOS_PT_LEVELINDX"       fun nil                 (system) "Result = %s( pointID, levelname)" nil)
-    ("EOS_PT_LEVELINFO"       fun nil                 (system) "Result = %s(pointID, level, fieldlist, fldtype, fldorder)" nil)
-    ("EOS_PT_NFIELDS"         fun nil                 (system) "Result = %s( pointID, level)" (("LENGTH")))
-    ("EOS_PT_NLEVELS"         fun nil                 (system) "Result = %s(pointID)" nil)
-    ("EOS_PT_NRECS"           fun nil                 (system) "Result = %s( pointID, level)" nil)
-    ("EOS_PT_OPEN"            fun nil                 (system) "Result = %s( fieldname)" (("CREATE") ("RDWR") ("READ")))
-    ("EOS_PT_PERIODINFO"      fun nil                 (system) "Result = %s(pointID, periodID, level, fieldlist, size)" nil)
-    ("EOS_PT_PERIODRECS"      fun nil                 (system) "Result = %s(pointID, periodID, level, nrec, recs)" nil)
-    ("EOS_PT_QUERY"           fun nil                 (system) "Result = %s( Filename, PointName, [Info] )" nil)
-    ("EOS_PT_READATTR"        fun nil                 (system) "Result = %s(pointID, attrname, datbuf)" nil)
-    ("EOS_PT_READLEVEL"       fun nil                 (system) "Result = %s(pointID, level, fieldlist, nrec, recs, buffer)" nil)
-    ("EOS_PT_REGIONINFO"      fun nil                 (system) "Result = %s(pointID, regionID, level, fieldlist, size)" nil)
-    ("EOS_PT_REGIONRECS"      fun nil                 (system) "Result = %s(pointID, regionID, level, nrec, recs)" nil)
-    ("EOS_PT_SIZEOF"          fun nil                 (system) "Result = %s(pointID, fieldlist, fldlevel)" nil)
-    ("EOS_PT_UPDATELEVEL"     fun nil                 (system) "Result = %s(pointID, level, field, list, nrec, recs, data)" nil)
-    ("EOS_PT_WRITEATTR"       fun nil                 (system) "Result = %s( pointID, attrname, datbuf)" (("COUNT") ("HDF_TYPE")))
-    ("EOS_PT_WRITELEVEL"      fun nil                 (system) "Result = %s(pointID, level, nrec, data)" nil)
-    ("EOS_QUERY"              fun nil                 (system) "Result = %s( Filename, [Info] )" nil)
-    ("EOS_SW_ATTACH"          fun nil                 (system) "Result = %s(fid, swathname)" nil)
-    ("EOS_SW_ATTRINFO"        fun nil                 (system) "Result = %s(swathID, attrname, numbertype, count)" nil)
-    ("EOS_SW_CLOSE"           fun nil                 (system) "Result = %s(fid)" nil)
-    ("EOS_SW_COMPINFO"        fun nil                 (system) "Result = %s(swathID, fieldname, compcode, compparm)" nil)
-    ("EOS_SW_CREATE"          fun nil                 (system) "Result = %s(fid, swathname)" nil)
-    ("EOS_SW_DEFBOXREGION"    fun nil                 (system) "Result = %s(swathID, cornerlon, cornerlat, mode)" nil)
-    ("EOS_SW_DEFCOMP"         fun nil                 (system) "Result = %s( swathID, compcode, [, compparm] )" nil)
-    ("EOS_SW_DEFDATAFIELD"    fun nil                 (system) "Result = %s( swathID, fieldname, dimlist, numbertype)" (("MERGE")))
-    ("EOS_SW_DEFDIM"          fun nil                 (system) "Result = %s(swathID, fieldname, dim)" nil)
-    ("EOS_SW_DEFDIMMAP"       fun nil                 (system) "Result = %s(swathID, geodim, datadim, offset, increment)" nil)
-    ("EOS_SW_DEFGEOFIELD"     fun nil                 (system) "Result = %s( swathID, fieldname, dimlist, numbertype)" (("MERGE")))
-    ("EOS_SW_DEFIDXMAP"       fun nil                 (system) "Result = %s(swathID, geodim, datadim, index)" nil)
-    ("EOS_SW_DEFTIMEPERIOD"   fun nil                 (system) "Result = %s(swathID, starttime , stoptime, mode)" nil)
-    ("EOS_SW_DEFVRTREGION"    fun nil                 (system) "Result = %s(swathID, regionID, vertObj, range)" nil)
-    ("EOS_SW_DETACH"          fun nil                 (system) "Result = %s(swathID)" nil)
-    ("EOS_SW_DIMINFO"         fun nil                 (system) "Result = %s(swathID, dimname)" nil)
-    ("EOS_SW_DUPREGION"       fun nil                 (system) "Result = %s(regionID)" nil)
-    ("EOS_SW_EXTRACTPERIOD"   fun nil                 (system) "Result = %s(swathID, periodID, fieldname, external_mode, buffer)" nil)
-    ("EOS_SW_EXTRACTREGION"   fun nil                 (system) "Result = %s(swathID, regionID, fieldname, external_mode, buffer)" nil)
-    ("EOS_SW_FIELDINFO"       fun nil                 (system) "Result = %s(swathID, fieldname, rank, dims, numbertype, dimlist)" nil)
-    ("EOS_SW_GETFILLVALUE"    fun nil                 (system) "Result = %s(swathID, fieldname, fillvalue)" nil)
-    ("EOS_SW_IDXMAPINFO"      fun nil                 (system) "Result = %s(swathID, geodim, datadim, index)" nil)
-    ("EOS_SW_INQATTRS"        fun nil                 (system) "Result = %s( swathID, attrlist)" (("LENGTH")))
-    ("EOS_SW_INQDATAFIELDS"   fun nil                 (system) "Result = %s(swathID, fieldlist, rank, numbertype)" nil)
-    ("EOS_SW_INQDIMS"         fun nil                 (system) "Result = %s(swathID, dimname, dim)" nil)
-    ("EOS_SW_INQGEOFIELDS"    fun nil                 (system) "Result = %s(swathID, fieldlist, rank, numbertype)" nil)
-    ("EOS_SW_INQIDXMAPS"      fun nil                 (system) "Result = %s(swathID, idxmap, idxsizes)" nil)
-    ("EOS_SW_INQMAPS"         fun nil                 (system) "Result = %s(swathID, dimmap, offset, increment)" nil)
-    ("EOS_SW_INQSWATH"        fun nil                 (system) "Result = %s( filename, swathlist)" (("LENGTH")))
-    ("EOS_SW_MAPINFO"         fun nil                 (system) "Result = %s(swathID, geodim, datadim, offset, increment)" nil)
-    ("EOS_SW_NENTRIES"        fun nil                 (system) "Result = %s( swathID, entrycode)" (("LENGTH")))
-    ("EOS_SW_OPEN"            fun nil                 (system) "Result = %s( filename)" (("CREATE") ("RDWR") ("READ")))
-    ("EOS_SW_PERIODINFO"      fun nil                 (system) "Result = %s(swathID, periodID, fieldname, ntype, rank, dims, size)" nil)
-    ("EOS_SW_QUERY"           fun nil                 (system) "Result=%s(Filename, SwathName, [Info])" nil)
-    ("EOS_SW_READATTR"        fun nil                 (system) "Result = %s(swathID, attrname, datbuf)" nil)
-    ("EOS_SW_READFIELD"       fun nil                 (system) "Result = %s( swathID, fieldname, buffer)" (("EDGE") ("START") ("STRIDE")))
-    ("EOS_SW_REGIONINFO"      fun nil                 (system) "Result = %s(swathID, regionID, fieldname, ntype, rank, dims, size)" nil)
-    ("EOS_SW_SETFILLVALUE"    fun nil                 (system) "Result = %s(swathID, fieldname, fillvalue)" nil)
-    ("EOS_SW_WRITEATTR"       fun nil                 (system) "Result = %s( swathID, attrname, datbuf)" (("COUNT") ("HDF_TYPE")))
-    ("EOS_SW_WRITEDATAMETA"   fun nil                 (system) "Result = %s(swathID, fieldname, dimlist, numbertype)" nil)
-    ("EOS_SW_WRITEFIELD"      fun nil                 (system) "Result = %s( swathID, fieldname, cut, data)" (("EDGE") ("START") ("STRIDE")))
-    ("EOS_SW_WRITEGEOMETA"    fun nil                 (system) "Result = %s(swathID, fieldname, dimlist, numbertype)" nil)
-    ("ERF"                    fun nil                 (system) "Result = %s(X)" nil)
-    ("ERFC"                   fun nil                 (system) "Result = %s(X)" nil)
-    ("ERFCX"                  fun nil                 (system) "Result = %s(X)" nil)
-    ("ERODE"                  fun nil                 (system) "Result = %s( Image, Structure [, X0 [, Y0 [, Z0]]])" (("GRAY") ("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES")))
-    ("ERRORF"                 fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("EXECUTE"                fun nil                 (system) "Result = %s(String [, QuietCompile])" nil)
-    ("EXP"                    fun nil                 (system) "Result = %s(Expression)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("EXPAND_PATH"            fun nil                 (system) "Result = %s( String)" (("ALL_DIRS") ("ARRAY") ("COUNT") ("DLM") ("HELP")))
-    ("EXPINT"                 fun nil                 (system) "Result = %s( N, X)" (("DOUBLE") ("EPS") ("ITMAX") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("EXTRAC"                 fun nil                 (system) "Result = %s( Array, C1, C2, ..., Cn, S1, S2, ..., Sn )" nil)
-    ("EXTRACT_SLICE"          fun nil                 (system) "Result = %s( Vol, Xsize, Ysize, Xcenter, Ycenter, Zcenter, Xrot, Yrot, Zrot)" (("ANISOTROPY") ("CUBIC") ("OUT_VAL") ("RADIANS") ("SAMPLE") ("VERTICES")))
-    ("F_CVF"                  fun nil                 (system) "Result = %s(P, Dfn, Dfd)" nil)
-    ("F_PDF"                  fun nil                 (system) "Result = %s(V, Dfn, Dfd)" nil)
-    ("FACTORIAL"              fun nil                 (system) "Result = %s( N)" (("STIRLING") ("UL64")))
-    ("FFT"                    fun nil                 (system) "Result = %s( Array [, Direction])" (("DIMENSION") ("DOUBLE") ("INVERSE") ("OVERWRITE") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("FILE_EXPAND_PATH"       fun nil                 (system) "Result = %s (Path)" nil)
-    ("FILE_INFO"              fun nil                 (system) "Result = %s(Path)" (("NOEXPAND_PATH")))
-    ("FILE_SEARCH"            fun nil                 (system) "Result = %s(Path_Specification) or for recursive searching, Result = FILE_SEARCH(Dir_Specification, Recur_Pattern)" (("COUNT") ("EXPAND_ENVIRONMENT") ("EXPAND_TILDE") ("FOLD_CASE") ("FULLY_QUALIFY_PATH") ("ISSUE_ACCESS_ERROR") ("MARK_DIRECTORY") ("MATCH_ALL_INITIAL_DOT") ("MATCH_INITIAL_DOT") ("NOSORT") ("QUOTE") ("TEST_BLOCK_SPECIAL") ("TEST_CHARACTER_SPECIAL") ("TEST_DANGLING_SYMLINK") ("TEST_DIRECTORY") ("TEST_EXECUTABLE") ("TEST_GROUP") ("TEST_NAMED_PIPE") ("TEST_READ") ("TEST_REGULAR") ("TEST_SETGID") ("TEST_SETUID") ("TEST_SOCKET") ("TEST_STICKY_BIT") ("TEST_SYMLINK") ("TEST_USER") ("TEST_WRITE") ("TEST_ZERO_LENGTH")))
-    ("FILE_TEST"              fun nil                 (system) "Result = %s( File)" (("BLOCK_SPECIAL") ("CHARACTER_SPECIAL") ("DANGLING_SYMLINK") ("DIRECTORY") ("EXECUTABLE") ("GET_MODE") ("GROUP") ("NAMED_PIPE") ("NOEXPAND_PATH") ("READ") ("REGULAR") ("SETGID") ("SETUID") ("SOCKET") ("STICKY_BIT") ("SYMLINK") ("USER") ("WRITE") ("ZERO_LENGTH")))
-    ("FILE_WHICH"             fun nil                 (system) "Result = %s( [Path, ] File)" (("INCLUDE_CURRENT_DIR")))
-    ("FILEPATH"               fun nil                 (system) "Result = %s( Filename)" (("ROOT_DIR") ("SUBDIRECTORY") ("TERMINAL") ("TMP")))
-    ("FINDFILE"               fun nil                 (system) "Result = %s( File_Specification)" (("COUNT")))
-    ("FINDGEN"                fun nil                 (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("FINITE"                 fun nil                 (system) "Result = %s( X)" (("INFINITY") ("NAN") ("SIGN") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("FIX"                    fun nil                 (system) "Result = %s( Expression [, Offset [, Dim1, ..., Dim8]])" (("PRINT") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD") ("TYPE")))
-    ("FLOAT"                  fun nil                 (system) "Result = %s( Expression [, Offset [, Dim1, ..., Dim8]] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("FLOOR"                  fun nil                 (system) "Result = %s(X)" (("L64") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("FLTARR"                 fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("FORMAT_AXIS_VALUES"     fun nil                 (system) "Result = %s( Values )" nil)
-    ("FSTAT"                  fun nil                 (system) "Result = %s(Unit)" nil)
-    ("FULSTR"                 fun nil                 (system) "Result = %s(A)" nil)
-    ("FV_TEST"                fun nil                 (system) "Result = %s(X, Y)" nil)
-    ("FX_ROOT"                fun nil                 (system) "Result = %s(X, Func)" (("DOUBLE") ("ITMAX") ("STOP") ("TOL")))
-    ("FZ_ROOTS"               fun nil                 (system) "Result = %s(C)" (("DOUBLE") ("EPS") ("NO_POLISH")))
-    ("GAMMA"                  fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("GAUSS2DFIT"             fun nil                 (system) "Result = %s( Z, A [, X, Y])" (("NEGATIVE") ("TILT")))
-    ("GAUSS_CVF"              fun nil                 (system) "Result = %s(P)" nil)
-    ("GAUSS_PDF"              fun nil                 (system) "Result = %s(V)" nil)
-    ("GAUSSFIT"               fun nil                 (system) "Result = %s( X, Y [, A])" (("ESTIMATES") ("NTERMS")))
-    ("GAUSSINT"               fun nil                 (system) "Result = %s(X)" nil)
-    ("GET_DRIVE_LIST"         fun nil                 (system) "Result = %s( )" (("CDROM") ("COUNT") ("FIXED") ("REMOTE") ("REMOVABLE")))
-    ("GET_KBRD"               fun nil                 (system) "Result = %s(Wait)" nil)
-    ("GET_SCREEN_SIZE"        fun nil                 (system) "Result = %s( [Display_name])" (("DISPLAY_NAME") ("RESOLUTION")))
-    ("GET_SYMBOL"             fun nil                 (system) "Result = %s( Name)" (("TYPE")))
-    ("GETENV"                 fun nil                 (system) "Result = %s( Name )" (("ENVIRONMENT")))
-    ("GETHELP"                fun nil                 (system) "Result = %s([Variable])" nil)
-    ("GRID3"                  fun nil                 (system) "Result = %s( X, Y, Z, F, Gx, Gy, Gz)" (("DELTA") ("DTOL") ("GRID") ("NGRID") ("START")))
-    ("GRID_TPS"               fun nil                 (system) "Interp = %s (Xp, Yp, Values)" (("COEFFICIENTS") ("DELTA") ("NGRID") ("START")))
-    ("GS_ITER"                fun nil                 (system) "Result = %s( A, B)" (("CHECK") ("DOUBLE") ("LAMBDA") ("MAX_ITER") ("TOL") ("X_0")))
-    ("HANDLE_CREATE"          fun nil                 (system) "Result = %s([ID])" nil)
-    ("HANDLE_INFO"            fun nil                 (system) "Result = %s(ID)" nil)
-    ("HANNING"                fun nil                 (system) "Result = %s( N1 [, N2])" (("ALPHA") ("DOUBLE")))
-    ("HDF_"                   fun nil                 (system) "Result = %s VD _NATTRS( VData, FieldID )" nil)
-    ("HDF_AN_ANNLEN"          fun nil                 (system) "Result = %s(ann_id)" nil)
-    ("HDF_AN_ANNLIST"         fun nil                 (system) "Result = %s(an_id, annot_type, obj_tag, obj_ref, ann_list)" nil)
-    ("HDF_AN_ATYPE2TAG"       fun nil                 (system) "Result = %s(annot_type)" nil)
-    ("HDF_AN_CREATE"          fun nil                 (system) "Result = %s(an_id, obj_tag, obj_ref, annot_type)" nil)
-    ("HDF_AN_CREATEF"         fun nil                 (system) "Result = %s(an_id, annot_type)" nil)
-    ("HDF_AN_FILEINFO"        fun nil                 (system) "Result = %s(an_id, n_file_labels, n_file_descs, n_data_labels, n_data_descs)" nil)
-    ("HDF_AN_GET_TAGREF"      fun nil                 (system) "Result = %s(an_id, index, annot_type, ann_tag, ann_ref)" nil)
-    ("HDF_AN_ID2TAGREF"       fun nil                 (system) "Result = %s(ann_id, ann_tag, ann_ref)" nil)
-    ("HDF_AN_NUMANN"          fun nil                 (system) "Result = %s(an_id, annot_type, obj_tag, obj_ref)" nil)
-    ("HDF_AN_READANN"         fun nil                 (system) "Result = %s( ann_id, annotation)" (("LENGTH")))
-    ("HDF_AN_SELECT"          fun nil                 (system) "Result = %s(an_id, index, annot_type)" nil)
-    ("HDF_AN_START"           fun nil                 (system) "Result = %s(file_id)" nil)
-    ("HDF_AN_TAG2ATYPE"       fun nil                 (system) "Result = %s(ann_tag)" nil)
-    ("HDF_AN_TAGREF2ID"       fun nil                 (system) "Result = %s(an_id, ann_tag, ann_ref)" nil)
-    ("HDF_AN_WRITEANN"        fun nil                 (system) "Result = %s( ann_id, annotation)" (("LENGTH")))
-    ("HDF_BROWSER"            fun nil                 (system) "Template = %s([Filename])" (("CANCEL") ("GROUP") ("PREFIX")))
-    ("HDF_DF24_LASTREF"       fun nil                 (system) "Result = %s( )" nil)
-    ("HDF_DF24_NIMAGES"       fun nil                 (system) "Result = %s(Filename)" nil)
-    ("HDF_DFAN_LABLIST"       fun nil                 (system) "Result = %s( Filename, Tag, Reflist, Labellist)" (("LISTSIZE") ("MAXLABEL") ("STARTPOS") ("STRING")))
-    ("HDF_DFAN_LASTREF"       fun nil                 (system) "Result = %s( )" nil)
-    ("HDF_DFP_LASTREF"        fun nil                 (system) "Result = %s( )" nil)
-    ("HDF_DFP_NPALS"          fun nil                 (system) "Result = %s(Filename)" nil)
-    ("HDF_DFR8_LASTREF"       fun nil                 (system) "Result = %s( )" nil)
-    ("HDF_DFR8_NIMAGES"       fun nil                 (system) "Result = %s(Filename)" nil)
-    ("HDF_EXISTS"             fun nil                 (system) "Result = %s( )" nil)
-    ("HDF_GR_ATTRINFO"        fun nil                 (system) "Result = %s(obj_id, attr_index, name, data_type, count)" nil)
-    ("HDF_GR_CREATE"          fun nil                 (system) "Result = %s(gr_id, name, ncomp, data_type, interlace_mode, dim_sizes)" nil)
-    ("HDF_GR_FILEINFO"        fun nil                 (system) "Result = %s(gr_id, n_images, n_file_attrs)" nil)
-    ("HDF_GR_FINDATTR"        fun nil                 (system) "Result = %s(obj_id, attr_name)" nil)
-    ("HDF_GR_GETATTR"         fun nil                 (system) "Result = %s(obj_id, attr_index, values)" nil)
-    ("HDF_GR_GETCHUNKINFO"    fun nil                 (system) "Result = %s(ri_id, dim_length, flag)" nil)
-    ("HDF_GR_GETIMINFO"       fun nil                 (system) "Result = %s(ri_id, gr_name, ncomp, data_type, interlace_mode, dim_sizes, num_attrs)" nil)
-    ("HDF_GR_GETLUTID"        fun nil                 (system) "Result = %s(ri_id, pal_index)" nil)
-    ("HDF_GR_GETLUTINFO"      fun nil                 (system) "Result = %s(pal_id, ncomp, data_type, interlace_mode, num_entries)" nil)
-    ("HDF_GR_IDTOREF"         fun nil                 (system) "Result = %s(ri_id)" nil)
-    ("HDF_GR_LUTTOREF"        fun nil                 (system) "Result = %s(pal_id)" nil)
-    ("HDF_GR_NAMETOINDEX"     fun nil                 (system) "Result = %s(gr_id, gr_name)" nil)
-    ("HDF_GR_READIMAGE"       fun nil                 (system) "Result = %s( ri_id, data)" (("EDGE") ("INTERLACE") ("START") ("STRIDE")))
-    ("HDF_GR_READLUT"         fun nil                 (system) "Result = %s( pal_id, pal_data)" (("INTERLACE")))
-    ("HDF_GR_REFTOINDEX"      fun nil                 (system) "Result = %s(gr_id, gr_ref)" nil)
-    ("HDF_GR_SELECT"          fun nil                 (system) "Result = %s(gr_id, index)" nil)
-    ("HDF_GR_SETATTR"         fun nil                 (system) "Result = %s(obj_id, attr_name, data_type, count, values)" nil)
-    ("HDF_GR_SETCHUNK"        fun nil                 (system) "Result = %s(ri_id, dim_length, comp_type, comp_prm)" nil)
-    ("HDF_GR_SETCHUNKCACHE"   fun nil                 (system) "Result = %s(ri_id, maxcache, flags)" nil)
-    ("HDF_GR_SETCOMPRESS"     fun nil                 (system) "Result = %s(ri_id, comp_type, comp_prm)" nil)
-    ("HDF_GR_SETEXTERNALFILE" fun nil                 (system) "Result = %s(ri_id, filename, offset)" nil)
-    ("HDF_GR_START"           fun nil                 (system) "Result = %s(file_id)" nil)
-    ("HDF_GR_WRITEIMAGE"      fun nil                 (system) "Result = %s( ri_id, data)" (("EDGE") ("INTERLACE") ("START") ("STRIDE")))
-    ("HDF_GR_WRITELUT"        fun nil                 (system) "Result = %s( pal_id, pal_data)" (("DATA_TYPE") ("INTERLACE_MODE") ("NENTRIES")))
-    ("HDF_HDF2IDLTYPE"        fun nil                 (system) "Result = %s( hdftypecode )" nil)
-    ("HDF_IDL2HDFTYPE"        fun nil                 (system) "Result = %s( idltypecode )" nil)
-    ("HDF_ISHDF"              fun nil                 (system) "Result = %s(Filename)" nil)
-    ("HDF_NEWREF"             fun nil                 (system) "Result = %s(FileHandle)" nil)
-    ("HDF_NUMBER"             fun nil                 (system) "Result = %s( FileHandle)" (("TAG")))
-    ("HDF_OPEN"               fun nil                 (system) "Result = %s( Filename)" (("ALL") ("CREATE") ("NUM_DD") ("RDWR") ("READ") ("WRITE")))
-    ("HDF_PACKDATA"           fun nil                 (system) "Result = %s( data1 [, data2 [, data3 [, data4 [, data5 [, data6 [, data7 [, data8]]]]]]])" (("HDF_ORDER") ("HDF_TYPE") ("NREC")))
-    ("HDF_READ"               fun nil                 (system) "Result = %s( [Filename])" (("DF24") ("DFR8") ("PREFIX") ("TEMPLATE")))
-    ("HDF_SD_ATTRFIND"        fun nil                 (system) "Result = %s(S_ID, Name)" nil)
-    ("HDF_SD_CREATE"          fun nil                 (system) "Result = %s( SD_ID, Name, Dims)" (("BYTE") ("DFNT_CHAR") ("DFNT_FLOAT32") ("DFNT_FLOAT64") ("DFNT_INT16") ("DFNT_INT32") ("DFNT_INT8") ("DFNT_UINT16") ("DFNT_UINT32") ("DFNT_UINT8") ("DOUBLE") ("FLOAT") ("HDF_TYPE") ("INT") ("LONG") ("SHORT") ("STRING")))
-    ("HDF_SD_DIMGETID"        fun nil                 (system) "Result = %s(SDS_ID, Dimension_Number)" nil)
-    ("HDF_SD_IDTOREF"         fun nil                 (system) "Result = %s(SDS_ID)" nil)
-    ("HDF_SD_ISCOORDVAR"      fun nil                 (system) "Result = %s(SDS_ID)" nil)
-    ("HDF_SD_NAMETOINDEX"     fun nil                 (system) "Result = %s(SD_ID, SDS_Name)" nil)
-    ("HDF_SD_REFTOINDEX"      fun nil                 (system) "Result = %s(SD_ID, Refno)" nil)
-    ("HDF_SD_SELECT"          fun nil                 (system) "Result = %s(SD_ID, Number)" nil)
-    ("HDF_SD_START"           fun nil                 (system) "Result = %s( Filename)" (("CREATE") ("RDWR") ("READ")))
-    ("HDF_VD_ATTACH"          fun nil                 (system) "Result = %s( FileHandle, VDataId)" (("READ") ("WRITE")))
-    ("HDF_VD_ATTRFIND"        fun nil                 (system) "Result = %s(VData, FieldID, Name)" nil)
-    ("HDF_VD_FEXIST"          fun nil                 (system) "Result = %s(VData, Fieldnames)" nil)
-    ("HDF_VD_FIND"            fun nil                 (system) "Result = %s(FileHandle, Name)" nil)
-    ("HDF_VD_GETID"           fun nil                 (system) "Result = %s(FileHandle, VDataId)" nil)
-    ("HDF_VD_GETNEXT"         fun nil                 (system) "Result = %s(VData, Id)" nil)
-    ("HDF_VD_ISATTR"          fun nil                 (system) "Result = %s(VData)" nil)
-    ("HDF_VD_ISVD"            fun nil                 (system) "Result = %s(VGroup, Id)" nil)
-    ("HDF_VD_LONE"            fun nil                 (system) "Result = %s( FileHandle)" (("MAXSIZE")))
-    ("HDF_VD_READ"            fun nil                 (system) "Result = %s( VData, Data)" (("FIELDS") ("FULL_INTERLACE") ("NO_INTERLACE") ("NRECORDS")))
-    ("HDF_VG_ATTACH"          fun nil                 (system) "Result = %s( FileHandle, VGroupId)" (("READ") ("WRITE")))
-    ("HDF_VG_GETID"           fun nil                 (system) "Result = %s(FileHandle, VGroupId)" nil)
-    ("HDF_VG_GETNEXT"         fun nil                 (system) "Result = %s(VGroup, Id)" nil)
-    ("HDF_VG_INQTR"           fun nil                 (system) "Result = %s(VGroup, Tag, Ref)" nil)
-    ("HDF_VG_ISVD"            fun nil                 (system) "Result = %s(VGroup, Id)" nil)
-    ("HDF_VG_ISVG"            fun nil                 (system) "Result = %s(VGroup, Id)" nil)
-    ("HDF_VG_LONE"            fun nil                 (system) "Result = %s( FileHandle)" (("MAXSIZE")))
-    ("HDF_VG_NUMBER"          fun nil                 (system) "Result = %s(VGroup)" nil)
-    ("HILBERT"                fun nil                 (system) "Result = %s(X [, D])" nil)
-    ("HIST_2D"                fun nil                 (system) "Result = %s( V1, V2)" (("BIN1") ("BIN2") ("MAX1") ("MAX2") ("MIN1") ("MIN2")))
-    ("HIST_EQUAL"             fun nil                 (system) "Result = %s( A)" (("BINSIZE") ("FCN") ("HISTOGRAM_ONLY") ("MAXV") ("MINV") ("OMAX") ("OMIN") ("PERCENT") ("TOP")))
-    ("HISTOGRAM"              fun nil                 (system) "Result = %s( Array)" (("BINSIZE") ("INPUT") ("L64") ("MAX") ("MIN") ("NAN") ("NBINS") ("OMAX") ("OMIN") ("REVERSE_INDICES")))
-    ("HOUGH"                  fun nil                 (system) "Result = %s( Array)" (("BACKPROJECT") ("DOUBLE") ("DRHO") ("DX") ("DY") ("GRAY") ("NRHO") ("NTHETA") ("NX") ("NY") ("RHO") ("RMIN") ("THETA") ("XMIN") ("YMIN")))
-    ("HQR"                    fun nil                 (system) "Result = %s( A)" (("COLUMN") ("DOUBLE")))
-    ("IBETA"                  fun nil                 (system) "Result = %s( A, B, X)" (("DOUBLE") ("EPS") ("ITER") ("ITMAX")))
-    ("IDENTITY"               fun nil                 (system) "Result = %s( N)" (("DOUBLE")))
-    ("IGAMMA"                 fun nil                 (system) "Result = %s( A, X)" (("DOUBLE") ("EPS") ("ITER") ("ITMAX") ("METHOD")))
-    ("IMAGINARY"              fun nil                 (system) "Result = %s(Complex_Expression)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("INDGEN"                 fun nil                 (system) "Result = %s(D1, ..., D8)" (("BYTE") ("COMPLEX") ("DCOMPLEX") ("DOUBLE") ("FLOAT") ("L64") ("LONG") ("STRING") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD") ("TYPE") ("UINT") ("UL64") ("ULONG")))
-    ("INT_2D"                 fun nil                 (system) "Result = %s( Fxy, AB_Limits, PQ_Limits, Pts)" (("DOUBLE") ("ORDER")))
-    ("INT_3D"                 fun nil                 (system) "Result = %s( Fxyz, AB_Limits, PQ_Limits, UV_Limits, Pts)" (("DOUBLE")))
-    ("INT_TABULATED"          fun nil                 (system) "Result = %s( X, F)" (("DOUBLE") ("SORT")))
-    ("INTARR"                 fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("INTERPOL"               fun nil                 (system) "Result = %s( V, N) or Result = INTERPOL( V, X, U)" (("LSQUADRATIC") ("QUADRATIC") ("SPLINE")))
-    ("INTERPOLATE"            fun nil                 (system) "Result = %s( P, X [, Y [, Z]])" (("CUBIC") ("GRID") ("MISSING") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("INVERT"                 fun nil                 (system) "Result = %s( Array [, Status])" (("DOUBLE")))
-    ("IOCTL"                  fun nil                 (system) "Result = %s( File_Unit [, Request, Arg])" (("BY_VALUE") ("MT_OFFLINE") ("MT_REWIND") ("MT_SKIP_FILE") ("MT_SKIP_RECORD") ("MT_WEOF") ("SUPPRESS_ERROR")))
-    ("ISHFT"                  fun nil                 (system) "Result = %s(P1, P2)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("JULDAY"                 fun nil                 (system) "Result = %s(Month, Day, Year, Hour, Minute, Second)" nil)
-    ("KEYWORD_SET"            fun nil                 (system) "Result = %s(Expression)" nil)
-    ("KRIG2D"                 fun nil                 (system) "Result = %s( Z [, X, Y])" (("BOUNDS") ("EXPONENTIAL") ("GS") ("NX") ("NY") ("REGULAR") ("SPHERICAL") ("XGRID") ("XVALUES") ("YGRID") ("YVALUES")))
-    ("KURTOSIS"               fun nil                 (system) "Result = %s(X)" (("DOUBLE") ("NAN")))
-    ("KW_TEST"                fun nil                 (system) "Result = %s( X)" (("DF") ("MISSING")))
-    ("L64INDGEN"              fun nil                 (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("LABEL_DATE"             fun nil                 (system) "Result = %s()" (("AM_PM") ("DATE_FORMAT") ("DAYS_OF_WEEK") ("MONTHS") ("OFFSET") ("ROUND_UP") ("XTICKFORMAT")))
-    ("LABEL_REGION"           fun nil                 (system) "Result = %s( Data)" (("ALL_NEIGHBORS") ("ULONG")))
-    ("LADFIT"                 fun nil                 (system) "Result = %s( X, Y)" (("ABSDEV") ("DOUBLE")))
-    ("LAGUERRE"               fun nil                 (system) "Result = %s( X, N [, K])" (("COEFFICIENTS") ("DOUBLE")))
-    ("LEEFILT"                fun nil                 (system) "Result = %s( A [, N [, Sig]])" (("DOUBLE") ("EXACT")))
-    ("LEGENDRE"               fun nil                 (system) "Result = %s( X, L [, M])" (("DOUBLE")))
-    ("LINBCG"                 fun nil                 (system) "Result = %s( A, B, X)" (("DOUBLE") ("ITER") ("ITMAX") ("ITOL") ("TOL")))
-    ("LINDGEN"                fun nil                 (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("LINFIT"                 fun nil                 (system) "Result = %s( X, Y)" (("CHISQ") ("COVAR") ("DOUBLE") ("MEASURE_ERRORS") ("PROB") ("SIGMA") ("YFIT")))
-    ("LIVE_STYLE"             fun nil                 (system) "Style = %s ({ 'contour' | 'image' | 'plot' | 'surface'})" (("BASE_STYLE") ("COLORBAR_PROPERTIES") ("ERROR") ("GRAPHIC_PROPERTIES") ("GROUP") ("LEGEND_PROPERTIES") ("NAME") ("SAVE") ("TEMPLATE_FILE") ("VISUALIZATION_PROPERTIES") ("XAXIS_PROPERTIES") ("YAXIS_PROPERTIES") ("ZAXIS_PROPERTIES")))
-    ("LL_ARC_DISTANCE"        fun nil                 (system) "Result = %s( Lon_lat0, Arc_Dist, Az)" (("DEGREES")))
-    ("LMFIT"                  fun nil                 (system) "Result = %s( X, Y, A)" (("ALPHA") ("CHISQ") ("CONVERGENCE") ("COVAR") ("DOUBLE") ("FITA") ("FUNCTION_NAME") ("ITER") ("ITMAX") ("ITMIN") ("MEASURE_ERRORS") ("SIGMA") ("TOL")))
-    ("LMGR"                   fun nil                 (system) "Result = %s()" (("CLIENTSERVER") ("DEMO") ("EMBEDDED") ("EXPIRE_DATE") ("FORCE_DEMO") ("INSTALL_NUM") ("LMHOSTID") ("RUNTIME") ("SITE_NOTICE") ("STUDENT") ("TRIAL")))
-    ("LNGAMMA"                fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("LNP_TEST"               fun nil                 (system) "Result = %s( X, Y)" (("DOUBLE") ("HIFAC") ("JMAX") ("OFAC") ("WK1") ("WK2")))
-    ("LOCALE_GET"             fun nil                 (system) "Result = %s( )" nil)
-    ("LON64ARR"               fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("LONARR"                 fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("LONG"                   fun nil                 (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" nil)
-    ("LONG64"                 fun nil                 (system) "Result = %s( Expression[, Offset [, D1, ..., D8]] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("LSODE"                  fun nil                 (system) "Result = %s( Y, X, H, Derivs[, Status])" (("ATOL") ("RTOL")))
-    ("LU_COMPLEX"             fun nil                 (system) "Result = %s( A, B)" (("DOUBLE") ("INVERSE") ("SPARSE")))
-    ("LUMPROVE"               fun nil                 (system) "Result = %s( A, Alud, Index, B, X)" (("COLUMN") ("DOUBLE")))
-    ("LUSOL"                  fun nil                 (system) "Result = %s(A, Index, B)" (("COLUMN") ("DOUBLE")))
-    ("M_CORRELATE"            fun nil                 (system) "Result = %s( X, Y)" (("DOUBLE")))
-    ("MACHAR"                 fun nil                 (system) "Result = %s()" (("DOUBLE")))
-    ("MAKE_ARRAY"             fun nil                 (system) "Result = %s ( [D1, ..., D8])" (("BYTE") ("COMPLEX") ("DCOMPLEX") ("DIMENSION") ("DOUBLE") ("FLOAT") ("INDEX") ("INT") ("L64") ("LONG") ("NOZERO") ("OBJ") ("PTR") ("SIZE") ("STRING") ("TYPE") ("UINT") ("UL64") ("ULONG") ("VALUE")))
-    ("MAP_2POINTS"            fun nil                 (system) "Result = %s( lon0, lat0, lon1, lat1)" (("DPATH") ("METERS") ("MILES") ("NPATH") ("PARAMETERS") ("RADIANS") ("RADIUS") ("RHUMB")))
-    ("MAP_IMAGE"              fun nil                 (system) "Result = %s( Image [, Startx, Starty [, Xsize, Ysize]])" (("BILINEAR") ("COMPRESS") ("LATMAX") ("LATMIN") ("LONMAX") ("LONMIN") ("MAX_VALUE") ("MIN_VALUE") ("MISSING") ("SCALE")))
-    ("MAP_PATCH"              fun nil                 (system) "Result = %s( Image_Orig [, Lons, Lats])" (("LAT0") ("LAT1") ("LON0") ("LON1") ("MAX_VALUE") ("MISSING") ("TRIANGULATE") ("XSIZE") ("XSTART") ("YSIZE") ("YSTART")))
-    ("MATRIX_MULTIPLY"        fun nil                 (system) "Result = %s( A, B)" (("ATRANSPOSE") ("BTRANSPOSE")))
-    ("MAX"                    fun nil                 (system) "Result = %s( Array [, Max_Subscript])" (("DIMENSION") ("MIN") ("NAN") ("SUBSCRIPT_MIN") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("MD_TEST"                fun nil                 (system) "Result = %s( X)" (("ABOVE") ("BELOW") ("MDC")))
-    ("MEAN"                   fun nil                 (system) "Result = %s( X)" (("DOUBLE") ("NAN")))
-    ("MEANABSDEV"             fun nil                 (system) "Result = %s( X)" (("DOUBLE") ("MEDIAN") ("NAN")))
-    ("MEDIAN"                 fun nil                 (system) "Result = %s( Array [, Width])" (("EVEN")))
-    ("MEMORY"                 fun nil                 (system) "Result = %s()" (("CURRENT") ("HIGHWATER") ("L64") ("NUM_ALLOC") ("NUM_FREE") ("STRUCTURE")))
-    ("MESH_CLIP"              fun nil                 (system) "Result = %s (Plane, Vertsin, Connin, Vertsout, Connout)" (("AUXDATA_IN") ("AUXDATA_OUT") ("CUT_VERTS")))
-    ("MESH_DECIMATE"          fun nil                 (system) "Result = %s (Verts, Conn, Connout)" (("PERCENT_POLYGONS") ("PERCENT_VERTICES") ("VERTICES")))
-    ("MESH_ISSOLID"           fun nil                 (system) "Result = %s (Conn)" nil)
-    ("MESH_MERGE"             fun nil                 (system) "Result = %s (Verts, Conn, Verts1, Conn1)" (("COMBINE_VERTICES") ("TOLERANCE")))
-    ("MESH_NUMTRIANGLES"      fun nil                 (system) "Result = %s (Conn)" nil)
-    ("MESH_SMOOTH"            fun nil                 (system) "Result = %s (Verts, Conn)" (("FIXED_EDGE_VERTICES") ("FIXED_VERTICES") ("ITERATIONS") ("LAMBDA")))
-    ("MESH_SURFACEAREA"       fun nil                 (system) "Result = %s ( Verts, Conn)" (("AUXDATA") ("MOMENT")))
-    ("MESH_VALIDATE"          fun nil                 (system) "Result = %s ( Verts, Conn)" (("COMBINE_VERTICES") ("PACK_VERTICES") ("REMOVE_NAN") ("TOLERANCE")))
-    ("MESH_VOLUME"            fun nil                 (system) "Result = %s ( Verts, Conn)" (("SIGNED")))
-    ("MIN"                    fun nil                 (system) "Result = %s( Array [, Min_Subscript])" (("DIMENSION") ("MAX") ("NAN") ("SUBSCRIPT_MAX") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("MIN_CURVE_SURF"         fun nil                 (system) "Result = %s(Z [, X, Y])" (("BOUNDS") ("CONST") ("DOUBLE") ("GS") ("NX") ("NY") ("REGULAR") ("SPHERE") ("TPS") ("XGRID") ("XOUT") ("XPOUT") ("XVALUES") ("YGRID") ("YOUT") ("YPOUT") ("YVALUES")))
-    ("MOMENT"                 fun nil                 (system) "Result = %s( X)" (("DOUBLE") ("MDEV") ("NAN") ("SDEV")))
-    ("MORPH_CLOSE"            fun nil                 (system) "Result = %s (Image, Structure)" (("GRAY") ("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES")))
-    ("MORPH_DISTANCE"         fun nil                 (system) "Result = %s (Data)" (("BACKGROUND") ("NEIGHBOR_SAMPLING") ("NO_COPY")))
-    ("MORPH_GRADIENT"         fun nil                 (system) "Result = %s (Image, Structure)" (("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES")))
-    ("MORPH_HITORMISS"        fun nil                 (system) "Result = %s (Image, HitStructure, MissStructure)" nil)
-    ("MORPH_OPEN"             fun nil                 (system) "Result = %s (Image, Structure)" (("GRAY") ("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES")))
-    ("MORPH_THIN"             fun nil                 (system) "Result = %s ( Image, HitStructure, MissStructure )" nil)
-    ("MORPH_TOPHAT"           fun nil                 (system) "Result = %s ( Image, Structure)" (("PRESERVE_TYPE") ("UINT") ("ULONG") ("VALUES")))
-    ("MPEG_OPEN"              fun nil                 (system) "mpegID = %s( Dimensions)" (("BITRATE") ("FILENAME") ("IFRAME_GAP") ("MOTION_VEC_LENGTH") ("QUALITY")))
-    ("MSG_CAT_OPEN"           fun nil                 (system) "Result = %s( application)" (("DEFAULT_FILENAME") ("FILENAME") ("FOUND") ("LOCALE") ("PATH") ("SUB_QUERY")))
-    ("N_ELEMENTS"             fun nil                 (system) "Result = %s(Expression)" nil)
-    ("N_PARAMS"               fun nil                 (system) "Result = %s()" nil)
-    ("N_TAGS"                 fun nil                 (system) "Result = %s( Expression)" (("DATA_LENGTH") ("LENGTH")))
-    ("NCDF_ATTCOPY"           fun nil                 (system) "Result = %s( Incdf [, Invar])" (("IN_GLOBAL") ("OUT_GLOBAL")))
-    ("NCDF_ATTINQ"            fun nil                 (system) "Result = %s( Cdfid [, Varid])" (("GLOBAL")))
-    ("NCDF_ATTNAME"           fun nil                 (system) "Result = %s( Cdfid [, Varid])" (("GLOBAL")))
-    ("NCDF_CREATE"            fun nil                 (system) "Result = %s( Filename)" (("CLOBBER") ("NOCLOBBER")))
-    ("NCDF_DIMDEF"            fun nil                 (system) "Result = %s( Cdfid, DimName, Size)" (("UNLIMITED")))
-    ("NCDF_DIMID"             fun nil                 (system) "Result = %s( Cdfid, DimName )" nil)
-    ("NCDF_EXISTS"            fun nil                 (system) "Result = %s( )" nil)
-    ("NCDF_INQUIRE"           fun nil                 (system) "Result = %s(Cdfid)" nil)
-    ("NCDF_OPEN"              fun nil                 (system) "Result = %s( Filename)" (("NOWRITE") ("WRITE")))
-    ("NCDF_VARDEF"            fun nil                 (system) "Result = %s( Cdfid, Name [, Dim])" (("BYTE") ("CHAR") ("DOUBLE") ("FLOAT") ("LONG") ("SHORT")))
-    ("NCDF_VARID"             fun nil                 (system) "Result = %s(Cdfid, Name)" nil)
-    ("NCDF_VARINQ"            fun nil                 (system) "Result = %s(Cdfid, Varid)" nil)
-    ("NEWTON"                 fun nil                 (system) "Result = %s( X, Vecfunc)" (("CHECK") ("DOUBLE") ("ITMAX") ("STEPMAX") ("TOLF") ("TOLMIN") ("TOLX")))
-    ("NORM"                   fun nil                 (system) "Result = %s( A)" (("DOUBLE") ("LNORM")))
-    ("OBJ_CLASS"              fun nil                 (system) "Result = %s( [Arg])" (("COUNT") ("SUPERCLASS")))
-    ("OBJ_ISA"                fun nil                 (system) "Result = %s(ObjectInstance, ClassName)" nil)
-    ("OBJ_NEW"                fun nil                 (system) "Result = %s( [ObjectClassName [, Arg1......Argn]] )" nil)
-    ("OBJ_VALID"              fun nil                 (system) "Result = %s( [Arg])" (("CAST") ("COUNT")))
-    ("OBJARR"                 fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("P_CORRELATE"            fun nil                 (system) "Result = %s( X, Y, C)" (("DOUBLE")))
-    ("PATH_SEP"               fun nil                 (system) "Result = %s()" (("PARENT_DIRECTORY") ("SEARCH_PATH")))
-    ("PCOMP"                  fun nil                 (system) "Result = %s( A)" (("COEFFICIENTS") ("COVARIANCE") ("DOUBLE") ("EIGENVALUES") ("NVARIABLES") ("STANDARDIZE") ("VARIANCES")))
-    ("PNT_LINE"               fun nil                 (system) "Result = %s( P0, L0, L1 [, Pl])" (("INTERVAL")))
-    ("POLAR_SURFACE"          fun nil                 (system) "Result = %s( Z, R, Theta)" (("BOUNDS") ("GRID") ("MISSING") ("QUINTIC") ("SPACING")))
-    ("POLY"                   fun nil                 (system) "Result = %s(X, C)" nil)
-    ("POLY_2D"                fun nil                 (system) "Result = %s( Array, P, Q [, Interp [, Dimx, Dimy]])" (("CUBIC") ("MISSING") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("POLY_AREA"              fun nil                 (system) "Result = %s( X, Y)" (("DOUBLE") ("SIGNED")))
-    ("POLY_FIT"               fun nil                 (system) "Result = %s( X, Y, Degree)" (("CHISQ") ("COVAR") ("DOUBLE") ("MEASURE_ERRORS") ("SIGMA") ("STATUS") ("YBAND") ("YERROR") ("YFIT")))
-    ("POLYFILLV"              fun nil                 (system) "Result = %s( X, Y, Sx, Sy [, Run_Length] )" nil)
-    ("POLYFITW"               fun nil                 (system) "Result = %s(X, Y, Weights, NDegree [, Yfit, Yband, Sigma, Corrm])" (("DOUBLE") ("STATUS")))
-    ("POLYSHADE"              fun nil                 (system) "Result = %s( Vertices, Polygons) or Result = POLYSHADE(X, Y, Z, Polygons)" (("DATA") ("NORMAL") ("POLY_SHADES") ("SHADES") ("T3D") ("TOP") ("XSIZE") ("YSIZE")))
-    ("PRIMES"                 fun nil                 (system) "Result = %s(K)" nil)
-    ("PROFILE"                fun nil                 (system) "Result = %s( Image [, XX, YY])" (("NOMARK") ("XSTART") ("YSTART")))
-    ("PROJECT_VOL"            fun nil                 (system) "Return = %s( Vol, X_Sample, Y_Sample, Z_Sample)" (("DEPTH_Q") ("OPAQUE") ("TRANS")))
-    ("PTR_NEW"                fun nil                 (system) "Result = %s( [InitExpr])" (("ALLOCATE_HEAP") ("NO_COPY")))
-    ("PTR_VALID"              fun nil                 (system) "Result = %s( [Arg])" (("CAST") ("COUNT")))
-    ("PTRARR"                 fun nil                 (system) "Result = %s( D1, ... ..., D8)" (("ALLOCATE_HEAP") ("NOZERO")))
-    ("QGRID3"                 fun nil                 (system) "Result = %s( XYZ, F, Tetrahedra)" (("DELTA") ("DIMENSION") ("MISSING") ("START")))
-    ("QROMB"                  fun nil                 (system) "Result = %s( Func, A, B)" (("DOUBLE") ("EPS") ("JMAX") ("K")))
-    ("QROMO"                  fun nil                 (system) "Result = %s(Func, A [, B])" (("DOUBLE") ("EPS") ("JMAX") ("K") ("MIDEXP") ("MIDINF") ("MIDPNT") ("MIDSQL") ("MIDSQU")))
-    ("QSIMP"                  fun nil                 (system) "Result = %s( Func, A, B)" (("DOUBLE") ("EPS") ("JMAX")))
-    ("QUERY_BMP"              fun nil                 (system) "Result = %s ( Filename [, Info] )" nil)
-    ("QUERY_DICOM"            fun nil                 (system) "Result = %s( Filename [, Info])" (("IMAGE_INDEX")))
-    ("QUERY_IMAGE"            fun nil                 (system) "Result = %s ( Filename[, Info])" (("CHANNELS") ("DIMENSIONS") ("HAS_PALETTE") ("IMAGE_INDEX") ("NUM_IMAGES") ("PIXEL_TYPE") ("SUPPORTED_READ") ("SUPPORTED_WRITE") ("TYPE")))
-    ("QUERY_JPEG"             fun nil                 (system) "Result = %s ( Filename [, Info] )" nil)
-    ("QUERY_MRSID"            fun nil                 (system) "Result = %s( Filename [, Info])" (("LEVEL")))
-    ("QUERY_PICT"             fun nil                 (system) "Result = %s ( Filename [, Info] )" nil)
-    ("QUERY_PNG"              fun nil                 (system) "Result = %s ( Filename [, Info] )" nil)
-    ("QUERY_PPM"              fun nil                 (system) "Result = %s ( Filename [, Info])" (("MAXVAL")))
-    ("QUERY_SRF"              fun nil                 (system) "Result = %s (Filename [, Info] )" nil)
-    ("QUERY_TIFF"             fun nil                 (system) "Result = %s ( Filename [, Info])" (("IMAGE_INDEX")))
-    ("QUERY_WAV"              fun nil                 (system) "Result = %s ( Filename[, Info] )" nil)
-    ("R_CORRELATE"            fun nil                 (system) "Result = %s( X, Y)" (("D") ("KENDALL") ("PROBD") ("ZD")))
-    ("R_TEST"                 fun nil                 (system) "Result = %s( X)" (("N0") ("N1") ("R")))
-    ("RADON"                  fun nil                 (system) "Result = %s( Array)" (("BACKPROJECT") ("DOUBLE") ("DRHO") ("DX") ("DY") ("GRAY") ("LINEAR") ("NRHO") ("NTHETA") ("NX") ("NY") ("RHO") ("RMIN") ("THETA") ("XMIN") ("YMIN")))
-    ("RANDOMN"                fun nil                 (system) "Result = %s( Seed [, D1, ..., D8])" (("BINOMIAL") ("DOUBLE") ("GAMMA") ("LONG") ("NORMAL") ("POISSON") ("UNIFORM")))
-    ("RANDOMU"                fun nil                 (system) "Result = %s( Seed [, D1, ..., D8])" (("BINOMIAL") ("DOUBLE") ("GAMMA") ("LONG") ("NORMAL") ("POISSON") ("UNIFORM")))
-    ("RANKS"                  fun nil                 (system) "Result = %s(X)" nil)
-    ("READ_ASCII"             fun nil                 (system) "Result = %s( [Filename])" (("COMMENT_SYMBOL") ("COUNT") ("DATA_START") ("DELIMITER") ("HEADER") ("MISSING_VALUE") ("NUM_RECORDS") ("RECORD_START") ("TEMPLATE") ("VERBOSE")))
-    ("READ_BINARY"            fun nil                 (system) "Result = %s ([Filename] | FileUnit)" (("DATA_DIMS") ("DATA_START") ("DATA_TYPE") ("ENDIAN") ("TEMPLATE")))
-    ("READ_BMP"               fun nil                 (system) "Result = %s( Filename, [, R, G, B] [, Ihdr])" (("RGB")))
-    ("READ_DICOM"             fun nil                 (system) "Result = %s (Filename [, Red, Green, Blue])" (("IMAGE_INDEX")))
-    ("READ_IMAGE"             fun nil                 (system) "Result = %s (Filename [, Red, Green, Blue])" (("IMAGE_INDEX")))
-    ("READ_MRSID"             fun nil                 (system) "Result = %s ( Filename)" (("LEVEL") ("SUB_RECT")))
-    ("READ_PNG"               fun nil                 (system) "Result = %s ( Filename [, R, G, B])" (("ORDER") ("TRANSPARENT") ("VERBOSE")))
-    ("READ_SPR"               fun nil                 (system) "Result = %s(Filename)" nil)
-    ("READ_SYLK"              fun nil                 (system) "Result = %s( File)" (("ARRAY") ("COLMAJOR") ("NCOLS") ("NROWS") ("STARTCOL") ("STARTROW") ("USEDOUBLES") ("USELONGS")))
-    ("READ_TIFF"              fun nil                 (system) "Result = %s( Filename [, R, G, B])" (("CHANNELS") ("GEOTIFF") ("IMAGE_INDEX") ("INTERLEAVE") ("ORDER") ("ORIENTATION") ("PLANARCONFIG") ("SUB_RECT") ("UNSIGNED") ("VERBOSE")))
-    ("READ_WAV"               fun nil                 (system) "Result = %s ( Filename [, Rate] )" nil)
-    ("READ_XWD"               fun nil                 (system) "Result = %s( Filename[, R, G, B] )" nil)
-    ("REAL_PART"              fun nil                 (system) "Result = %s(Z)" nil)
-    ("REBIN"                  fun nil                 (system) "Result = %s( Array, D1 [, ..., D8])" (("SAMPLE")))
-    ("RECALL_COMMANDS"        fun nil                 (system) "Result = %s()" nil)
-    ("RECON3"                 fun nil                 (system) "Result = %s( Images, Obj_Rot, Obj_Pos, Focal, Dist,Vol_Pos, Img_Ref, Img_Mag, Vol_Size)" (("CUBIC") ("MISSING") ("MODE") ("QUIET")))
-    ("REFORM"                 fun nil                 (system) "Result = %s( Array, D1, ..., D8)" (("OVERWRITE")))
-    ("REGION_GROW"            fun nil                 (system) "Result = %s(Array, ROIPixels)" (("ALL_NEIGHBORS") ("STDDEV_MULTIPLIER") ("THRESHOLD")))
-    ("REGRESS"                fun nil                 (system) "Result = %s( X, Y)" (("CHISQ") ("CONST") ("CORRELATION") ("DOUBLE") ("FTEST") ("MCORRELATION") ("MEASURE_ERRORS") ("SIGMA") ("STATUS") ("YFIT")))
-    ("REPLICATE"              fun nil                 (system) "Result = %s( Value, D1 [, ..., D8] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("REVERSE"                fun nil                 (system) "Result = %s( Array [, Subscript_Index])" (("OVERWRITE")))
-    ("RK4"                    fun nil                 (system) "Result = %s( Y, Dydx, X, H, Derivs)" (("DOUBLE")))
-    ("ROBERTS"                fun nil                 (system) "Result = %s(Image)" nil)
-    ("ROT"                    fun nil                 (system) "Result = %s( A, Angle, [Mag, X0, Y0])" (("CUBIC") ("INTERP") ("MISSING") ("PIVOT")))
-    ("ROTATE"                 fun nil                 (system) "Result = %s(Array, Direction)" nil)
-    ("ROUND"                  fun nil                 (system) "Result = %s(X)" (("L64") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("ROUTINE_INFO"           fun nil                 (system) "Result = %s( [Routine])" (("DISABLED") ("ENABLED") ("FUNCTIONS") ("PARAMETERS") ("SOURCE") ("SYSTEM") ("UNRESOLVED") ("VARIABLES")))
-    ("RS_TEST"                fun nil                 (system) "Result = %s( X, Y)" (("UX") ("UY")))
-    ("RSTRPOS"                fun nil                 (system) "Result = %s( Expression, Search_String [, Pos] )" nil)
-    ("S_TEST"                 fun nil                 (system) "Result = %s( X, Y)" (("ZDIFF")))
-    ("SAVGOL"                 fun nil                 (system) "Result = %s( Nleft, Nright, Order, Degree)" (("DOUBLE")))
-    ("SEARCH2D"               fun nil                 (system) "Result = %s( Array, Xpos, Ypos, Min_Val, Max_Val)" (("DECREASE") ("DIAGONAL") ("INCREASE") ("LPF_BAND")))
-    ("SEARCH3D"               fun nil                 (system) "Result = %s( Array, Xpos, Ypos, Zpos, Min_Val, Max_Val)" (("DECREASE") ("DIAGONAL") ("INCREASE") ("LPF_BAND")))
-    ("SFIT"                   fun nil                 (system) "Result = %s( Data, Degree)" (("KX")))
-    ("SHIFT"                  fun nil                 (system) "Result = %s(Array, S1, ..., Sn)" nil)
-    ("SIMPLEX"                fun nil                 (system) "Result = %s( Zequation, Constraints, M1, M2, M3 [, Tableau [, Izrov [, Iposv]]])" (("DOUBLE") ("EPS") ("STATUS")))
-    ("SIN"                    fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("SINDGEN"                fun nil                 (system) "Result = %s(D1, ..., D8)" nil)
-    ("SINH"                   fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("SIZE"                   fun nil                 (system) "Result = %s( Expression)" (("DIMENSIONS") ("FILE_LUN") ("L64") ("N_DIMENSIONS") ("N_ELEMENTS") ("STRUCTURE") ("TNAME") ("TYPE")))
-    ("SKEWNESS"               fun nil                 (system) "Result = %s( X)" (("DOUBLE") ("NAN")))
-    ("SMOOTH"                 fun nil                 (system) "Result = %s( Array, Width)" (("EDGE_TRUNCATE") ("MISSING") ("NAN")))
-    ("SOBEL"                  fun nil                 (system) "Result = %s(Image)" nil)
-    ("SORT"                   fun nil                 (system) "Result = %s(Array)" (("L64")))
-    ("SPH_SCAT"               fun nil                 (system) "Result = %s( Lon, Lat, F)" (("BOUNDS") ("BOUT") ("GOUT") ("GS") ("NLAT") ("NLON")))
-    ("SPHER_HARM"             fun nil                 (system) "Result = %s( Theta, Phi, L, M)" (("DOUBLE")))
-    ("SPL_INIT"               fun nil                 (system) "Result = %s( X, Y)" (("DOUBLE") ("YP0") ("YPN_1")))
-    ("SPL_INTERP"             fun nil                 (system) "Result = %s( X, Y, Y2, X2)" (("DOUBLE")))
-    ("SPLINE"                 fun nil                 (system) "Result = %s( X, Y, T [, Sigma] )" nil)
-    ("SPRSAB"                 fun nil                 (system) "Result = %s( A, B)" (("DOUBLE") ("THRESHOLD")))
-    ("SPRSAX"                 fun nil                 (system) "Result = %s( A, X)" (("DOUBLE")))
-    ("SPRSIN"                 fun nil                 (system) "Result = %s( A)" (("COLUMN") ("DOUBLE") ("THRESHOLD")))
-    ("SPRSTP"                 fun nil                 (system) "Result = %s(A)" nil)
-    ("SQRT"                   fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("STANDARDIZE"            fun nil                 (system) "Result = %s( A)" (("DOUBLE")))
-    ("STDDEV"                 fun nil                 (system) "Result = %s( X)" (("DOUBLE") ("NAN")))
-    ("STR_SEP"                fun nil                 (system) "Result = %s( Str, Separator)" (("ESC") ("REMOVE_ALL") ("TRIM")))
-    ("STRARR"                 fun nil                 (system) "Result = %s(D1, ..., D8)" nil)
-    ("STRCMP"                 fun nil                 (system) "Result = %s( String1, String2 [, N])" (("FOLD_CASE")))
-    ("STRCOMPRESS"            fun nil                 (system) "Result = %s( String)" (("REMOVE_ALL")))
-    ("STREGEX"                fun nil                 (system) "Result = %s( StringExpression, RegularExpression)" (("BOOLEAN") ("EXTRACT") ("FOLD_CASE") ("LENGTH") ("SUBEXPR")))
-    ("STRING"                 fun nil                 (system) "Result = %s( Expression1, ..., Expressionn)" (("AM_PM") ("DAYS_OF_WEEK") ("FORMAT") ("MONTHS") ("PRINT")))
-    ("STRJOIN"                fun nil                 (system) "Result = %s( String [, Delimiter])" (("SINGLE")))
-    ("STRLEN"                 fun nil                 (system) "Result = %s(Expression)" nil)
-    ("STRLOWCASE"             fun nil                 (system) "Result = %s(String)" nil)
-    ("STRMATCH"               fun nil                 (system) "Result = %s( String, SearchString)" (("FOLD_CASE")))
-    ("STRMESSAGE"             fun nil                 (system) "Result = %s( Err)" (("BLOCK") ("CODE") ("NAME")))
-    ("STRMID"                 fun nil                 (system) "Result = %s(Expression, First_Character [, Length])" (("REVERSE_OFFSET")))
-    ("STRPOS"                 fun nil                 (system) "Result = %s( Expression, Search String [, Pos])" (("REVERSE_OFFSET") ("REVERSE_SEARCH")))
-    ("STRSPLIT"               fun nil                 (system) "Result = %s( String [, Pattern])" (("ESCAPE") ("EXTRACT") ("FOLD_CASE") ("LENGTH") ("PRESERVE_NULL") ("REGEX")))
-    ("STRTRIM"                fun nil                 (system) "Result = %s( String [, Flag] )" nil)
-    ("STRUPCASE"              fun nil                 (system) "Result = %s(String)" nil)
-    ("SVDFIT"                 fun nil                 (system) "Result = %s( X, Y [, M])" (("A") ("CHISQ") ("COVAR") ("DOUBLE") ("FUNCTION_NAME") ("LEGENDRE") ("MEASURE_ERRORS") ("SIGMA") ("SINGULAR") ("VARIANCE") ("YFIT")))
-    ("SVSOL"                  fun nil                 (system) "Result = %s( U, W, V, B)" (("COLUMN") ("DOUBLE")))
-    ("SWAP_ENDIAN"            fun nil                 (system) "Result = %s(Variable)" nil)
-    ("SYSTIME"                fun nil                 (system) "String = %s( [0 [, ElaspedSeconds]])" (("JULIAN") ("SECONDS") ("UTC")))
-    ("T_CVF"                  fun nil                 (system) "Result = %s(P, Df)" nil)
-    ("T_PDF"                  fun nil                 (system) "Result = %s(V, Df)" nil)
-    ("TAG_NAMES"              fun nil                 (system) "Result = %s( Expression)" (("STRUCTURE_NAME")))
-    ("TAN"                    fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("TANH"                   fun nil                 (system) "Result = %s(X)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("TEMPORARY"              fun nil                 (system) "Result = %s(Variable)" nil)
-    ("TETRA_CLIP"             fun nil                 (system) "Result = %s ( Plane, Vertsin, Connin, Vertsout, Connout)" (("AUXDATA_IN") ("AUXDATA_OUT") ("CUT_VERTS")))
-    ("TETRA_SURFACE"          fun nil                 (system) "Result = %s (Verts, Connin)" nil)
-    ("TETRA_VOLUME"           fun nil                 (system) "Result = %s ( Verts, Conn)" (("AUXDATA") ("MOMENT")))
-    ("THIN"                   fun nil                 (system) "Result = %s( Image)" (("NEIGHBOR_COUNT") ("PRUNE")))
-    ("TIFF_READ"              fun nil                 (system) "Result = %s(File [, R, G, B])" nil)
-    ("TIMEGEN"                fun nil                 (system) "Result = %s( [D1,...,D8])" (("DAYS") ("FINAL") ("HOURS") ("MINUTES") ("MONTHS") ("SECONDS") ("START") ("STEP_SIZE") ("UNITS") ("YEAR")))
-    ("TM_TEST"                fun nil                 (system) "Result = %s( X, Y)" (("PAIRED") ("UNEQUAL")))
-    ("TOTAL"                  fun nil                 (system) "Result = %s( Array [, Dimension])" (("CUMULATIVE") ("DOUBLE") ("NAN") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("TRACE"                  fun nil                 (system) "Result = %s( A)" (("DOUBLE")))
-    ("TRANSPOSE"              fun nil                 (system) "Result = %s( Array [, P] )" nil)
-    ("TRI_SURF"               fun nil                 (system) "Result = %s( Z [, X, Y])" (("BOUNDS") ("EXTRAPOLATE") ("GS") ("MISSING") ("NX") ("NY") ("REGULAR") ("XGRID") ("XVALUES") ("YGRID") ("YVALUES")))
-    ("TRIGRID"                fun nil                 (system) "Result = %s( X, Y, Z, Triangles [, GS, Limits] ) For spherical gridding: Result = TRIGRID( F , GS, Limits)" (("DEGREES") ("EXTRAPOLATE") ("INPUT") ("MAX_VALUE") ("MIN_VALUE") ("MISSING") ("NX") ("NY") ("QUINTIC") ("SPHERE") ("XGRID") ("XOUT") ("YGRID") ("YOUT")))
-    ("TRISOL"                 fun nil                 (system) "Result = %s( A, B, C, R)" (("DOUBLE")))
-    ("TRNLOG"                 fun nil                 (system) "Result = %s( Lognam, Value)" (("ACMODE") ("FULL_TRANSLATION") ("ISSUE_ERROR") ("RESULT_ACMODE") ("RESULT_TABLE") ("TABLE")))
-    ("TS_COEF"                fun nil                 (system) "Result = %s( X, P)" (("DOUBLE") ("MSE")))
-    ("TS_DIFF"                fun nil                 (system) "Result = %s( X, K)" (("DOUBLE")))
-    ("TS_FCAST"               fun nil                 (system) "Result = %s( X, P, Nvalues)" (("BACKCAST") ("DOUBLE")))
-    ("TS_SMOOTH"              fun nil                 (system) "Result = %s( X, Nvalues)" (("BACKWARD") ("DOUBLE") ("FORWARD") ("ORDER")))
-    ("TVRD"                   fun nil                 (system) "Result = %s( [X0 [, Y0 [, Nx [, Ny [, Channel]]]]])" (("CHANNEL") ("ORDER") ("TRUE") ("WORDS")))
-    ("UINDGEN"                fun nil                 (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("UINT"                   fun nil                 (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("UINTARR"                fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("UL64INDGEN"             fun nil                 (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("ULINDGEN"               fun nil                 (system) "Result = %s(D1, ..., D8)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("ULON64ARR"              fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("ULONARR"                fun nil                 (system) "Result = %s( D1, ..., D8)" (("NOZERO")))
-    ("ULONG"                  fun nil                 (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" nil)
-    ("ULONG64"                fun nil                 (system) "Result = %s( Expression[, Offset [, Dim1, ..., Dim8]] )" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("UNIQ"                   fun nil                 (system) "Result = %s( Array [, Index] )" nil)
-    ("VALUE_LOCATE"           fun nil                 (system) "Result = %s ( Vector, Value)" (("L64")))
-    ("VARIANCE"               fun nil                 (system) "Result = %s( X)" (("DOUBLE") ("NAN")))
-    ("VAX_FLOAT"              fun nil                 (system) "Result = %s( [Default])" (("FILE_UNIT")))
-    ("VERT_T3D"               fun nil                 (system) "Result = %s( Vertex_List)" (("MATRIX") ("NO_COPY") ("NO_DIVIDE") ("SAVE_DIVIDE")))
-    ("VOIGT"                  fun nil                 (system) "Result = %s(A, U)" (("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("VOXEL_PROJ"             fun nil                 (system) "Result = %s( V [, RGBO])" (("BACKGROUND") ("CUTTING_PLANE") ("INTERPOLATE") ("MAXIMUM_INTENSITY") ("STEP") ("XSIZE") ("YSIZE") ("ZBUFFER") ("ZPIXELS")))
-    ("WARP_TRI"               fun nil                 (system) "Result = %s( Xo, Yo, Xi, Yi, Image)" (("EXTRAPOLATE") ("OUTPUT_SIZE") ("QUINTIC") ("TPS")))
-    ("WATERSHED"              fun nil                 (system) "Result = %s ( Image)" (("CONNECTIVITY")))
-    ("WHERE"                  fun nil                 (system) "Result = %s( Array_Expression [, Count])" (("COMPLEMENT") ("L64") ("NCOMPLEMENT") ("TPOOL_MAX_ELTS") ("TPOOL_MIN_ELTS") ("TPOOL_NOTHREAD")))
-    ("WIDGET_ACTIVEX"         fun nil                 (system) "Result = %s( Parent, COM_ID)" (("ALIGN_BOTTOM") ("ALIGN_CENTER") ("ALIGN_LEFT") ("ALIGN_RIGHT") ("ALIGN_TOP") ("EVENT_FUNC") ("EVENT_PRO") ("FUNC_GET_VALUE") ("ID_TYPE") ("KILL_NOTIFY") ("NO_COPY") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("SCR_XSIZE") ("SCR_YSIZE") ("SENSITIVE") ("UNAME") ("UNITS") ("UVALUE") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE")))
-    ("WIDGET_BASE"            fun nil                 (system) "Result = %s( [Parent])" (("ALIGN_BOTTOM") ("ALIGN_CENTER") ("ALIGN_LEFT") ("ALIGN_RIGHT") ("ALIGN_TOP") ("APP_MBAR") ("BASE_ALIGN_BOTTOM") ("BASE_ALIGN_CENTER") ("BASE_ALIGN_LEFT") ("BASE_ALIGN_RIGHT") ("BASE_ALIGN_TOP") ("COLUMN") ("CONTEXT_MENU") ("DISPLAY_NAME") ("EVENT_FUNC") ("EVENT_PRO") ("EXCLUSIVE") ("FLOATING") ("FRAME") ("FUNC_GET_VALUE") ("GRID_LAYOUT") ("GROUP_LEADER") ("KBRD_FOCUS_EVENTS") ("KILL_NOTIFY") ("MAP") ("MBAR") ("MODAL") ("NO_COPY") ("NONEXCLUSIVE") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESOURCE_NAME") ("RNAME_MBAR") ("ROW") ("SCR_XSIZE") ("SCR_YSIZE") ("SCROLL") ("SENSITIVE") ("SPACE") ("TITLE") ("TLB_FRAME_ATTR") ("TLB_KILL_REQUEST_EVENTS") ("TLB_SIZE_EVENTS") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("X_SCROLL_SIZE") ("XOFFSET") ("XPAD") ("XSIZE") ("Y_SCROLL_SIZE") ("YOFFSET") ("YPAD") ("YSIZE")))
-    ("WIDGET_BUTTON"          fun nil                 (system) "Result = %s( Parent)" (("ALIGN_CENTER") ("ALIGN_LEFT") ("ALIGN_RIGHT") ("BITMAP") ("DYNAMIC_RESIZE") ("EVENT_FUNC") ("EVENT_PRO") ("FONT") ("FRAME") ("FUNC_GET_VALUE") ("GROUP_LEADER") ("HELP") ("KILL_NOTIFY") ("MENU") ("NO_COPY") ("NO_RELEASE") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESOURCE_NAME") ("SCR_XSIZE") ("SCR_YSIZE") ("SENSITIVE") ("SEPARATOR") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("VALUE") ("X_BITMAP_EXTRA") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE")))
-    ("WIDGET_DRAW"            fun nil                 (system) "Result = %s(Parent)" (("APP_SCROLL") ("BUTTON_EVENTS") ("COLOR_MODEL") ("COLORS") ("EVENT_FUNC") ("EVENT_PRO") ("EXPOSE_EVENTS") ("FRAME") ("FUNC_GET_VALUE") ("GRAPHICS_LEVEL") ("GROUP_LEADER") ("KILL_NOTIFY") ("MOTION_EVENTS") ("NO_COPY") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RENDERER") ("RESOURCE_NAME") ("RETAIN") ("SCR_XSIZE") ("SCR_YSIZE") ("SCROLL") ("SENSITIVE") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("VALUE") ("VIEWPORT_EVENTS") ("X_SCROLL_SIZE") ("XOFFSET") ("XSIZE") ("Y_SCROLL_SIZE") ("YOFFSET") ("YSIZE")))
-    ("WIDGET_DROPLIST"        fun nil                 (system) "Result = %s( Parent)" (("DYNAMIC_RESIZE") ("EVENT_FUNC") ("EVENT_PRO") ("FONT") ("FRAME") ("FUNC_GET_VALUE") ("GROUP_LEADER") ("KILL_NOTIFY") ("NO_COPY") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESOURCE_NAME") ("SCR_XSIZE") ("SCR_YSIZE") ("SENSITIVE") ("TITLE") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("VALUE") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE")))
-    ("WIDGET_EVENT"           fun nil                 (system) "Result = %s([Widget_ID])" (("BAD_ID") ("NOWAIT") ("SAVE_HOURGLASS") ("YIELD_TO_TTY")))
-    ("WIDGET_INFO"            fun nil                 (system) "Result = %s( [Widget_ID] )" (("ACTIVE") ("CHILD") ("COLUMN_WIDTHS") ("CONTEXT_EVENTS") ("DRAW_BUTTON_EVENTS") ("DRAW_EXPOSE_EVENTS") ("DRAW_MOTION_EVENTS") ("DRAW_VIEWPORT_EVENTS") ("DROPLIST_NUMBER") ("DROPLIST_SELECT") ("DYNAMIC_RESIZE") ("EVENT_FUNC") ("EVENT_PRO") ("FIND_BY_UNAME") ("GEOMETRY") ("KBRD_FOCUS_EVENTS") ("LIST_MULTIPLE") ("LIST_NUM_VISIBLE") ("LIST_NUMBER") ("LIST_SELECT") ("LIST_TOP") ("MANAGED") ("MODAL") ("NAME") ("PARENT") ("REALIZED") ("ROW_HEIGHTS") ("SIBLING") ("SLIDER_MIN_MAX") ("SYSTEM_COLORS") ("TABLE_ALL_EVENTS") ("TABLE_EDIT_CELL") ("TABLE_EDITABLE") ("TABLE_SELECT") ("TABLE_VIEW") ("TEXT_ALL_EVENTS") ("TEXT_EDITABLE") ("TEXT_NUMBER") ("TEXT_OFFSET_TO_XY") ("TEXT_SELECT") ("TEXT_TOP_LINE") ("TEXT_XY_TO_OFFSET") ("TLB_KILL_REQUEST_EVENTS") ("TRACKING_EVENTS") ("TYPE") ("UNAME") ("UNITS") ("UPDATE") ("USE_TABLE_SELECT") ("VALID_ID") ("VERSION")))
-    ("WIDGET_LABEL"           fun nil                 (system) "Result = %s( Parent)" (("ALIGN_CENTER") ("ALIGN_LEFT") ("ALIGN_RIGHT") ("DYNAMIC_RESIZE") ("FONT") ("FRAME") ("FUNC_GET_VALUE") ("GROUP_LEADER") ("KILL_NOTIFY") ("NO_COPY") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESOURCE_NAME") ("SCR_XSIZE") ("SCR_YSIZE") ("SENSITIVE") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("VALUE") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE")))
-    ("WIDGET_LIST"            fun nil                 (system) "Result = %s( Parent)" (("CONTEXT_EVENTS") ("EVENT_FUNC") ("EVENT_PRO") ("FONT") ("FRAME") ("FUNC_GET_VALUE") ("GROUP_LEADER") ("KILL_NOTIFY") ("MULTIPLE") ("NO_COPY") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESOURCE_NAME") ("SCR_XSIZE") ("SCR_YSIZE") ("SENSITIVE") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("VALUE") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE")))
-    ("WIDGET_SLIDER"          fun nil                 (system) "Result = %s( Parent)" (("DRAG") ("EVENT_FUNC") ("EVENT_PRO") ("FONT") ("FRAME") ("FUNC_GET_VALUE") ("GROUP_LEADER") ("KILL_NOTIFY") ("MAXIMUM") ("MINIMUM") ("NO_COPY") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESOURCE_NAME") ("SCR_XSIZE") ("SCR_YSIZE") ("SCROLL") ("SENSITIVE") ("SUPPRESS_VALUE") ("TITLE") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("VALUE") ("VERTICAL") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE")))
-    ("WIDGET_TABLE"           fun nil                 (system) "Result = %s( Parent)" (("ALIGNMENT") ("ALL_EVENTS") ("AM_PM") ("COLUMN_LABELS") ("COLUMN_MAJOR") ("COLUMN_WIDTHS") ("DAYS_OF_WEEK") ("EDITABLE") ("EVENT_FUNC") ("EVENT_PRO") ("FONT") ("FORMAT") ("FRAME") ("FUNC_GET_VALUE") ("GROUP_LEADER") ("KBRD_FOCUS_EVENTS") ("KILL_NOTIFY") ("MONTHS") ("NO_COPY") ("NO_HEADERS") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESIZEABLE_COLUMNS") ("RESIZEABLE_ROWS") ("RESOURCE_NAME") ("ROW_HEIGHTS") ("ROW_LABELS") ("ROW_MAJOR") ("SCR_XSIZE") ("SCR_YSIZE") ("SCROLL") ("SENSITIVE") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("VALUE") ("X_SCROLL_SIZE") ("XOFFSET") ("XSIZE") ("Y_SCROLL_SIZE") ("YOFFSET") ("YSIZE")))
-    ("WIDGET_TEXT"            fun nil                 (system) "Result = %s( Parent)" (("ALL_EVENTS") ("CONTEXT_EVENTS") ("EDITABLE") ("EVENT_FUNC") ("EVENT_PRO") ("FONT") ("FRAME") ("FUNC_GET_VALUE") ("GROUP_LEADER") ("KBRD_FOCUS_EVENTS") ("KILL_NOTIFY") ("NO_COPY") ("NO_NEWLINE") ("NOTIFY_REALIZE") ("PRO_SET_VALUE") ("RESOURCE_NAME") ("SCR_XSIZE") ("SCR_YSIZE") ("SCROLL") ("SENSITIVE") ("TRACKING_EVENTS") ("UNAME") ("UNITS") ("UVALUE") ("VALUE") ("WRAP") ("XOFFSET") ("XSIZE") ("YOFFSET") ("YSIZE")))
-    ("WRITE_SYLK"             fun nil                 (system) "Result = %s( File, Data)" (("STARTCOL") ("STARTROW")))
-    ("WTN"                    fun nil                 (system) "Result = %s( A, Coef)" (("COLUMN") ("DOUBLE") ("INVERSE") ("OVERWRITE")))
-    ("XFONT"                  fun nil                 (system) "Result = %s()" (("GROUP") ("PRESERVE_FONT_INFO")))
-    ("XREGISTERED"            fun nil                 (system) "Result = %s(Name)" (("NO_SHOW")))
-    ("XSQ_TEST"               fun nil                 (system) "Result = %s( Obfreq, Exfreq)" (("EXCELL") ("OBCELL") ("RESIDUAL")))
-    ("Add"                    pro "IDL_Container"     (system) "Obj -> [%s::]%s, Object" (("POSITION")))
-    ("Cleanup"                pro "IDL_Container"     (system) "Obj-> [%s::]%s" nil)
-    ("Move"                   pro "IDL_Container"     (system) "Obj -> [%s::]%s, Source, Destination" nil)
-    ("Remove"                 pro "IDL_Container"     (system) "Obj -> [%s::]%s [, Child_object]" (("ALL") ("POSITION")))
-    ("Count"                  fun "IDL_Container"     (system) "Result = Obj -> [%s::]%s()" nil)
-    ("Get"                    fun "IDL_Container"     (system) "Result = Obj -> [%s::]%s ()" (("ALL") ("COUNT") ("ISA") ("POSITION")))
-    ("Init"                   fun "IDL_Container"     (system) "Result = Obj -> [%s::]%s( ) ('IDL_Container')" nil)
-    ("IsContained"            fun "IDL_Container"     (system) "Result = Obj -> [%s::]%s( Object)" (("POSITION")))
-    ("AppendData"             pro "IDLanROI"          (system) "Obj->[%s::]%s, X [, Y] [, Z]" (("XRANGE") ("YRANGE") ("ZRANGE")))
-    ("Cleanup"                pro "IDLanROI"          (system) "Obj->[%s::]%s" nil)
-    ("GetProperty"            pro "IDLanROI"          (system) "Obj->[%s::]%s" (("ALL") ("BLOCKSIZE") ("DATA") ("DOUBLE") ("INTERIOR") ("N_VERTS") ("ROI_XRANGE") ("ROI_YRANGE") ("ROI_ZRANGE") ("TYPE")))
-    ("RemoveData"             pro "IDLanROI"          (system) "Obj->[%s::]%s" (("COUNT") ("START") ("XRANGE") ("YRANGE") ("ZRANGE")))
-    ("ReplaceData"            pro "IDLanROI"          (system) "Obj->[%s::]%s, X[, Y[, Z]]" (("FINISH") ("START") ("XRANGE") ("YRANGE") ("ZRANGE")))
-    ("Rotate"                 pro "IDLanROI"          (system) "Obj->[%s::]%s, Axis, Angle" (("CENTER")))
-    ("Scale"                  pro "IDLanROI"          (system) "Obj->[%s::]%s, Sx[, Sy[, Sz]]" nil)
-    ("SetProperty"            pro "IDLanROI"          (system) "Obj->[%s::]%s" (("BLOCKSIZE") ("DATA") ("DOUBLE") ("INTERIOR")))
-    ("Translate"              pro "IDLanROI"          (system) "Obj->[%s::]%s, Tx[, Ty[, Tz]]" nil)
-    ("ComputeGeometry"        fun "IDLanROI"          (system) "Result = Obj->[%s::]%s()" (("AREA") ("CENTROID") ("PERIMETER") ("SPATIAL_OFFSET") ("SPATIAL_SCALE")))
-    ("ComputeMask"            fun "IDLanROI"          (system) "Result = Obj->[%s::]%s()" (("DIMENSIONS") ("INITIALIZE") ("LOCATION") ("MASK_IN") ("MASK_RULE") ("PLANE_NORMAL") ("PLANE_XAXIS")))
-    ("ContainsPoints"         fun "IDLanROI"          (system) "Result = Obj->[%s::]%s( X [, Y [, Z]] )" nil)
-    ("Init"                   fun "IDLanROI"          (system) "Result = Obj -> [%s::]%s( [X [, Y [, Z ]]] ) ( 'IDLanROI' [, X [, Y [, Z]]])" (("BLOCKSIZE") ("DATA") ("DOUBLE") ("INTERIOR") ("TYPE")))
-    ("Add"                    pro "IDLanROIGroup"     (system) "Obj->[%s::]%s, ROI" nil)
-    ("Cleanup"                pro "IDLanROIGroup"     (system) "Obj->[%s::]%s" nil)
-    ("GetProperty"            pro "IDLanROIGroup"     (system) "Obj->[%s::]%s" (("ALL") ("ROIGROUP_XRANGE") ("ROIGROUP_YRANGE") ("ROIGROUP_ZRANGE")))
-    ("Rotate"                 pro "IDLanROIGroup"     (system) "Obj->[%s::]%s, Axis, Angle" (("CENTER")))
-    ("Scale"                  pro "IDLanROIGroup"     (system) "Obj->[%s::]%s, Sx[, Sy[, Sz]]" nil)
-    ("Translate"              pro "IDLanROIGroup"     (system) "Obj->[%s::]%s, Tx[, Ty[, Tz]]" nil)
-    ("ComputeMask"            fun "IDLanROIGroup"     (system) "Result = Obj->[%s::]%s()" (("DIMENSIONS") ("INITIALIZE") ("LOCATION") ("MASK_IN") ("MASK_RULE")))
-    ("ComputeMesh"            fun "IDLanROIGroup"     (system) "Result = Obj->[%s::]%s( Vertices, Conn)" (("CAPPED") ("SURFACE_AREA")))
-    ("ContainsPoints"         fun "IDLanROIGroup"     (system) "Result = Obj->[%s::]%s( X[, Y[, Z]] )" nil)
-    ("Init"                   fun "IDLanROIGroup"     (system) "Result = Obj->[%s::]%s( ) ('IDLanROIGroup')" nil)
-    ("GetProperty"            pro "IDLcomIDispatch"   (system) "Obj->[%s::]%s" (("PROPERTY_NAME")))
-    ("SetProperty"            pro "IDLcomIDispatch"   (system) "Obj->[%s::]%s" (("PROPERTY_NAME")))
-    ("Init"                   fun "IDLcomIDispatch"   (system) "Result = Obj -> [%s::]%s()" nil)
-    ("Connect"                pro "IDLdbDatabase"     (system) "DBobj ->[%s::]%s" (("CONNECTION") ("DATASOURCE") ("PASSWORD") ("USER_ID")))
-    ("ExecuteSQL"             pro "IDLdbDatabase"     (system) "DBobj->ExecuteSQL, strSQL" nil)
-    ("GetProperty"            pro "IDLdbDatabase"     (system) "DBobj->GetProperty" (("CAN_GET_TABLES") ("DBMS_NAME") ("DBMS_VERSION") ("DRIVER_ODBC_LEVEL") ("DRIVER_VERSION") ("IS_CONNECTED") ("IS_READONLY") ("MAX_CONNECTIONS") ("MAX_RECORDSETS") ("ODBC_LEVEL") ("SQL_LEVEL") ("SQL_SERVER_NAME") ("USE_CURSOR_LIB") ("USER_NAME")))
-    ("SetProperty"            pro "IDLdbDatabase"     (system) "DBobj->SetProperty" (("N_BUFFERS") ("SQL") ("TABLE") ("USE_CURSOR_LIB") ("VERBOSE")))
-    ("GetDatasources"         fun "IDLdbDatabase"     (system) "Datasources = DBObj->GetDatasources()" nil)
-    ("GetTables"              fun "IDLdbDatabase"     (system) "Tables = DBObj->GetTables()" nil)
-    ("AddRecord"              pro "IDLdbRecordset"    (system) "RSObj->AddRecord, [field1][field2]...[fieldn]" (("SET_AUTOINCREMENT")))
-    ("DeleteRecord"           pro "IDLdbRecordset"    (system) "RSobj->DeleteRecord" nil)
-    ("GetProperty"            pro "IDLdbRecordset"    (system) "RSobj->GetProperty" (("CAN_MOVE_ABSOLUTE") ("CAN_MOVE_FIRST") ("CAN_MOVE_LAST") ("CAN_MOVE_NEXT") ("CAN_MOVE_PRIOR") ("CAN_MOVE_RELATIVE") ("FIELD_INFO") ("GET_DATABASE") ("IS_READONLY") ("N_BUFFERS") ("RECORDSET_SOURCE")))
-    ("SetField"               pro "IDLdbRecordset"    (system) "RSobj->SetField, iFieldNumber, Value" (("INFORMIX") ("NULL") ("SQL_TSI_DAY") ("SQL_TSI_FRAC_SECOND") ("SQL_TSI_HOUR") ("SQL_TSI_MINUTE") ("SQL_TSI_MONTH") ("SQL_TSI_QUARTER") ("SQL_TSI_SECOND") ("SQL_TSI_WEEK") ("SQL_TSI_YEAR") ("TNSNAME") ("UNIX")))
-    ("CurrentRecord"          fun "IDLdbRecordset"    (system) "number = RSobj->CurrentRecord()" nil)
-    ("GetField"               fun "IDLdbRecordset"    (system) "value = RSobj->GetField(iFieldNumber)" (("IS_NULL") ("NULL_VALUE")))
-    ("GetRecord"              fun "IDLdbRecordset"    (system) "Result = RSObj->GetRecord()" nil)
-    ("MoveCursor"             fun "IDLdbRecordset"    (system) "Result = RSObj->MoveCursor()" (("ABSOLUTE") ("FIRST") ("LAST") ("NEXT") ("PRIOR") ("RELATIVE")))
-    ("NFields"                fun "IDLdbRecordset"    (system) "status = RSobj->NFields()" nil)
-    ("Cleanup"                pro "IDLffDICOM"        (system) "OBJ -> [%s::]%s" nil)
-    ("DumpElements"           pro "IDLffDICOM"        (system) "Obj -> [%s::]%s [, Filename]" nil)
-    ("Reset"                  pro "IDLffDICOM"        (system) "Obj -> [%s::]%s" nil)
-    ("GetChildren"            fun "IDLffDICOM"        (system) "array = Obj -> [%s::]%s( Reference )" nil)
-    ("GetDescription"         fun "IDLffDICOM"        (system) "array = Obj -> [%s::]%s( [Group [, Element]])" (("REFERENCE")))
-    ("GetElement"             fun "IDLffDICOM"        (system) "array = Obj -> [%s::]%s( [Group [, Element]])" (("REFERENCE")))
-    ("GetGroup"               fun "IDLffDICOM"        (system) "array = Obj -> [%s::]%s( [Group[, Element]])" (("REFERENCE")))
-    ("GetLength"              fun "IDLffDICOM"        (system) "array = Obj -> [%s::]%s( [Group [, Element]])" (("REFERENCE")))
-    ("GetParent"              fun "IDLffDICOM"        (system) "array = Obj ->[%s::]%s( ReferenceList )" nil)
-    ("GetPreamble"            fun "IDLffDICOM"        (system) "array = Obj -> [%s::]%s( )" nil)
-    ("GetReference"           fun "IDLffDICOM"        (system) "array = Obj -> [%s::]%s( [Group [, Element]])" (("DESCRIPTION") ("VR")))
-    ("GetValue"               fun "IDLffDICOM"        (system) "ptrArray = Obj -> [%s::]%s( [Group [, Element]])" (("NO_COPY") ("REFERENCE")))
-    ("GetVR"                  fun "IDLffDICOM"        (system) "array = Obj -> [%s::]%s( [Group [, Element]])" (("REFERENCE")))
-    ("Init"                   fun "IDLffDICOM"        (system) "Result = Obj -> [%s::]%s( [Filename])" (("VERBOSE")))
-    ("Read"                   fun "IDLffDICOM"        (system) "Result = Obj -> [%s::]%s( Filename)" (("ENDIAN")))
-    ("Cleanup"                pro "IDLffDXF"          (system) "Obj -> [%s::]%s" nil)
-    ("GetPalette"             pro "IDLffDXF"          (system) "Obj-> [%s::]%s, Red, Green, Blue" nil)
-    ("PutEntity"              pro "IDLffDXF"          (system) "Obj -> [%s::]%s, Data" nil)
-    ("RemoveEntity"           pro "IDLffDXF"          (system) "Obj -> [%s::]%s[, Type]" (("INDEX")))
-    ("Reset"                  pro "IDLffDXF"          (system) "Obj-> [%s::]%s" nil)
-    ("SetPalette"             pro "IDLffDXF"          (system) "Obj-> [%s::]%s, Red, Green, Blue" nil)
-    ("GetContents"            fun "IDLffDXF"          (system) "Result = Obj-> [%s::]%s( [Filter])" (("BLOCK") ("COUNT") ("LAYER")))
-    ("GetEntity"              fun "IDLffDXF"          (system) "Result = Obj-> [%s::]%s( Type)" (("BLOCK") ("INDEX") ("LAYER")))
-    ("Init"                   fun "IDLffDXF"          (system) "Result = Obj -> [%s::]%s( [Filename] ) ('IDLffDXF' [, Filename] )" nil)
-    ("Read"                   fun "IDLffDXF"          (system) "Result = Obj-> [%s::]%s( Filename )" nil)
-    ("Write"                  fun "IDLffDXF"          (system) "Result = Obj-> [%s::]%s( Filename )" nil)
-    ("IsValid"                fun "IDLffLanguageCat"  (system) "Result = Obj ->[%s::]%s( )" nil)
-    ("Query"                  fun "IDLffLanguageCat"  (system) "Result = Obj ->[%s::]%s( key)" (("DEFAULT_STRING")))
-    ("SetCatalog"             fun "IDLffLanguageCat"  (system) "Result = Obj ->[%s::]%s( application)" (("FILENAME") ("LOCALE") ("PATH")))
-    ("Cleanup"                pro "IDLffMrSID"        (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLffMrSID"        (system) "Obj->[%s::]%s" (("CHANNELS") ("DIMENSIONS") ("GEO_ORIGIN") ("GEO_PROJTYPE") ("GEO_RESOLUTION") ("GEO_VALID") ("LEVELS") ("PIXEL_TYPE") ("TYPE")))
-    ("GetDimsAtLevel"         fun "IDLffMrSID"        (system) "Dims = Obj -> [%s::]%s ( Level )" nil)
-    ("GetImageData"           fun "IDLffMrSID"        (system) "ImageData = Obj->[%s::]%s ()" (("LEVEL") ("SUB_RECT")))
-    ("Init"                   fun "IDLffMrSID"        (system) "Result = Obj -> [%s::]%s(, Filename)" (("QUIET")))
-    ("AddAttribute"           pro "IDLffShape"        (system) "Obj->[%s::]%s, Name, Type, Width" (("PRECISION")))
-    ("Cleanup"                pro "IDLffShape"        (system) "Obj -> [%s::]%s" nil)
-    ("Close"                  pro "IDLffShape"        (system) "Obj->[%s::]%s" nil)
-    ("DestroyEntity"          pro "IDLffShape"        (system) "Obj->[%s::]%s, Entity" nil)
-    ("GetProperty"            pro "IDLffShape"        (system) "Obj->[%s::]%s" (("ATTRIBUTE_INFO") ("ATTRIBUTE_NAMES") ("ENTITY_TYPE") ("FILENAME") ("IS_OPEN") ("N_ATTRIBUTES") ("N_ENTITIES")))
-    ("PutEntity"              pro "IDLffShape"        (system) "Obj->[%s::]%s, Data" nil)
-    ("SetAttributes"          pro "IDLffShape"        (system) "Obj->[%s::]%s, Index, Attribute_Num, Value or Obj->[IDLffShape::]SetAttributes, Index, Attributes" nil)
-    ("GetAttributes"          fun "IDLffShape"        (system) "Result = Obj->[%s::]%s([Index])" (("ALL") ("ATTRIBUTE_STRUCTURE")))
-    ("GetEntity"              fun "IDLffShape"        (system) "Result = Obj->[%s::]%s( [Index])" (("ALL") ("ATTRIBUTES")))
-    ("Init"                   fun "IDLffShape"        (system) "Result = Obj -> [%s::]%s( [ Filename])" (("ENTITY_TYPE") ("UPDATE")))
-    ("Open"                   fun "IDLffShape"        (system) "Result = Obj->[%s::]%s( `Filename')" (("ENTITY_TYPE") ("UPDATE")))
-    ("Cleanup"                pro "IDLgrAxis"         (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrAxis"         (system) "Obj -> [%s::]%s" (("ALL") ("AM_PM") ("COLOR") ("CRANGE") ("DAYS_OF_WEEK") ("DIRECTION") ("EXACT") ("EXTEND") ("GRIDSTYLE") ("HIDE") ("LOCATION") ("LOG") ("MAJOR") ("MINOR") ("MONTHS") ("NAME") ("NOTEXT") ("PALETTE") ("PARENT") ("RANGE") ("SUBTICKLEN") ("TEXTALIGNMENTS") ("TEXTBASELINE") ("TEXTPOS") ("TEXTUPDIR") ("THICK") ("TICKDIR") ("TICKFORMAT") ("TICKFRMTDATA") ("TICKINTERVAL") ("TICKLAYOUT") ("TICKLEN") ("TICKTEXT") ("TICKUNITS") ("TICKVALUES") ("TITLE") ("USE_TEXT_COLOR") ("UVALUE") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrAxis"         (system) "Obj -> [%s::]%s" (("AM_PM") ("COLOR") ("DAYS_OF_WEEK") ("DIRECTION") ("EXACT") ("EXTEND") ("GRIDSTYLE") ("HIDE") ("LOCATION") ("LOG") ("MAJOR") ("MINOR") ("MONTHS") ("NAME") ("NOTEXT") ("PALETTE") ("RANGE") ("SUBTICKLEN") ("TEXTALIGNMENTS") ("TEXTBASELINE") ("TEXTPOS") ("TEXTUPDIR") ("THICK") ("TICKDIR") ("TICKFORMAT") ("TICKFRMTDATA") ("TICKINTERVAL") ("TICKLAYOUT") ("TICKLEN") ("TICKTEXT") ("TICKUNITS") ("TICKVALUES") ("TITLE") ("USE_TEXT_COLOR") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("GetCTM"                 fun "IDLgrAxis"         (system) "Result = Obj -> [%s::]%s()" (("DESTINATION") ("PATH") ("TOP")))
-    ("Init"                   fun "IDLgrAxis"         (system) "Result = Obj -> [%s::]%s( [Direction] ) ('IDLgrAxis' [, Direction])" (("AM_PM") ("COLOR") ("DAYS_OF_WEEK") ("DIRECTION") ("EXACT") ("EXTEND") ("GRIDSTYLE") ("HIDE") ("LOCATION") ("LOG") ("MAJOR") ("MINOR") ("MONTHS") ("NAME") ("NOTEXT") ("PALETTE") ("RANGE") ("SUBTICKLEN") ("TEXTALIGNMENTS") ("TEXTBASELINE") ("TEXTPOS") ("TEXTUPDIR") ("THICK") ("TICKDIR") ("TICKFORMAT") ("TICKFRMTDATA") ("TICKINTERVAL") ("TICKLAYOUT") ("TICKLEN") ("TICKTEXT") ("TICKUNITS") ("TICKVALUES") ("TITLE") ("USE_TEXT_COLOR") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("Cleanup"                pro "IDLgrBuffer"       (system) "Obj -> [%s::]%s" nil)
-    ("Draw"                   pro "IDLgrBuffer"       (system) "Obj -> [%s::]%s [, Picture]" (("CREATE_INSTANCE") ("DRAW_INSTANCE")))
-    ("Erase"                  pro "IDLgrBuffer"       (system) "Obj -> [%s::]%s" (("COLOR")))
-    ("GetDeviceInfo"          pro "IDLgrBuffer"       (system) "Obj->[%s::]%s" (("ALL") ("MAX_TEXTURE_DIMENSIONS") ("MAX_VIEWPORT_DIMENSIONS") ("NAME") ("NUM_CPUS") ("VENDOR") ("VERSION")))
-    ("GetProperty"            pro "IDLgrBuffer"       (system) "Obj -> [%s::]%s" (("ALL") ("COLOR_MODEL") ("DIMENSIONS") ("GRAPHICS_TREE") ("IMAGE_DATA") ("N_COLORS") ("PALETTE") ("QUALITY") ("RESOLUTION") ("SCREEN_DIMENSIONS") ("UNITS") ("UVALUE") ("ZBUFFER_DATA")))
-    ("SetProperty"            pro "IDLgrBuffer"       (system) "Obj -> [%s::]%s" (("DIMENSIONS") ("GRAPHICS_TREE") ("PALETTE") ("QUALITY") ("RESOLUTION") ("UNITS") ("UVALUE")))
-    ("GetContiguousPixels"    fun "IDLgrBuffer"       (system) "Return = Obj -> [%s::]%s()" nil)
-    ("GetFontnames"           fun "IDLgrBuffer"       (system) "Return = Obj -> [%s::]%s( FamilyName)" (("IDL_FONTS") ("STYLES")))
-    ("GetTextDimensions"      fun "IDLgrBuffer"       (system) "Result = Obj ->[%s::]%s( TextObj)" (("DESCENT") ("PATH")))
-    ("Init"                   fun "IDLgrBuffer"       (system) "Result = Obj -> [%s::]%s( ) ('IDLgrBuffer')" (("COLOR_MODEL") ("DIMENSIONS") ("GRAPHICS_TREE") ("N_COLORS") ("PALETTE") ("QUALITY") ("RESOLUTION") ("UNITS") ("UVALUE")))
-    ("PickData"               fun "IDLgrBuffer"       (system) "Result = Obj -> [%s::]%s( View, Object, Location, XYZLocation)" (("DIMENSIONS") ("PATH")))
-    ("Read"                   fun "IDLgrBuffer"       (system) "Result = Obj -> [%s::]%s()" nil)
-    ("Select"                 fun "IDLgrBuffer"       (system) "Result = Obj -> [%s::]%s(Picture, XY)" (("DIMENSIONS") ("UNITS")))
-    ("Cleanup"                pro "IDLgrClipboard"    (system) "Obj-> [%s::]%s" nil)
-    ("Draw"                   pro "IDLgrClipboard"    (system) "Obj -> [%s::]%s [, Picture]" (("FILENAME") ("POSTSCRIPT") ("VECTOR")))
-    ("GetDeviceInfo"          pro "IDLgrClipboard"    (system) "Obj->[%s::]%s" (("ALL") ("MAX_TEXTURE_DIMENSIONS") ("MAX_VIEWPORT_DIMENSIONS") ("NAME") ("NUM_CPUS") ("VENDOR") ("VERSION")))
-    ("GetProperty"            pro "IDLgrClipboard"    (system) "Obj -> [%s::]%s" (("ALL") ("COLOR_MODEL") ("DIMENSIONS") ("GRAPHICS_TREE") ("N_COLORS") ("PALETTE") ("QUALITY") ("RESOLUTION") ("SCREEN_DIMENSIONS") ("UNITS") ("UVALUE")))
-    ("SetProperty"            pro "IDLgrClipboard"    (system) "Obj -> [%s::]%s" (("DIMENSIONS") ("GRAPHICS_TREE") ("PALETTE") ("QUALITY") ("RESOLUTION") ("UNITS") ("UVALUE")))
-    ("GetContiguousPixels"    fun "IDLgrClipboard"    (system) "Return = Obj ->[%s::]%s()" nil)
-    ("GetFontnames"           fun "IDLgrClipboard"    (system) "Return = Obj -> [%s::]%s( FamilyName)" (("IDL_FONTS") ("STYLES")))
-    ("GetTextDimensions"      fun "IDLgrClipboard"    (system) "Result = Obj ->[%s::]%s( TextObj)" (("DESCENT") ("PATH")))
-    ("Init"                   fun "IDLgrClipboard"    (system) "Result = Obj -> [%s::]%s( ) ('IDLgrClipboard')" (("COLOR_MODEL") ("DIMENSIONS") ("GRAPHICS_TREE") ("N_COLORS") ("PALETTE") ("QUALITY") ("RESOLUTION") ("UNITS") ("UVALUE")))
-    ("Cleanup"                pro "IDLgrColorbar"     (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrColorbar"     (system) "Obj -> [%s::]%s" (("ALL") ("BLUE_VALUES") ("COLOR") ("DIMENSIONS") ("GREEN_VALUES") ("HIDE") ("MAJOR") ("MINOR") ("NAME") ("PALETTE") ("PARENT") ("RED_VALUES") ("SHOW_AXIS") ("SHOW_OUTLINE") ("SUBTICKLEN") ("THICK") ("THREED") ("TICKFORMAT") ("TICKFRMTDATA") ("TICKLEN") ("TICKTEXT") ("TICKVALUES") ("TITLE") ("UVALUE") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrColorbar"     (system) "Obj -> [%s::]%s" (("BLUE_VALUES") ("COLOR") ("DIMENSIONS") ("GREEN_VALUES") ("HIDE") ("MAJOR") ("MINOR") ("NAME") ("PALETTE") ("RED_VALUES") ("SHOW_AXIS") ("SHOW_OUTLINE") ("SUBTICKLEN") ("THICK") ("TICKFORMAT") ("TICKFRMTDATA") ("TICKLEN") ("TICKTEXT") ("TICKVALUES") ("TITLE") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("ComputeDimensions"      fun "IDLgrColorbar"     (system) "Result = Obj ->[%s::]%s( DestinationObj)" (("PATH")))
-    ("Init"                   fun "IDLgrColorbar"     (system) "Result = Obj -> [%s::]%s( [aRed, aGreen, aBlue] ) ( 'IDLgrColorbar' [, aRed, aGreen, aBlue])" (("BLUE_VALUES") ("COLOR") ("DIMENSIONS") ("GREEN_VALUES") ("HIDE") ("MAJOR") ("MINOR") ("NAME") ("PALETTE") ("RED_VALUES") ("SHOW_AXIS") ("SHOW_OUTLINE") ("SUBTICKLEN") ("THICK") ("THREED") ("TICKFORMAT") ("TICKFRMTDATA") ("TICKLEN") ("TICKTEXT") ("TICKVALUES") ("TITLE") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("Cleanup"                pro "IDLgrContour"      (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrContour"      (system) "Obj -> [%s::]%s" (("ALL") ("ANISOTROPY") ("C_COLOR") ("C_FILL_PATTERN") ("C_LINESTYLE") ("C_THICK") ("C_VALUE") ("COLOR") ("DATA_VALUES") ("DEPTH_OFFSET") ("DOWNHILL") ("FILL") ("GEOM") ("HIDE") ("MAX_VALUE") ("MIN_VALUE") ("N_LEVELS") ("NAME") ("PALETTE") ("PARENT") ("PLANAR") ("POLYGONS") ("SHADE_RANGE") ("SHADING") ("TICKINTERVAL") ("TICKLEN") ("UVALUE") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrContour"      (system) "Obj -> [%s::]%s" (("ANISOTROPY") ("C_COLOR") ("C_FILL_PATTERN") ("C_LINESTYLE") ("C_THICK") ("C_VALUE") ("COLOR") ("DATA_VALUES") ("DEPTH_OFFSET") ("DOWNHILL") ("FILL") ("GEOMX") ("GEOMY") ("GEOMZ") ("HIDE") ("MAX_VALUE") ("MIN_VALUE") ("N_LEVELS") ("NAME") ("PALETTE") ("PLANAR") ("POLYGONS") ("SHADE_RANGE") ("SHADING") ("TICKINTERVAL") ("TICKLEN") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("GetCTM"                 fun "IDLgrContour"      (system) "Result = Obj -> [%s::]%s()" (("DESTINATION") ("PATH") ("TOP")))
-    ("Init"                   fun "IDLgrContour"      (system) "Result = Obj -> [%s::]%s( [Values] ) ('IDLgrContour' [, Values])" (("ANISOTROPY") ("C_COLOR") ("C_FILL_PATTERN") ("C_LINESTYLE") ("C_THICK") ("C_VALUE") ("COLOR") ("DATA_VALUES") ("DEPTH_OFFSET") ("DOUBLE_DATA") ("DOUBLE_GEOM") ("DOWNHILL") ("FILL") ("GEOMX") ("GEOMY") ("GEOMZ") ("HIDE") ("MAX_VALUE") ("MIN_VALUE") ("N_LEVELS") ("NAME") ("PALETTE") ("PLANAR") ("POLYGONS") ("SHADE_RANGE") ("SHADING") ("TICKINTERVAL") ("TICKLEN") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("Cleanup"                pro "IDLgrFont"         (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrFont"         (system) "" (("NAME") ("SIZE") ("SUBSTITUTE") ("THICK") ("UVALUE")))
-    ("SetProperty"            pro "IDLgrFont"         (system) "" (("NAME") ("SIZE") ("SUBSTITUTE") ("THICK") ("UVALUE")))
-    ("Init"                   fun "IDLgrFont"         (system) "Result = Obj -> [%s::]%s( [Fontname] ) ('IDLgrFont' [, Fontname])" (("NAME") ("SIZE") ("SUBSTITUTE") ("THICK") ("UVALUE")))
-    ("Cleanup"                pro "IDLgrImage"        (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrImage"        (system) "Obj -> [%s::]%s" (("ALL") ("BLEND_FUNCTION") ("CHANNEL") ("DATA") ("DIMENSIONS") ("GREYSCALE") ("HIDE") ("INTERLEAVE") ("INTERPOLATE") ("LOCATION") ("NAME") ("NO_COPY") ("ORDER") ("PALETTE") ("PARENT") ("SUB_RECT") ("UVALUE") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrImage"        (system) "Obj -> [%s::]%s" (("BLEND_FUNCTION") ("CHANNEL") ("DATA") ("DIMENSIONS") ("GREYSCALE") ("HIDE") ("INTERLEAVE") ("INTERPOLATE") ("LOCATION") ("NAME") ("NO_COPY") ("ORDER") ("PALETTE") ("RESET_DATA") ("SHARE_DATA") ("SUB_RECT") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("GetCTM"                 fun "IDLgrImage"        (system) "Result = Obj -> [%s::]%s()" (("DESTINATION") ("PATH") ("TOP")))
-    ("Init"                   fun "IDLgrImage"        (system) "Result = Obj -> [%s::]%s( [ImageData] ) ('IDLgrImage' [, ImageData])" (("BLEND_FUNCTION") ("CHANNEL") ("DATA") ("DIMENSIONS") ("GREYSCALE") ("HIDE") ("INTERLEAVE") ("INTERPOLATE") ("LOCATION") ("NAME") ("NO_COPY") ("ORDER") ("PALETTE") ("RESET_DATA") ("SHARE_DATA") ("SUB_RECT") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("Cleanup"                pro "IDLgrLegend"       (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrLegend"       (system) "Obj -> [%s::]%s" (("ALL") ("BORDER_GAP") ("COLUMNS") ("FILL_COLOR") ("FONT") ("GAP") ("GLYPH_WIDTH") ("HIDE") ("ITEM_COLOR") ("ITEM_LINESTYLE") ("ITEM_NAME") ("ITEM_OBJECT") ("ITEM_THICK") ("ITEM_TYPE") ("NAME") ("OUTLINE_COLOR") ("OUTLINE_THICK") ("PARENT") ("SHOW_FILL") ("SHOW_OUTLINE") ("TEXT_COLOR") ("TITLE") ("UVALUE") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrLegend"       (system) "Obj-> [%s::]%s" (("BORDER_GAP") ("COLUMNS") ("FILL_COLOR") ("FONT") ("GAP") ("GLYPH_WIDTH") ("HIDE") ("ITEM_COLOR") ("ITEM_LINESTYLE") ("ITEM_NAME") ("ITEM_OBJECT") ("ITEM_THICK") ("ITEM_TYPE") ("NAME") ("OUTLINE_COLOR") ("OUTLINE_THICK") ("RECOMPUTE") ("SHOW_FILL") ("SHOW_OUTLINE") ("TEXT_COLOR") ("TITLE") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("ComputeDimensions"      fun "IDLgrLegend"       (system) "Result = Obj ->[%s::]%s( DestinationObject)" (("PATH")))
-    ("Init"                   fun "IDLgrLegend"       (system) "Result = Obj -> [%s::]%s( [aItemNames] ) ('IDLgrLegend' [, aItemNames])" (("BORDER_GAP") ("COLUMNS") ("FILL_COLOR") ("FONT") ("GAP") ("GLYPH_WIDTH") ("HIDE") ("ITEM_COLOR") ("ITEM_LINESTYLE") ("ITEM_NAME") ("ITEM_OBJECT") ("ITEM_THICK") ("ITEM_TYPE") ("NAME") ("OUTLINE_COLOR") ("OUTLINE_THICK") ("SHOW_FILL") ("SHOW_OUTLINE") ("TEXT_COLOR") ("TITLE") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("Cleanup"                pro "IDLgrLight"        (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrLight"        (system) "Obj -> [%s::]%s" (("ALL") ("ATTENUATION") ("COLOR") ("CONEANGLE") ("DIRECTION") ("FOCUS") ("HIDE") ("INTENSITY") ("LOCATION") ("NAME") ("PARENT") ("TYPE") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("SetProperty"            pro "IDLgrLight"        (system) "Obj -> [%s::]%s" (("ATTENUATION") ("COLOR") ("CONEANGLE") ("DIRECTION") ("FOCUS") ("HIDE") ("INTENSITY") ("LOCATION") ("NAME") ("TYPE") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("GetCTM"                 fun "IDLgrLight"        (system) "Result = Obj -> [%s::]%s()" (("DESTINATION") ("PATH") ("TOP")))
-    ("Init"                   fun "IDLgrLight"        (system) "Result = Obj -> [%s::]%s( ) ('IDLgrLight')" (("ATTENUATION") ("COLOR") ("CONEANGLE") ("DIRECTION") ("FOCUS") ("HIDE") ("INTENSITY") ("LOCATION") ("NAME") ("TYPE") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("Add"                    pro "IDLgrModel"        (system) "Obj -> [%s::]%s, Object" (("ALIAS") ("POSITION")))
-    ("Cleanup"                pro "IDLgrModel"        (system) "Obj -> [%s::]%s" nil)
-    ("Draw"                   pro "IDLgrModel"        (system) "Obj -> [%s::]%s, Destination, Picture" nil)
-    ("GetProperty"            pro "IDLgrModel"        (system) "Obj -> [%s::]%s" (("ALL") ("HIDE") ("LIGHTING") ("NAME") ("PARENT") ("SELECT_TARGET") ("TRANSFORM") ("UVALUE")))
-    ("Reset"                  pro "IDLgrModel"        (system) "Obj -> [%s::]%s" nil)
-    ("Rotate"                 pro "IDLgrModel"        (system) "Obj -> [%s::]%s, Axis, Angle" (("PREMULTIPLY")))
-    ("Scale"                  pro "IDLgrModel"        (system) "Obj -> [%s::]%s, Sx, Sy, Sz" (("PREMULTIPLY")))
-    ("SetProperty"            pro "IDLgrModel"        (system) "Obj -> [%s::]%s" (("HIDE") ("LIGHTING") ("NAME") ("SELECT_TARGET") ("TRANSFORM") ("UVALUE")))
-    ("Translate"              pro "IDLgrModel"        (system) "Obj -> [%s::]%s, Tx, Ty, Tz" (("PREMULTIPLY")))
-    ("GetByName"              fun "IDLgrModel"        (system) "Result = Obj -> [%s::]%s(Name)" nil)
-    ("GetCTM"                 fun "IDLgrModel"        (system) "Result = Obj -> [%s::]%s()" (("DESTINATION") ("PATH") ("TOP")))
-    ("Init"                   fun "IDLgrModel"        (system) "Result = Obj -> [%s::]%s( ) ('IDLgrModel')" (("HIDE") ("LIGHTING") ("NAME") ("SELECT_TARGET") ("TRANSFORM") ("UVALUE")))
-    ("Cleanup"                pro "IDLgrMPEG"         (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrMPEG"         (system) "Obj -> [%s::]%s" (("ALL") ("BITRATE") ("DIMENSIONS") ("FILENAME") ("FORMAT") ("FRAME_RATE") ("IFRAME_GAP") ("INTERLACED") ("MOTION_VEC_LENGTH") ("QUALITY") ("SCALE") ("STATISTICS")))
-    ("Put"                    pro "IDLgrMPEG"         (system) "Obj -> [%s::]%s, Image[, Frame]" nil)
-    ("Save"                   pro "IDLgrMPEG"         (system) "Obj -> [%s::]%s" (("CREATOR_TYPE") ("FILENAME")))
-    ("SetProperty"            pro "IDLgrMPEG"         (system) "Obj -> [%s::]%s" (("BITRATE") ("DIMENSIONS") ("FILENAME") ("FORMAT") ("FRAME_RATE") ("IFRAME_GAP") ("INTERLACED") ("MOTION_VEC_LENGTH") ("QUALITY") ("SCALE") ("STATISTICS")))
-    ("Init"                   fun "IDLgrMPEG"         (system) "Result = Obj -> [%s::]%s( ) ('IDLgrMPEG')" (("BITRATE") ("DIMENSIONS") ("FILENAME") ("FORMAT") ("FRAME_RATE") ("IFRAME_GAP") ("INTERLACED") ("MOTION_VEC_LENGTH") ("QUALITY") ("SCALE") ("STATISTICS") ("TEMP_DIRECTORY")))
-    ("Cleanup"                pro "IDLgrPalette"      (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrPalette"      (system) "Obj -> [%s::]%s" (("ALL") ("BLUE_VALUES") ("BOTTOM_STRETCH") ("GAMMA") ("GREEN_VALUES") ("N_COLORS") ("NAME") ("RED_VALUES") ("TOP_STRETCH") ("UVALUE")))
-    ("LoadCT"                 pro "IDLgrPalette"      (system) "Obj -> [%s::]%s, TableNum" (("FILENAME")))
-    ("SetProperty"            pro "IDLgrPalette"      (system) "Obj -> [%s::]%s" (("BLUE_VALUES") ("BOTTOM_STRETCH") ("GAMMA") ("GREEN_VALUES") ("NAME") ("RED_VALUES") ("TOP_STRETCH") ("UVALUE")))
-    ("SetRGB"                 pro "IDLgrPalette"      (system) "Obj -> [%s::]%s, Index, Red, Green, Blue" nil)
-    ("GetRGB"                 fun "IDLgrPalette"      (system) "Result = Obj -> [%s::]%s(Index)" nil)
-    ("Init"                   fun "IDLgrPalette"      (system) "Result=Obj-> [%s::]%s( [aRed, aGreen, aBlue] ) ('IDLgrPalette', aRed, aGreen, aBlue)" (("BLUE_VALUES") ("BOTTOM_STRETCH") ("GAMMA") ("GREEN_VALUES") ("NAME") ("RED_VALUES") ("TOP_STRETCH") ("UVALUE")))
-    ("NearestColor"           fun "IDLgrPalette"      (system) "Result = Obj-> [%s::]%s(Red, Green, Blue)" nil)
-    ("Cleanup"                pro "IDLgrPattern"      (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrPattern"      (system) "Obj -> [%s::]%s" (("ALL") ("NAME") ("ORIENTATION") ("PATTERN") ("SPACING") ("STYLE") ("UVALUE")))
-    ("SetProperty"            pro "IDLgrPattern"      (system) "Obj -> [%s::]%s" (("NAME") ("ORIENTATION") ("PATTERN") ("SPACING") ("STYLE") ("UVALUE")))
-    ("Init"                   fun "IDLgrPattern"      (system) "Result = Obj -> [%s::]%s( [Style] ) ('IDLgrPattern' [, Style])" (("NAME") ("ORIENTATION") ("PATTERN") ("SPACING") ("STYLE") ("THICK") ("UVALUE")))
-    ("Cleanup"                pro "IDLgrPlot"         (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrPlot"         (system) "Obj -> [%s::]%s" (("ALL") ("COLOR") ("DATA") ("DOUBLE") ("HIDE") ("HISTOGRAM") ("LINESTYLE") ("MAX_VALUE") ("MIN_VALUE") ("NAME") ("NSUM") ("PALETTE") ("PARENT") ("POLAR") ("SYMBOL") ("THICK") ("UVALUE") ("VERT_COLORS") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZRANGE") ("ZVALUE")))
-    ("SetProperty"            pro "IDLgrPlot"         (system) "Obj -> [%s::]%s" (("COLOR") ("DATAY") ("DOUBLE") ("HIDE") ("HISTOGRAM") ("LINESTYLE") ("MAX_VALUE") ("MIN_VALUE") ("NAME") ("NSUM") ("PALETTE") ("POLAR") ("RESET_DATA") ("SHARE_DATA") ("SYMBOL") ("THICK") ("UVALUE") ("VERT_COLORS") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZVALUE")))
-    ("GetCTM"                 fun "IDLgrPlot"         (system) "Result = Obj -> [%s::]%s()" (("DESTINATION") ("PATH") ("TOP")))
-    ("Init"                   fun "IDLgrPlot"         (system) "Result = Obj -> [%s::]%s( [[X,] Y] ) ('IDLgrPlot' [, [X,] Y])" (("COLOR") ("DATAY") ("DOUBLE") ("HIDE") ("HISTOGRAM") ("LINESTYLE") ("MAX_VALUE") ("MIN_VALUE") ("NAME") ("NSUM") ("PALETTE") ("POLAR") ("RESET_DATA") ("SHARE_DATA") ("SYMBOL") ("THICK") ("USE_ZVALUE") ("UVALUE") ("VERT_COLORS") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZVALUE")))
-    ("Cleanup"                pro "IDLgrPolygon"      (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrPolygon"      (system) "Obj -> [%s::]%s" (("ALL") ("BOTTOM") ("COLOR") ("DATA") ("DOUBLE") ("FILL_PATTERN") ("HIDE") ("LINESTYLE") ("NAME") ("NORMALS") ("PARENT") ("POLYGONS") ("REJECT") ("SHADE_RANGE") ("SHADING") ("STYLE") ("TEXTURE_COORD") ("TEXTURE_INTERP") ("TEXTURE_MAP") ("THICK") ("VERT_COLORS") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZERO_OPACITY_SKIP") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrPolygon"      (system) "Obj -> [%s::]%s" (("BOTTOM") ("COLOR") ("DATA") ("DOUBLE") ("FILL_PATTERN") ("HIDE") ("LINESTYLE") ("NAME") ("NORMALS") ("POLYGONS") ("REJECT") ("RESET_DATA") ("SHADE_RANGE") ("SHADING") ("SHARE_DATA") ("STYLE") ("TEXTURE_COORD") ("TEXTURE_INTERP") ("TEXTURE_MAP") ("THICK") ("VERT_COLORS") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV") ("ZERO_OPACITY_SKIP")))
-    ("GetCTM"                 fun "IDLgrPolygon"      (system) "Result = Obj -> [%s::]%s()" (("DESTINATION") ("PATH") ("TOP")))
-    ("Init"                   fun "IDLgrPolygon"      (system) "Result = Obj -> [%s::]%s( [X, [Y, [Z]]] ) ('IDLgrPolygon' [, X [, Y[, Z]]])" (("BOTTOM") ("COLOR") ("DATA") ("DOUBLE") ("FILL_PATTERN") ("HIDDEN_LINES") ("HIDE") ("LINESTYLE") ("NAME") ("NORMALS") ("PALETTE") ("POLYGONS") ("REJECT") ("RESET_DATA") ("SHADE_RANGE") ("SHADING") ("SHARE_DATA") ("STYLE") ("TEXTURE_COORD") ("TEXTURE_INTERP") ("TEXTURE_MAP") ("THICK") ("VERT_COLORS") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV") ("ZERO_OPACITY_SKIP")))
-    ("Cleanup"                pro "IDLgrPolyline"     (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrPolyline"     (system) "Obj -> [%s::]%s" (("ALL") ("COLOR") ("DATA") ("DOUBLE") ("HIDE") ("LINESTYLE") ("NAME") ("PALETTE") ("PARENT") ("POLYLINES") ("SHADING") ("SYMBOL") ("THICK") ("UVALUE") ("VERT_COLORS") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrPolyline"     (system) "Obj -> [%s::]%s" (("COLOR") ("DATA") ("DOUBLE") ("HIDE") ("LINESTYLE") ("NAME") ("PALETTE") ("POLYLINES") ("RESET_DATA") ("SHADING") ("SHARE_DATA") ("SYMBOL") ("THICK") ("UVALUE") ("VERT_COLORS") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("GetCTM"                 fun "IDLgrPolyline"     (system) "Result = Obj -> [%s::]%s()" (("DESTINATION") ("PATH") ("TOP")))
-    ("Init"                   fun "IDLgrPolyline"     (system) "Result = Obj -> [%s::]%s( [X, [Y, [Z]]] ) ('IDLgrPolyline' [, X [, Y[, Z]]])" (("COLOR") ("DATA") ("DOUBLE") ("HIDE") ("LINESTYLE") ("NAME") ("PALETTE") ("POLYLINES") ("RESET_DATA") ("SHADING") ("SHARE_DATA") ("SYMBOL") ("THICK") ("UVALUE") ("VERT_COLORS") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("Cleanup"                pro "IDLgrPrinter"      (system) "Obj -> [%s::]%s" nil)
-    ("Draw"                   pro "IDLgrPrinter"      (system) "Obj -> [%s::]%s [, Picture]" (("VECTOR")))
-    ("GetProperty"            pro "IDLgrPrinter"      (system) "Obj -> [%s::]%s" (("ALL") ("COLOR_MODEL") ("DIMENSIONS") ("GRAPHICS_TREE") ("LANDSCAPE") ("N_COLORS") ("N_COPIES") ("NAME") ("PALETTE") ("PRINT_QUALITY") ("QUALITY") ("RESOLUTION") ("UNITS") ("UVALUE")))
-    ("NewDocument"            pro "IDLgrPrinter"      (system) "Obj -> [%s::]%s" nil)
-    ("NewPage"                pro "IDLgrPrinter"      (system) "Obj -> [%s::]%s" nil)
-    ("SetProperty"            pro "IDLgrPrinter"      (system) "Obj -> [%s::]%s" (("GRAPHICS_TREE") ("LANDSCAPE") ("N_COPIES") ("PALETTE") ("PRINT_QUALITY") ("QUALITY") ("UNITS") ("UVALUE")))
-    ("GetContiguousPixels"    fun "IDLgrPrinter"      (system) "Return = Obj -> [%s::]%s()" nil)
-    ("GetFontnames"           fun "IDLgrPrinter"      (system) "Return = Obj -> [%s::]%s( FamilyName)" (("IDL_FONTS") ("STYLES")))
-    ("GetTextDimensions"      fun "IDLgrPrinter"      (system) "Result = Obj ->[%s::]%s( TextObj)" (("DESCENT") ("PATH")))
-    ("Init"                   fun "IDLgrPrinter"      (system) "Result = Obj -> [%s::]%s( ) ('IDLgrPrinter')" (("COLOR_MODEL") ("GRAPHICS_TREE") ("LANDSCAPE") ("N_COLORS") ("N_COPIES") ("PALETTE") ("PRINT_QUALITY") ("QUALITY") ("UNITS") ("UVALUE")))
-    ("Cleanup"                pro "IDLgrROI"          (system) "Obj->[%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrROI"          (system) "Obj->[%s::]%s" (("ALL") ("COLOR") ("DOUBLE") ("HIDE") ("LINESTYLE") ("NAME") ("PALETTE") ("STYLE") ("SYMBOL") ("THICK") ("UVALUE") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrROI"          (system) "Obj->[%s::]%s" (("COLOR") ("DOUBLE") ("HIDE") ("LINESTYLE") ("NAME") ("PALETTE") ("STYLE") ("SYMBOL") ("THICK") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("Init"                   fun "IDLgrROI"          (system) "Result = Obj->[%s::]%s([X[, Y[, Z]]] ) ( 'IDLgrROI' [, X[, Y[, Z]]])" (("COLOR") ("DOUBLE") ("HIDE") ("LINESTYLE") ("NAME") ("PALETTE") ("STYLE") ("SYMBOL") ("THICK") ("UVALUE") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("PickVertex"             fun "IDLgrROI"          (system) "Result = Obj->[%s::]%s( Dest, View, Point)" (("PATH")))
-    ("Add"                    pro "IDLgrROIGroup"     (system) "Obj->[%s::]%s, ROI" nil)
-    ("Cleanup"                pro "IDLgrROIGroup"     (system) "Obj->[%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrROIGroup"     (system) "Obj->[%s::]%s" (("ALL") ("COLOR") ("HIDE") ("NAME") ("PARENT") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrROIGroup"     (system) "Obj->[%s::]%s" (("COLOR") ("HIDE") ("NAME") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("Init"                   fun "IDLgrROIGroup"     (system) "Result = Obj->[%s::]%s( ) ('IDLgrROIGroup')" (("COLOR") ("HIDE") ("NAME") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("PickRegion"             fun "IDLgrROIGroup"     (system) "Result = Obj->[%s::]%s( Dest, View, Point)" (("PATH")))
-    ("Add"                    pro "IDLgrScene"        (system) "Obj -> [%s::]%s, View" (("POSITION")))
-    ("Cleanup"                pro "IDLgrScene"        (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrScene"        (system) "Obj -> [%s::]%s" (("ALL") ("COLOR") ("HIDE") ("NAME") ("TRANSPARENT") ("UVALUE")))
-    ("SetProperty"            pro "IDLgrScene"        (system) "Obj -> [%s::]%s" (("COLOR") ("HIDE") ("NAME") ("TRANSPARENT") ("UVALUE")))
-    ("GetByName"              fun "IDLgrScene"        (system) "Result = Obj -> [%s::]%s(Name)" nil)
-    ("Init"                   fun "IDLgrScene"        (system) "Result = Obj -> [%s::]%s( ) ('IDLgrScene')" (("COLOR") ("HIDE") ("NAME") ("TRANSPARENT") ("UVALUE")))
-    ("Cleanup"                pro "IDLgrSurface"      (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrSurface"      (system) "Obj -> [%s::]%s" (("ALL") ("BOTTOM") ("COLOR") ("DATA") ("DOUBLE") ("EXTENDED_LEGO") ("HIDDEN_LINES") ("HIDE") ("LINESTYLE") ("MAX_VALUE") ("MIN_VALUE") ("NAME") ("PALETTE") ("PARENT") ("SHADE_RANGE") ("SHADING") ("SHOW_SKIRT") ("SKIRT") ("STYLE") ("TEXTURE_COORD") ("TEXTURE_INTERP") ("TEXTURE_MAP") ("THICK") ("USE_TRIANGLES") ("UVALUE") ("VERT_COLORS") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZERO_OPACITY_SKIP") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrSurface"      (system) "Obj -> [%s::]%s" (("BOTTOM") ("COLOR") ("DATAX") ("DATAY") ("DATAZ") ("DOUBLE") ("EXTENDED_LEGO") ("HIDDEN_LINES") ("HIDE") ("LINESTYLE") ("MAX_VALUE") ("MIN_VALUE") ("NAME") ("PALETTE") ("RESET_DATA") ("SHADE_RANGE") ("SHADING") ("SHARE_DATA") ("SHOW_SKIRT") ("SKIRT") ("STYLE") ("TEXTURE_COORD") ("TEXTURE_INTERP") ("TEXTURE_MAP") ("THICK") ("USE_TRIANGLES") ("UVALUE") ("VERT_COLORS") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV") ("ZERO_OPACITY_SKIP")))
-    ("GetCTM"                 fun "IDLgrSurface"      (system) "Result = Obj -> [%s::]%s()" (("DESTINATION") ("PATH") ("TOP")))
-    ("Init"                   fun "IDLgrSurface"      (system) "Result = Obj -> [%s::]%s( [Z [, X, Y]] ) ('IDLgrSurface' [, Z [, X, Y]])" (("BOTTOM") ("COLOR") ("DATAX") ("DATAY") ("DATAZ") ("DOUBLE") ("EXTENDED_LEGO") ("HIDDEN_LINES") ("HIDE") ("LINESTYLE") ("MAX_VALUE") ("MIN_VALUE") ("NAME") ("PALETTE") ("RESET_DATA") ("SHADE_RANGE") ("SHADING") ("SHARE_DATA") ("SHOW_SKIRT") ("SKIRT") ("STYLE") ("TEXTURE_COORD") ("TEXTURE_INTERP") ("TEXTURE_MAP") ("THICK") ("USE_TRIANGLES") ("UVALUE") ("VERT_COLORS") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV") ("ZERO_OPACITY_SKIP")))
-    ("Cleanup"                pro "IDLgrSymbol"       (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrSymbol"       (system) "Obj -> [%s::]%s" (("ALL") ("COLOR") ("DATA") ("NAME") ("SIZE") ("THICK") ("UVALUE")))
-    ("SetProperty"            pro "IDLgrSymbol"       (system) "Obj -> [%s::]%s" (("COLOR") ("DATA") ("NAME") ("SIZE") ("THICK") ("UVALUE")))
-    ("Init"                   fun "IDLgrSymbol"       (system) "Result = Obj -> [%s::]%s( [Data] ) ('IDLgrSymbol' [, Data])" (("COLOR") ("DATA") ("NAME") ("SIZE") ("THICK") ("UVALUE")))
-    ("AddPolygon"             pro "IDLgrTessellator"  (system) "Obj -> [%s::]%s, X [, Y[, Z]]" (("INTERIOR") ("POLYGON")))
-    ("Cleanup"                pro "IDLgrTessellator"  (system) "Obj -> [%s::]%s" nil)
-    ("Reset"                  pro "IDLgrTessellator"  (system) "Obj -> [%s::]%s" nil)
-    ("Init"                   fun "IDLgrTessellator"  (system) "Result = Obj -> [%s::]%s( ) ('IDLgrTesselator')" nil)
-    ("Tessellate"             fun "IDLgrTessellator"  (system) "Result = Obj -> [%s::]%s( Vertices, Poly)" (("QUIET")))
-    ("Cleanup"                pro "IDLgrText"         (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrText"         (system) "Obj -> [%s::]%s" (("ALIGNMENT") ("ALL") ("BASELINE") ("CHAR_DIMENSIONS") ("COLOR") ("ENABLE_FORMATTING") ("FONT") ("HIDE") ("LOCATIONS") ("NAME") ("ONGLASS") ("PALETTE") ("PARENT") ("RECOMPUTE_DIMENSIONS") ("STRINGS") ("UPDIR") ("UVALUE") ("VERTICAL_ALIGNMENT") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZCOORD_CONV") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrText"         (system) "Obj -> [%s::]%s" (("ALIGNMENT") ("BASELINE") ("CHAR_DIMENSIONS") ("COLOR") ("ENABLE_FORMATTING") ("FONT") ("HIDE") ("LOCATIONS") ("NAME") ("ONGLASS") ("PALETTE") ("RECOMPUTE_DIMENSIONS") ("STRINGS") ("UPDIR") ("UVALUE") ("VERTICAL_ALIGNMENT") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("GetCTM"                 fun "IDLgrText"         (system) "Result = Obj -> [%s::]%s()" (("DESTINATION") ("PATH") ("TOP")))
-    ("Init"                   fun "IDLgrText"         (system) "Result = Obj -> [%s::]%s( [String or vector of strings] ) ('IDLgrText' [, String or vector of strings])" (("ALIGNMENT") ("BASELINE") ("CHAR_DIMENSIONS") ("COLOR") ("ENABLE_FORMATTING") ("FONT") ("HIDE") ("LOCATIONS") ("NAME") ("ONGLASS") ("PALETTE") ("RECOMPUTE_DIMENSIONS") ("STRINGS") ("UPDIR") ("UVALUE") ("VERTICAL_ALIGNMENT") ("XCOORD_CONV") ("YCOORD_CONV") ("ZCOORD_CONV")))
-    ("Add"                    pro "IDLgrView"         (system) "Obj -> [%s::]%s, Model" (("POSITION")))
-    ("Cleanup"                pro "IDLgrView"         (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrView"         (system) "Obj -> [%s::]%s" (("ALL") ("COLOR") ("DEPTH_CUE") ("DIMENSIONS") ("EYE") ("LOCATION") ("PARENT") ("PROJECTION") ("TRANSPARENT") ("UNITS") ("UVALUE") ("VIEWPLANE_RECT") ("ZCLIP")))
-    ("SetProperty"            pro "IDLgrView"         (system) "Obj -> [%s::]%s" (("COLOR") ("DEPTH_CUE") ("DIMENSIONS") ("EYE") ("LOCATION") ("PROJECTION") ("TRANSPARENT") ("UNITS") ("UVALUE") ("VIEWPLANE_RECT") ("ZCLIP")))
-    ("GetByName"              fun "IDLgrView"         (system) "Result = Obj -> [%s::]%s(Name)" nil)
-    ("Init"                   fun "IDLgrView"         (system) "Result = Obj -> [%s::]%s( ) ('IDLgrView')" (("COLOR") ("DEPTH_CUE") ("DIMENSIONS") ("DOUBLE") ("EYE") ("LOCATION") ("PROJECTION") ("TRANSPARENT") ("UNITS") ("UVALUE") ("VIEWPLANE_RECT") ("ZCLIP")))
-    ("Add"                    pro "IDLgrViewgroup"    (system) "Obj -> [%s::]%s, Object" (("POSITION")))
-    ("Cleanup"                pro "IDLgrViewgroup"    (system) "Obj -> [%s::]%s" nil)
-    ("GetProperty"            pro "IDLgrViewgroup"    (system) "Obj -> [%s::]%s" (("ALL") ("HIDE") ("NAME") ("PARENT") ("UVALUE")))
-    ("SetProperty"            pro "IDLgrViewgroup"    (system) "Obj -> [%s::]%s" (("HIDE") ("NAME") ("UVALUE")))
-    ("GetByName"              fun "IDLgrViewgroup"    (system) "Result = Obj -> [%s::]%s(Name)" nil)
-    ("Init"                   fun "IDLgrViewgroup"    (system) "Result = Obj -> [%s::]%s( ) ('IDLgrViewgroup')" (("HIDE") ("NAME") ("UVALUE")))
-    ("Cleanup"                pro "IDLgrVolume"       (system) "Obj -> [%s::]%s" nil)
-    ("ComputeBounds"          pro "IDLgrVolume"       (system) "Obj -> [%s::]%s" (("OPACITY") ("RESET") ("VOLUMES")))
-    ("GetProperty"            pro "IDLgrVolume"       (system) "Obj -> [%s::]%s" (("ALL") ("AMBIENT") ("BOUNDS") ("COMPOSITE_FUNCTION") ("CUTTING_PLANES") ("DATA0") ("DATA1") ("DATA2") ("DATA3") ("DEPTH_CUE") ("HIDE") ("HINTS") ("INTERPOLATE") ("LIGHTING_MODEL") ("NAME") ("NO_COPY") ("OPACITY_TABLE0") ("OPACITY_TABLE1") ("PARENT") ("RENDER_STEP") ("RGB_TABLE0") ("RGB_TABLE1") ("TWO_SIDED") ("UVALUE") ("VALID_DATA") ("VOLUME_SELECT") ("XCOORD_CONV") ("XRANGE") ("YCOORD_CONV") ("YRANGE") ("ZBUFFER") ("ZCOORD_CONV") ("ZERO_OPACITY_SKIP") ("ZRANGE")))
-    ("SetProperty"            pro "IDLgrVolume"       (system) "Obj -> [%s::]%s" (("AMBIENT") ("BOUNDS") ("COMPOSITE_FUNCTION") ("CUTTING_PLANES") ("DATA0") ("DATA1") ("DATA2") ("DATA3") ("DEPTH_CUE") ("HIDE") ("HINTS") ("INTERPOLATE") ("LIGHTING_MODEL") ("NAME") ("NO_COPY") ("OPACITY_TABLE0") ("OPACITY_TABLE1") ("RENDER_STEP") ("RGB_TABLE0") ("RGB_TABLE1") ("TWO_SIDED") ("UVALUE") ("VOLUME_SELECT") ("XCOORD_CONV") ("YCOORD_CONV") ("ZBUFFER") ("ZCOORD_CONV") ("ZERO_OPACITY_SKIP")))
-    ("GetCTM"                 fun "IDLgrVolume"       (system) "Result = Obj -> [%s::]%s()" (("DESTINATION") ("PATH") ("TOP")))
-    ("Init"                   fun "IDLgrVolume"       (system) "Result = Obj -> [%s::]%s( [vol0 [, vol1 [, vol2 [, vol3]]]] ) ('IDLgrVolume' [, vol0 [, vol1 [, vol2 [, vol3]]]])" (("AMBIENT") ("BOUNDS") ("COMPOSITE_FUNCTION") ("CUTTING_PLANES") ("DATA0") ("DATA1") ("DATA2") ("DATA3") ("DEPTH_CUE") ("HIDE") ("HINTS") ("INTERPOLATE") ("LIGHTING_MODEL") ("NAME") ("NO_COPY") ("OPACITY_TABLE0") ("OPACITY_TABLE1") ("RENDER_STEP") ("RGB_TABLE0") ("RGB_TABLE1") ("TWO_SIDED") ("UVALUE") ("VOLUME_SELECT") ("XCOORD_CONV") ("YCOORD_CONV") ("ZBUFFER") ("ZCOORD_CONV") ("ZERO_OPACITY_SKIP")))
-    ("PickVoxel"              fun "IDLgrVolume"       (system) "Result = Obj -> [%s::]%s ( Win, View, Point)" (("PATH")))
-    ("Cleanup"                pro "IDLgrVRML"         (system) "Obj -> [%s::]%s" nil)
-    ("Draw"                   pro "IDLgrVRML"         (system) "Obj -> [%s::]%s [, Picture]" nil)
-    ("GetDeviceInfo"          pro "IDLgrVRML"         (system) "Obj->[%s::]%s" (("ALL") ("MAX_TEXTURE_DIMENSIONS") ("MAX_VIEWPORT_DIMENSIONS") ("NAME") ("NUM_CPUS") ("VENDOR") ("VERSION")))
-    ("GetProperty"            pro "IDLgrVRML"         (system) "Obj -> [%s::]%s" (("ALL") ("COLOR_MODEL") ("DIMENSIONS") ("FILENAME") ("GRAPHICS_TREE") ("N_COLORS") ("PALETTE") ("QUALITY") ("RESOLUTION") ("SCREEN_DIMENSIONS") ("UNITS") ("UVALUE")))
-    ("SetProperty"            pro "IDLgrVRML"         (system) "Obj -> [%s::]%s" (("DIMENSIONS") ("FILENAME") ("GRAPHICS_TREE") ("PALETTE") ("QUALITY") ("RESOLUTION") ("UNITS") ("UVALUE")))
-    ("GetFontnames"           fun "IDLgrVRML"         (system) "Return = Obj ->[%s::]%s( FamilyName)" (("IDL_FONTS") ("STYLES")))
-    ("GetTextDimensions"      fun "IDLgrVRML"         (system) "Result = Obj ->[%s::]%s( TextObj)" (("DESCENT") ("PATH")))
-    ("Init"                   fun "IDLgrVRML"         (system) "Result = Obj -> [%s::]%s( ) ('IDLgrVRML')" (("COLOR_MODEL") ("DIMENSIONS") ("FILENAME") ("GRAPHICS_TREE") ("N_COLORS") ("PALETTE") ("QUALITY") ("RESOLUTION") ("UNITS") ("UVALUE") ("WORLDINFO") ("WORLDTITLE")))
-    ("Cleanup"                pro "IDLgrWindow"       (system) "Obj -> [%s::]%s" nil)
-    ("Draw"                   pro "IDLgrWindow"       (system) "Obj -> [%s::]%s [, Picture]" (("CREATE_INSTANCE") ("DRAW_INSTANCE")))
-    ("Erase"                  pro "IDLgrWindow"       (system) "Obj -> [%s::]%s" (("COLOR")))
-    ("GetDeviceInfo"          pro "IDLgrWindow"       (system) "Obj->[%s::]%s" (("ALL") ("MAX_TEXTURE_DIMENSIONS") ("MAX_VIEWPORT_DIMENSIONS") ("NAME") ("NUM_CPUS") ("VENDOR") ("VERSION")))
-    ("GetProperty"            pro "IDLgrWindow"       (system) "Obj -> [%s::]%s" (("ALL") ("COLOR_MODEL") ("DIMENSIONS") ("DISPLAY_NAME") ("GRAPHICS_TREE") ("IMAGE_DATA") ("LOCATION") ("N_COLORS") ("PALETTE") ("QUALITY") ("RENDERER") ("RESOLUTION") ("RETAIN") ("SCREEN_DIMENSIONS") ("TITLE") ("UNITS") ("UVALUE") ("ZBUFFER_DATA")))
-    ("Iconify"                pro "IDLgrWindow"       (system) "Obj -> [%s::]%s, IconFlag" nil)
-    ("SetCurrentCursor"       pro "IDLgrWindow"       (system) "Obj-> [%s::]%s [, CursorName]" (("HOTSPOT") ("IMAGE") ("MASK") ("STANDARD")))
-    ("SetProperty"            pro "IDLgrWindow"       (system) "Obj -> [%s::]%s" (("DIMENSIONS") ("GRAPHICS_TREE") ("LOCATION") ("PALETTE") ("QUALITY") ("TITLE") ("UNITS") ("UVALUE")))
-    ("Show"                   pro "IDLgrWindow"       (system) "Obj -> [%s::]%s, Position" nil)
-    ("GetContiguousPixels"    fun "IDLgrWindow"       (system) "Return = Obj -> [%s::]%s()" nil)
-    ("GetFontnames"           fun "IDLgrWindow"       (system) "Return = Obj -> [%s::]%s(FamilyName)" (("IDL_FONTS") ("STYLES")))
-    ("GetTextDimensions"      fun "IDLgrWindow"       (system) "Result = Obj ->[%s::]%s( TextObj)" (("DESCENT") ("PATH")))
-    ("Init"                   fun "IDLgrWindow"       (system) "Result = Obj -> [%s::]%s( )" (("COLOR_MODEL") ("DIMENSIONS") ("DISPLAY_NAME") ("GRAPHICS_TREE") ("LOCATION") ("N_COLORS") ("PALETTE") ("QUALITY") ("RENDERER") ("RETAIN") ("TITLE") ("UNITS") ("UVALUE")))
-    ("PickData"               fun "IDLgrWindow"       (system) "Result = Obj -> [%s::]%s( View, Object, Location, XYZLocation)" (("PATH")))
-    ("Read"                   fun "IDLgrWindow"       (system) "Result = Obj -> [%s::]%s()" nil)
-    ("Select"                 fun "IDLgrWindow"       (system) "Result = Obj -> [%s::]%s( Picture, XY)" (("DIMENSIONS") ("UNITS")))
-    ("Reset"                  pro "TrackBall"         (system) "Obj -> [%s::]%s, Center, Radius" (("AXIS") ("CONSTRAIN") ("MOUSE")))
-    ("Init"                   fun "TrackBall"         (system) "Result = Obj -> [%s::]%s( Center, Radius ) ('TrackBall', Center, Radius)" (("AXIS") ("CONSTRAIN") ("MOUSE")))
-    ("Update"                 fun "TrackBall"         (system) "Result = Obj -> [%s::]%s( sEvent)" (("MOUSE") ("TRANSFORM") ("TRANSLATE")))
+    ("ANNOTATE" pro nil (system) "%s" ("A9.html" ("COLOR_INDICES" . 756628) ("DRAWABLE" . 756633) ("LOAD_FILE" . 756636) ("TEK_COLORS" . 756639) ("WINDOW" . 756642)))
+    ("ARROW" pro nil (system) "%s, X0, Y0, X1, Y1" ("A15.html" ("COLOR" . 756673) ("DATA" . 756664) ("HSIZE" . 756670) ("HTHICK" . 756676) ("NORMALIZED" . 756667) ("SOLID" . 756679) ("THICK" . 756682)))
+    ("AXIS" pro nil (system) "%s [, X [, Y [, Z]]]" ("A20.html" ("SAVE" . 986499) ("XAXIS" . 983775) ("XLOG" . 983760) ("YAXIS" . 983765) ("YLOG" . 983752) ("YNOZERO" . 158293) ("ZAXIS" . 983724)) ("graphkeyw2.html" ("CHARSIZE" . 266973) ("CHARTHICK" . 331668) ("COLOR" . 315952) ("DATA" . 315961) ("DEVICE" . 315977) ("FONT" . 331795) ("NODATA" . 316018) ("NOERASE" . 316024) ("NORMAL" . 315963) ("SUBTITLE" . 316057) ("T3D" . 315956) ("TICKLEN" . 332207) ("XCHARSIZE" . 331699) ("XGRIDSTYLE" . 332009) ("XMARGIN" . 332038) ("XMINOR" . 332061) ("XRANGE" . 332090) ("XSTYLE" . 332116) ("XTHICK" . 332298) ("XTICK_GET" . 332321) ("XTICKFORMAT" . 332347) ("XTICKINTERVAL" . 332463) ("XTICKLAYOUT" . 332488) ("XTICKLEN" . 332513) ("XTICKNAME" . 332536) ("XTICKS" . 332559) ("XTICKUNITS" . 332586) ("XTICKV" . 332628) ("XTITLE" . 316100) ("YCHARSIZE" . 331699) ("YGRIDSTYLE" . 332009) ("YMARGIN" . 332038) ("YMINOR" . 332061) ("YRANGE" . 332090) ("YSTYLE" . 332116) ("YTHICK" . 332298) ("YTICK_GET" . 332321) ("YTICKFORMAT" . 332347) ("YTICKINTERVAL" . 332463) ("YTICKLAYOUT" . 332488) ("YTICKLEN" . 332513) ("YTICKNAME" . 332536) ("YTICKS" . 332559) ("YTICKUNITS" . 332586) ("YTICKV" . 332628) ("YTITLE" . 316100) ("ZCHARSIZE" . 331699) ("ZGRIDSTYLE" . 332009) ("ZMARGIN" . 332038) ("ZMINOR" . 332061) ("ZRANGE" . 332090) ("ZSTYLE" . 332116) ("ZTHICK" . 332298) ("ZTICK_GET" . 332321) ("ZTICKFORMAT" . 332347) ("ZTICKINTERVAL" . 332463) ("ZTICKLAYOUT" . 332488) ("ZTICKLEN" . 332513) ("ZTICKNAME" . 332536) ("ZTICKS" . 332559) ("ZTICKUNITS" . 332586) ("ZTICKV" . 332628) ("ZTITLE" . 316100) ("ZVALUE" . 316102)))
+    ("BAR_PLOT" pro nil (system) "%s, Values" ("B.html" ("BACKGROUND" . 756719) ("BARNAMES" . 756722) ("BAROFFSET" . 756725) ("BARSPACE" . 756728) ("BARWIDTH" . 756731) ("BASELINES" . 756734) ("BASERANGE" . 756737) ("COLORS" . 756740) ("OUTLINE" . 756743) ("OVERPLOT" . 756746) ("ROTATE" . 756749) ("TITLE" . 756752) ("XTITLE" . 756755) ("YTITLE" . 756758)))
+    ("BLAS_AXPY" pro nil (system) "%s, Y, A, X [, D1, Loc1 [, D2, Range]]" ("B13.html"))
+    ("BOX_CURSOR" pro nil (system) "%s, [ X0, Y0, NX, NY]" ("B15.html" ("FIXED_SIZE" . 756816) ("INIT" . 756813) ("MESSAGE" . 756819)))
+    ("BREAK" pro nil (system) "%s" ("B16.html"))
+    ("BREAKPOINT" pro nil (system) "%s [, File], Index" ("B17.html" ("AFTER" . 113854) ("CLEAR" . 675862) ("CONDITION" . 113859) ("DISABLE" . 907385) ("ENABLE" . 984755) ("ON_RECOMPILE" . 984772) ("ONCE" . 990987) ("SET" . 675866)))
+    ("BYTEORDER" pro nil (system) "%s, Variable1, ..., Variablen" ("B21.html" ("DTOVAX" . 906658) ("DTOXDR" . 906876) ("FTOVAX" . 675911) ("FTOXDR" . 906884) ("HTONL" . 906665) ("HTONS" . 675913) ("L64SWAP" . 965960) ("LSWAP" . 675915) ("NTOHL" . 675917) ("NTOHS" . 675919) ("SSWAP" . 675921) ("SWAP_IF_BIG_ENDIAN" . 906711) ("SWAP_IF_LITTLE_ENDIAN" . 906720) ("VAXTOD" . 675923) ("VAXTOF" . 906693) ("XDRTOD" . 906679) ("XDRTOF" . 675925)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("CALDAT" pro nil (system) "%s, Julian, Month [, Day [, Year [, Hour [, Minute [, Second]]]]]" ("C2.html"))
+    ("CALENDAR" pro nil (system) "%s [[, Month] , Year]" ("C3.html"))
+    ("CALL_METHOD" pro nil (system) "%s, Name, ObjRef, [, P1, ..., Pn]" ("C6.html"))
+    ("CALL_PROCEDURE" pro nil (system) "%s, Name [, P1, ..., Pn]" ("C7.html"))
+    ("CATCH" pro nil (system) "%s, [Variable]" ("C9.html" ("CANCEL" . 716974)))
+    ("CD" pro nil (system) "%s [, Directory]" ("C10.html" ("CURRENT" . 676059)))
+    ("CDF_ATTDELETE" pro nil (system) "%s, Id, Attribute [, EntryNum]" ("CDF-routines9.html" ("ZVARIABLE" . 1002456)))
+    ("CDF_ATTGET" pro nil (system) "%s, Id, Attribute, EntryNum, Value" ("CDF-routines11.html" ("CDF_TYPE" . 1003937) ("ZVARIABLE" . 997078)))
+    ("CDF_ATTINQ" pro nil (system) "%s, Id, Attribute, Name, Scope, MaxEntry [, MaxZEntry]" ("CDF-routines12.html"))
+    ("CDF_ATTPUT" pro nil (system) "%s, Id, Attribute, EntryNum, Value" ("CDF-routines14.html" ("ZVARIABLE" . 997143)))
+    ("CDF_ATTRENAME" pro nil (system) "%s, Id, OldAttr, NewName" ("CDF-routines15.html"))
+    ("CDF_CLOSE" pro nil (system) "%s, Id" ("CDF-routines16.html"))
+    ("CDF_COMPRESSION" pro nil (system) "%s, Id" ("CDF-routines17.html" ("GET_COMPRESSION" . 1019949) ("GET_GZIP_LEVEL" . 1019952) ("GET_VAR_COMPRESSION" . 1019955) ("GET_VAR_GZIP_LEVEL" . 1019957) ("SET_COMPRESSION" . 1019965) ("SET_GZIP_LEVEL" . 1020981) ("SET_VAR_COMPRESSION" . 1019968) ("SET_VAR_GZIP_LEVEL" . 1026491) ("VARIABLE" . 1026493) ("ZVARIABLE" . 1019982)))
+    ("CDF_CONTROL" pro nil (system) "%s, Id" ("CDF-routines18.html" ("ATTRIBUTE" . 997198) ("GET_ATTR_INFO" . 997201) ("GET_CACHESIZE" . 997209) ("GET_COPYRIGHT" . 997212) ("GET_FILENAME" . 997215) ("GET_FORMAT" . 997218) ("GET_NEGTOPOSFP0_MODE" . 997226) ("GET_NUMATTRS" . 997229) ("GET_READONLY_MODE" . 1047427) ("GET_RVAR_CACHESIZE" . 997236) ("GET_VAR_INFO" . 997242) ("GET_ZMODE" . 997259) ("GET_ZVAR_CACHESIZE" . 997266) ("SET_CACHESIZE" . 997269) ("SET_EXTENDRECS" . 997272) ("SET_INITIALRECS" . 997275) ("SET_NEGTOPOSFP0_MODE" . 997278) ("SET_PADVALUE" . 997281) ("SET_READONLY_MODE" . 997284) ("SET_RVAR_CACHESIZE" . 997287) ("SET_RVARS_CACHESIZE" . 997290) ("SET_ZMODE" . 997293) ("SET_ZVAR_CACHESIZE" . 997296) ("SET_ZVARS_CACHESIZE" . 997298) ("VARIABLE" . 997301) ("ZVARIABLE" . 997307)))
+    ("CDF_DELETE" pro nil (system) "%s, Id" ("CDF-routines20.html"))
+    ("CDF_DOC" pro nil (system) "%s, Id, Version, Release, Copyright" ("CDF-routines21.html" ("INCREMENT" . 997427)))
+    ("CDF_EPOCH" pro nil (system) "%s, Epoch, Year [, Month, Day, Hour, Minute, Second, Milli]" ("CDF-routines23.html" ("BREAKDOWN_EPOCH" . 997509) ("COMPUTE_EPOCH" . 997512)))
+    ("CDF_LIB_INFO" pro nil (system) "%s" ("CDF-routines27.html" ("COPYRIGHT" . 997623) ("INCREMENT" . 997626) ("RELEASE" . 997629) ("SUBINCREMENT" . 997632) ("VERSION" . 997635)))
+    ("CDF_VARDELETE" pro nil (system) "%s, Id, Variable" ("CDF-routines31.html" ("ZVARIABLE" . 997776)))
+    ("CDF_VARGET" pro nil (system) "%s, Id, Variable, Value" ("CDF-routines32.html" ("COUNT" . 997847) ("INTERVAL" . 997850) ("OFFSET" . 997853) ("REC_COUNT" . 997856) ("REC_INTERVAL" . 997859) ("REC_START" . 997862) ("STRING" . 997865) ("ZVARIABLE" . 997868)))
+    ("CDF_VARGET1" pro nil (system) "%s, Id, Variable, Value" ("CDF-routines33.html" ("OFFSET" . 997909) ("REC_START" . 997912) ("STRING" . 997915) ("ZVARIABLE" . 997918)))
+    ("CDF_VARPUT" pro nil (system) "%s, Id, Variable, Value" ("CDF-routines36.html" ("COUNT" . 998005) ("INTERVAL" . 998008) ("OFFSET" . 998011) ("REC_INTERVAL" . 998014) ("REC_START" . 998017) ("ZVARIABLE" . 998020)))
+    ("CDF_VARRENAME" pro nil (system) "%s, Id, OldVariable, NewName" ("CDF-routines37.html" ("ZVARIABLE" . 998048)))
+    ("CHOLDC" pro nil (system) "%s, A, P" ("C17.html" ("DOUBLE" . 1108599)))
+    ("CIR_3PNT" pro nil (system) "%s, X, Y, R, X0, Y0" ("C20.html"))
+    ("CLOSE" pro nil (system) "%s[, Unit1, ..., Unitn]" ("C21.html" ("ALL" . 676122) ("EXIT_STATUS" . 1017312) ("FILE" . 1017618) ("FORCE" . 1017321)))
+    ("COLOR_CONVERT" pro nil (system) "%s, I0, I1, I2, O0, O1, O2" ("C25.html" ("HLS_RGB" . 861671) ("HSV_RGB" . 861673) ("RGB_HLS" . 861669) ("RGB_HSV" . 676146)))
+    ("CONSTRAINED_MIN" pro nil (system) "%s, X, Xbnd, Gbnd, Nobj, Gcomp, Inform" ("C38.html" ("EPSTOP" . 908210) ("LIMSER" . 927415) ("MAXIMIZE" . 927406) ("NSTOP" . 975889) ("REPORT" . 942066) ("TITLE" . 927408)))
+    ("CONTOUR" pro nil (system) "%s, Z [, X, Y]" ("C40.html" ("C_ANNOTATION" . 1023103) ("C_CHARSIZE" . 676279) ("C_CHARTHICK" . 905138) ("C_COLORS" . 676281) ("C_LABELS" . 676286) ("C_LINESTYLE" . 676292) ("C_ORIENTATION" . 676298) ("C_SPACING" . 676300) ("C_THICK" . 676302) ("CELL_FILL" . 892176) ("CLOSED" . 676304) ("DOWNHILL" . 676306) ("FILL" . 676308) ("FOLLOW" . 676311) ("IRREGULAR" . 879096) ("ISOTROPIC" . 676316) ("LEVELS" . 927695) ("MAX_VALUE" . 676323) ("MIN_VALUE" . 47033) ("NLEVELS" . 676325) ("OVERPLOT" . 861732) ("PATH_DATA_COORDS" . 879089) ("PATH_DOUBLE" . 1015046) ("PATH_FILENAME" . 676329) ("PATH_INFO" . 746342) ("PATH_XY" . 746343) ("TRIANGULATION" . 746344) ("XLOG" . 158329) ("YLOG" . 158344) ("ZAXIS" . 676344)))
+    ("COPY_LUN" pro nil (system) "%s, FromUnit, ToUnit [, Num]" ("C44.html" ("EOF" . 1090923) ("LINES" . 1090926) ("TRANSFER_COUNT" . 1090928)))
+    ("CPU" pro nil (system) "%s" ("C48.html" ("RESET" . 1178606) ("RESTORE" . 1178609) ("TPOOL_MAX_ELTS" . 1032362) ("TPOOL_MIN_ELTS" . 1032364) ("TPOOL_NTHREADS" . 1032366) ("VECTOR_ENABLE" . 1032368)))
+    ("CREATE_VIEW" pro nil (system) "%s" ("C52.html" ("AX" . 756876) ("AY" . 756879) ("AZ" . 756882) ("PERSP" . 756885) ("RADIANS" . 756888) ("WINX" . 756891) ("WINY" . 756894) ("XMAX" . 756897) ("XMIN" . 756900) ("YMAX" . 756903) ("YMIN" . 756906) ("ZFAC" . 756909) ("ZMAX" . 756912) ("ZMIN" . 756915) ("ZOOM" . 756918)))
+    ("CURSOR" pro nil (system) "%s, X, Y [, Wait]" ("C57.html" ("CHANGE" . 676458) ("DATA" . 676460) ("DEVICE" . 676464) ("DOWN" . 676462) ("NORMAL" . 676466) ("NOWAIT" . 676468) ("UP" . 676470) ("WAIT" . 676472)))
+    ("CW_ANIMATE_GETP" pro nil (system) "%s, Widget, Pixmaps" ("C62.html" ("KILL_ANYWAY" . 853956)))
+    ("CW_ANIMATE_LOAD" pro nil (system) "%s, Widget" ("C63.html" ("CYCLE" . 853989) ("FRAME" . 853992) ("IMAGE" . 853995) ("ORDER" . 853998) ("WINDOW" . 854001) ("XOFFSET" . 854006) ("YOFFSET" . 854009)))
+    ("CW_ANIMATE_RUN" pro nil (system) "%s, Widget [, Rate]" ("C64.html" ("NFRAMES" . 854045) ("STOP" . 854048)))
+    ("CW_LIGHT_EDITOR_GET" pro nil (system) "%s, WidgetID" ("C75.html" ("DIRECTION_DISABLED" . 1001479) ("DRAG_EVENTS" . 1001481) ("HIDE_DISABLED" . 1001485) ("LIGHT" . 1001487) ("LOCATION_DISABLED" . 1001489) ("TYPE_DISABLED" . 1001491) ("XRANGE" . 1001493) ("XSIZE" . 1001495) ("YRANGE" . 1001497) ("YSIZE" . 1001499) ("ZRANGE" . 1001501)))
+    ("CW_LIGHT_EDITOR_SET" pro nil (system) "%s, WidgetID" ("C76.html" ("DIRECTION_DISABLED" . 1001515) ("DRAG_EVENTS" . 1001517) ("HIDE_DISABLED" . 1001521) ("LIGHT" . 1001523) ("LOCATION_DISABLED" . 1001525) ("TYPE_DISABLED" . 1001527) ("XRANGE" . 1001529) ("XSIZE" . 1001531) ("YRANGE" . 1001533) ("YSIZE" . 1001535) ("ZRANGE" . 1001537)))
+    ("CW_PALETTE_EDITOR_GET" pro nil (system) "%s, WidgetID" ("C79.html" ("ALPHA" . 1001551) ("HISTOGRAM" . 1001677)))
+    ("CW_PALETTE_EDITOR_SET" pro nil (system) "%s, WidgetID" ("C80.html" ("ALPHA" . 1001567) ("HISTOGRAM" . 1001569)))
+    ("DEFINE_KEY" pro nil (system) "%s, Key [, Value]" ("D5.html" ("BACK_CHARACTER" . 1001954) ("BACK_WORD" . 1001956) ("CONTROL" . 1001958) ("DELETE_CHARACTER" . 1001962) ("DELETE_CURRENT" . 1001964) ("DELETE_EOL" . 1001966) ("DELETE_LINE" . 1001968) ("DELETE_WORD" . 1001970) ("END_OF_FILE" . 1001974) ("END_OF_LINE" . 1001972) ("ENTER_LINE" . 1001976) ("ESCAPE" . 1001978) ("FORWARD_CHARACTER" . 1001984) ("FORWARD_WORD" . 1001986) ("INSERT_OVERSTRIKE_TOGGLE" . 1001988) ("MATCH_PREVIOUS" . 676503) ("NEXT_LINE" . 1002066) ("NOECHO" . 676505) ("PREVIOUS_LINE" . 1002076) ("RECALL" . 1002078) ("REDRAW" . 1002103) ("START_OF_LINE" . 1002105) ("TERMINATE" . 676507)))
+    ("DEFINE_MSGBLK" pro nil (system) "%s, BlockName, ErrorNames, ErrorFormats" ("D6.html" ("IGNORE_DUPLICATE" . 991846) ("PREFIX" . 991848)))
+    ("DEFINE_MSGBLK_FROM_FILE" pro nil (system) "%s, Filename" ("D7.html" ("BLOCK" . 991885) ("IGNORE_DUPLICATE" . 991890) ("PREFIX" . 991892) ("VERBOSE" . 991894)))
+    ("DEFSYSV" pro nil (system) "%s, Name, Value [, Read_Only]" ("D9.html" ("EXISTS" . 676585)))
+    ("DELVAR" pro nil (system) "%s, V1, ..., Vn" ("D10.html"))
+    ("DENDRO_PLOT" pro nil (system) "%s, Clusters, Linkdistance" ("D11.html" ("LABEL_CHARSIZE" . 1033249) ("LABEL_CHARTHICK" . 1032525) ("LABEL_COLOR" . 1032528) ("LABEL_NAMES" . 1032531) ("LABEL_ORIENTATION" . 1032535) ("LINECOLOR" . 1032538) ("ORIENTATION" . 1032541) ("OVERPLOT" . 1032569)) ("graphkeyw2.html" ("BACKGROUND" . 328424) ("CHARSIZE" . 266973) ("CHARTHICK" . 331668) ("CLIP" . 315949) ("COLOR" . 315952) ("DATA" . 315961) ("DEVICE" . 315977) ("FONT" . 331795) ("LINESTYLE" . 331728) ("NOCLIP" . 323508) ("NODATA" . 316018) ("NOERASE" . 316024) ("NORMAL" . 315963) ("POSITION" . 316026) ("PSYM" . 316038) ("SUBTITLE" . 316057) ("SYMSIZE" . 316061) ("T3D" . 315956) ("THICK" . 316006) ("TICKLEN" . 332207) ("TITLE" . 332238) ("XCHARSIZE" . 331699) ("XGRIDSTYLE" . 332009) ("XMARGIN" . 332038) ("XMINOR" . 332061) ("XRANGE" . 332090) ("XSTYLE" . 332116) ("XTHICK" . 332298) ("XTICK_GET" . 332321) ("XTICKFORMAT" . 332347) ("XTICKINTERVAL" . 332463) ("XTICKLAYOUT" . 332488) ("XTICKLEN" . 332513) ("XTICKNAME" . 332536) ("XTICKS" . 332559) ("XTICKUNITS" . 332586) ("XTICKV" . 332628) ("XTITLE" . 316100) ("YCHARSIZE" . 331699) ("YGRIDSTYLE" . 332009) ("YMARGIN" . 332038) ("YMINOR" . 332061) ("YRANGE" . 332090) ("YSTYLE" . 332116) ("YTHICK" . 332298) ("YTICK_GET" . 332321) ("YTICKFORMAT" . 332347) ("YTICKINTERVAL" . 332463) ("YTICKLAYOUT" . 332488) ("YTICKLEN" . 332513) ("YTICKNAME" . 332536) ("YTICKS" . 332559) ("YTICKUNITS" . 332586) ("YTICKV" . 332628) ("YTITLE" . 316100) ("ZCHARSIZE" . 331699) ("ZGRIDSTYLE" . 332009) ("ZMARGIN" . 332038) ("ZMINOR" . 332061) ("ZRANGE" . 332090) ("ZSTYLE" . 332116) ("ZTHICK" . 332298) ("ZTICK_GET" . 332321) ("ZTICKFORMAT" . 332347) ("ZTICKINTERVAL" . 332463) ("ZTICKLAYOUT" . 332488) ("ZTICKLEN" . 332513) ("ZTICKNAME" . 332536) ("ZTICKS" . 332559) ("ZTICKUNITS" . 332586) ("ZTICKV" . 332628) ("ZTITLE" . 316100) ("ZVALUE" . 316102)))
+    ("DENDROGRAM" pro nil (system) "%s, Clusters, Linkdistance, Outverts, Outconn" ("D12.html" ("LEAFNODES" . 1032898)))
+    ("DEVICE" pro nil (system) "%s" ("D16.html" ) ("devices4.html" ("AVANTGARDE" . 482989) ("AVERAGE_LINES" . 144491) ("BINARY" . 144309) ("BITS_PER_PIXEL" . 144308) ("BKMAN" . 143940) ("BOLD" . 144497) ("BOOK" . 144499) ("BYPASS_TRANSLATION" . 144256) ("CLOSE" . 144712) ("CLOSE_DOCUMENT" . 451438) ("CLOSE_FILE" . 144158) ("CMYK" . 732196) ("COLOR" . 144479) ("COLORS" . 144313) ("COPY" . 143954) ("COURIER" . 144503) ("CURSOR_CROSSHAIR" . 144502) ("CURSOR_IMAGE" . 143934) ("CURSOR_MASK" . 144824) ("CURSOR_ORIGINAL" . 144828) ("CURSOR_STANDARD" . 144830) ("CURSOR_XY" . 143722) ("DECOMPOSED" . 144834) ("DEMI" . 143930) ("DIRECT_COLOR" . 145006) ("EJECT" . 143752) ("ENCAPSULATED" . 143751) ("ENCODING" . 144315) ("FILENAME" . 143748) ("FLOYD" . 144833) ("FONT_INDEX" . 143943) ("FONT_SIZE" . 144522) ("GET_CURRENT_FONT" . 144518) ("GET_DECOMPOSED" . 554681) ("GET_FONTNAMES" . 554610) ("GET_FONTNUM" . 144326) ("GET_GRAPHICS_FUNCTION" . 145007) ("GET_PAGE_SIZE" . 587045) ("GET_SCREEN_SIZE" . 149759) ("GET_VISUAL_DEPTH" . 452299) ("GET_VISUAL_NAME" . 551382) ("GET_WINDOW_POSITION" . 143947) ("GET_WRITE_MASK" . 143949) ("GIN_CHARS" . 143951) ("GLYPH_CACHE" . 499334) ("HELVETICA" . 144524) ("INCHES" . 144166) ("INDEX_COLOR" . 451483) ("ISOLATIN1" . 144322) ("ITALIC" . 143723) ("LANDSCAPE" . 606950) ("LANGUAGE_LEVEL" . 144167) ("LIGHT" . 618160) ("MEDIUM" . 144529) ("NARROW" . 417784) ("NCAR" . 144157) ("OBLIQUE" . 562813) ("OPTIMIZE" . 144405) ("ORDERED" . 143941) ("OUTPUT" . 144538) ("PALATINO" . 144366) ("PIXELS" . 144468) ("PLOT_TO" . 485584) ("PLOTTER_ON_OFF" . 144371) ("POLYFILL" . 144368) ("PORTRAIT" . 144170) ("PRE_DEPTH" . 144169) ("PRE_XSIZE" . 601831) ("PRE_YSIZE" . 597448) ("PREVIEW" . 601886) ("PRINT_FILE" . 556886) ("PSEUDO_COLOR" . 144688) ("RESET_STRING" . 144455) ("RESOLUTION" . 144473) ("RETAIN" . 144472) ("SCALE_FACTOR" . 144547) ("SCHOOLBOOK" . 144551) ("SET_CHARACTER_SIZE" . 486143) ("SET_COLORMAP" . 161043) ("SET_COLORS" . 486222) ("SET_FONT" . 499045) ("SET_GRAPHICS_FUNCTION" . 499029) ("SET_RESOLUTION" . 144941) ("SET_STRING" . 144466) ("SET_TRANSLATION" . 150093) ("SET_WRITE_MASK" . 143957) ("STATIC_COLOR" . 144842) ("STATIC_GRAY" . 144844) ("SYMBOL" . 144554) ("TEK4014" . 144553) ("TEK4100" . 144475) ("TEXT" . 144841) ("THRESHOLD" . 144376) ("TIMES" . 144557) ("TRANSLATION" . 144556) ("TRUE_COLOR" . 144849) ("TT_FONT" . 542703) ("TTY" . 144477) ("VT240" . 144174) ("VT241" . 144174) ("VT340" . 144532) ("VT341" . 144532) ("WINDOW_STATE" . 144546) ("XOFFSET" . 143719) ("XON_XOFF" . 144379) ("XSIZE" . 144540) ("YOFFSET" . 144175) ("YSIZE" . 144568) ("Z_BUFFERING" . 144512) ("ZAPFCHANCERY" . 144513) ("ZAPFDINGBATS" . 144515)))
+    ("DFPMIN" pro nil (system) "%s, X, Gtol, Fmin, Func, Dfunc" ("D17.html" ("DOUBLE" . 50547) ("EPS" . 50550) ("ITER" . 50553) ("ITMAX" . 50556) ("STEPMAX" . 50559) ("TOLX" . 50562)))
+    ("DISSOLVE" pro nil (system) "%s, Image" ("D28.html" ("DELAY" . 757174) ("ORDER" . 757177) ("SIZ" . 757180) ("X0" . 757184) ("Y0" . 757184)))
+    ("DLM_LOAD" pro nil (system) "%s, DLMNameStr1 [, DLMNameStr2,..., DLMNameStrn]" ("D31.html"))
+    ("DLM_REGISTER" pro nil (system) "%s, DLMDefFilePath1 [, DLMDefFilePath2, ..., DLMDefFilePathn]" ("D32.html"))
+    ("DOC_LIBRARY" pro nil (system) "%s [, Name]" ("D33.html" ("DIRECTORY" . 1003439) ("MULTI" . 1003447) ("PRINT" . 42998)))
+    ("DRAW_ROI" pro nil (system) "%s, oROI" ("D35.html" ("LINE_FILL" . 986287) ("SPACING" . 986289)) ("graphkeyw2.html" ("CLIP" . 315949) ("COLOR" . 315952) ("DATA" . 315961) ("DEVICE" . 315977) ("LINESTYLE" . 331728) ("NOCLIP" . 323508) ("NORMAL" . 315963) ("ORIENTATION" . 315964) ("PSYM" . 316038) ("SYMSIZE" . 316061) ("T3D" . 315956) ("THICK" . 316006)))
+    ("EFONT" pro nil (system) "%s [, Init_Font]" ("E.html" ("BLOCK" . 921048) ("GROUP" . 988298)))
+    ("EMPTY" pro nil (system) "%s" ("E5.html"))
+    ("ENABLE_SYSRTN" pro nil (system) "%s [, Routines]" ("E6.html" ("DISABLE" . 986251) ("EXCLUSIVE" . 986253) ("FUNCTIONS" . 986256)))
+    ("ERASE" pro nil (system) "%s [, Background_Color]" ("E9.html" ("CHANNEL" . 676712) ("COLOR" . 676714)))
+    ("ERRPLOT" pro nil (system) "%s, [ X, ] Low, High" ("E14.html" ("WIDTH" . 757212)))
+    ("EXIT" pro nil (system) "%s" ("E16.html" ("NO_CONFIRM" . 126978) ("STATUS" . 126983)))
+    ("EXPAND" pro nil (system) "%s, A, Nx, Ny, Result" ("E18.html" ("FILLVAL" . 986579) ("MAXVAL" . 757253)))
+    ("FILE_CHMOD" pro nil (system) "%s, File [, Mode]" ("F6.html" ("A_EXECUTE" . 882191) ("A_READ" . 882193) ("A_WRITE" . 882195) ("G_EXECUTE" . 882197) ("G_READ" . 882199) ("G_WRITE" . 882201) ("NOEXPAND_PATH" . 882956) ("O_EXECUTE" . 882203) ("O_READ" . 882205) ("O_WRITE" . 882207) ("SETGID" . 900602) ("SETUID" . 900604) ("STICKY_BIT" . 900606) ("U_EXECUTE" . 882209) ("U_READ" . 882211) ("U_WRITE" . 882213)))
+    ("FILE_COPY" pro nil (system) "%s, SourcePath, DestPath" ("F7.html" ("ALLOW_SAME" . 906390) ("COPY_NAMED_PIPE" . 906392) ("COPY_SYMLINK" . 906394) ("FORCE" . 906396) ("NOEXPAND_PATH" . 906399) ("OVERWRITE" . 906404) ("RECURSIVE" . 906406) ("REQUIRE_DIRECTORY" . 906412) ("VERBOSE" . 906414)))
+    ("FILE_DELETE" pro nil (system) "%s, File1 [,... Filen]" ("F8.html" ("ALLOW_NONEXISTENT" . 882944) ("NOEXPAND_PATH" . 906788) ("QUIET" . 906823) ("RECURSIVE" . 892369) ("VERBOSE" . 906799)))
+    ("FILE_LINK" pro nil (system) "%s, SourcePath, DestPath" ("F13.html" ("ALLOW_SAME" . 906533) ("HARDLINK" . 906535) ("NOEXPAND_PATH" . 906537) ("VERBOSE" . 906542)))
+    ("FILE_MKDIR" pro nil (system) "%s, File1 [,... FileN]" ("F14.html" ("NOEXPAND_PATH" . 882989)))
+    ("FILE_MOVE" pro nil (system) "%s, SourcePath, DestPath" ("F15.html" ("ALLOW_SAME" . 906590) ("NOEXPAND_PATH" . 906592) ("OVERWRITE" . 906597) ("REQUIRE_DIRECTORY" . 906599) ("VERBOSE" . 906601)))
+    ("FLICK" pro nil (system) "%s, A, B [, Rate]" ("F25.html"))
+    ("FLOW3" pro nil (system) "%s, Vx, Vy, Vz" ("F28.html" ("ARROWSIZE" . 757304) ("BLOB" . 757307) ("LEN" . 757310) ("NSTEPS" . 757313) ("NVECS" . 757316) ("SX" . 757321) ("SY" . 757321) ("SZ" . 757321)))
+    ("FLUSH" pro nil (system) "%s, Unit1, ..., Unitn" ("F30.html"))
+    ("FREE_LUN" pro nil (system) "%s [, Unit1, ..., Unitn]" ("F34.html" ("EXIT_STATUS" . 875865) ("FORCE" . 875880)))
+    ("FUNCT" pro nil (system) "%s, X, A, F [, Pder]" ("F37.html"))
+    ("GAMMA_CT" pro nil (system) "%s, Gamma" ("G2.html" ("CURRENT" . 759174) ("INTENSITY" . 759177)))
+    ("GET_LUN" pro nil (system) "%s, Unit" ("G10.html"))
+    ("GRID_INPUT" pro nil (system) "%s, X, Y, F, X1, Y1, F1" ("G14.html" ("DEGREES" . 877045) ("DUPLICATES" . 877047) ("EPSILON" . 877086) ("EXCLUDE" . 877088) ("POLAR" . 877090) ("SPHERE" . 877092)))
+    ("H5_CLOSE" pro nil (system) "%s" ("HDF5-routines10.html"))
+    ("H5_OPEN" pro nil (system) "%s" ("HDF5-routines12.html"))
+    ("H5A_CLOSE" pro nil (system) "%s, Attribute_id" ("HDF5-routines14.html"))
+    ("H5D_CLOSE" pro nil (system) "%s, Dataset_id" ("HDF5-routines22.html"))
+    ("H5F_CLOSE" pro nil (system) "%s, File_id" ("HDF5-routines28.html"))
+    ("H5G_CLOSE" pro nil (system) "%s, Group_id" ("HDF5-routines31.html"))
+    ("H5S_CLOSE" pro nil (system) "%s, Dataspace_id" ("HDF5-routines41.html"))
+    ("H5S_OFFSET_SIMPLE" pro nil (system) "%s, Dataspace_id, Offset" ("HDF5-routines55.html"))
+    ("H5S_SELECT_ALL" pro nil (system) "%s, Dataspace_id" ("HDF5-routines56.html"))
+    ("H5S_SELECT_ELEMENTS" pro nil (system) "%s, Dataspace_id, Coordinates" ("HDF5-routines57.html" ("RESET" . 1149840)))
+    ("H5S_SELECT_HYPERSLAB" pro nil (system) "%s, Dataspace_id, Start, Count" ("HDF5-routines58.html" ("BLOCK" . 1149884) ("RESET" . 1149886) ("STRIDE" . 1149888)))
+    ("H5S_SELECT_NONE" pro nil (system) "%s, Dataspace_id" ("HDF5-routines59.html"))
+    ("H5T_CLOSE" pro nil (system) "%s, Datatype_id" ("HDF5-routines61.html"))
+    ("H_EQ_CT" pro nil (system) "%s [, Image]" ("H.html"))
+    ("H_EQ_INT" pro nil (system) "%s [, Image]" ("H2.html"))
+    ("HDF_AN_END" pro nil (system) "%s, Annotation_id" ("HDF-routines13.html"))
+    ("HDF_AN_ENDACCESS" pro nil (system) "%s, Annotation_id" ("HDF-routines14.html"))
+    ("HDF_CLOSE" pro nil (system) "%s, FileHandle" ("HDF-routines25.html"))
+    ("HDF_DELDD" pro nil (system) "%s, FileHandle, Tag, Ref" ("HDF-routines26.html"))
+    ("HDF_DF24_ADDIMAGE" pro nil (system) "%s, Filename, Image" ("HDF-routines27.html" ("FORCE_BASELINE" . 1025840) ("JPEG" . 1025843) ("QUALITY" . 1025857) ("RLE" . 1025860)))
+    ("HDF_DF24_GETIMAGE" pro nil (system) "%s, Filename, Image" ("HDF-routines28.html" ("LINE" . 996986) ("PIXEL" . 996989) ("PLANE" . 996992)))
+    ("HDF_DF24_GETINFO" pro nil (system) "%s, Filename, Width, Height, Interlace" ("HDF-routines29.html"))
+    ("HDF_DF24_READREF" pro nil (system) "%s, Filename, Reference_number" ("HDF-routines32.html"))
+    ("HDF_DF24_RESTART" pro nil (system) "%s" ("HDF-routines33.html"))
+    ("HDF_DFAN_ADDFDS" pro nil (system) "%s, Filename, Description" ("HDF-routines34.html"))
+    ("HDF_DFAN_ADDFID" pro nil (system) "%s, Filename, Label" ("HDF-routines35.html"))
+    ("HDF_DFAN_GETDESC" pro nil (system) "%s, Filename, Tag, Ref, Description" ("HDF-routines36.html" ("STRING" . 997205)))
+    ("HDF_DFAN_GETFDS" pro nil (system) "%s, Filename, Description" ("HDF-routines37.html" ("FIRST" . 997250) ("STRING" . 997253)))
+    ("HDF_DFAN_GETFID" pro nil (system) "%s, Filename, Label" ("HDF-routines38.html" ("FIRST" . 997305)))
+    ("HDF_DFAN_GETLABEL" pro nil (system) "%s, Filename, Tag, Ref, Label" ("HDF-routines39.html"))
+    ("HDF_DFAN_PUTDESC" pro nil (system) "%s, Filename, Tag, Ref, Description" ("HDF-routines42.html"))
+    ("HDF_DFAN_PUTLABEL" pro nil (system) "%s, Filename, Tag, Ref, Label" ("HDF-routines43.html"))
+    ("HDF_DFP_ADDPAL" pro nil (system) "%s, Filename, Palette" ("HDF-routines44.html"))
+    ("HDF_DFP_GETPAL" pro nil (system) "%s, Filename, Palette" ("HDF-routines45.html"))
+    ("HDF_DFP_PUTPAL" pro nil (system) "%s, Filename, Palette" ("HDF-routines48.html" ("DELETE" . 1016492) ("OVERWRITE" . 997545)))
+    ("HDF_DFP_READREF" pro nil (system) "%s, Filename, Reference_number" ("HDF-routines49.html"))
+    ("HDF_DFP_RESTART" pro nil (system) "%s" ("HDF-routines50.html"))
+    ("HDF_DFP_WRITEREF" pro nil (system) "%s, Filename, Reference_number" ("HDF-routines51.html"))
+    ("HDF_DFR8_ADDIMAGE" pro nil (system) "%s, Filename, Image" ("HDF-routines52.html" ("FORCE_BASELINE" . 997601) ("IMCOMP" . 1025489) ("JPEG" . 1025496) ("PALETTE" . 997604) ("QUALITY" . 997612) ("RLE" . 1025510)))
+    ("HDF_DFR8_GETIMAGE" pro nil (system) "%s, Filename, Image [, Palette]" ("HDF-routines53.html"))
+    ("HDF_DFR8_GETINFO" pro nil (system) "%s, Filename, Width, Height, Has_Palette" ("HDF-routines54.html"))
+    ("HDF_DFR8_PUTIMAGE" pro nil (system) "%s, Filename, Image" ("HDF-routines57.html" ("FORCE_BASELINE" . 1025782) ("IMCOMP" . 1025788) ("JPEG" . 1025785) ("PALETTE" . 1025813) ("QUALITY" . 1025821) ("RLE" . 1025802)))
+    ("HDF_DFR8_READREF" pro nil (system) "%s, Filename, Reference_number" ("HDF-routines58.html"))
+    ("HDF_DFR8_RESTART" pro nil (system) "%s" ("HDF-routines59.html"))
+    ("HDF_DFR8_SETPALETTE" pro nil (system) "%s, Palette" ("HDF-routines60.html"))
+    ("HDF_DUPDD" pro nil (system) "%s, FileHandle, NewTag, NewRef, OldTag, OldRef" ("HDF-routines61.html"))
+    ("HDF_GR_END" pro nil (system) "%s, gr_id" ("HDF-routines65.html"))
+    ("HDF_GR_ENDACCESS" pro nil (system) "%s, ri_id" ("HDF-routines66.html"))
+    ("HDF_LIB_INFO" pro nil (system) "%s, [FileHandle]" ("HDF-routines92.html" ("MAJOR" . 1031740) ("MINOR" . 1031746) ("RELEASE" . 1031752) ("VERSION" . 1031973)))
+    ("HDF_SD_ADDDATA" pro nil (system) "%s, SDdataset_id, Data" ("HDF-routines97.html" ("COUNT" . 1053602) ("NOREVERSE" . 1053605) ("START" . 1053608) ("STRIDE" . 1053611)))
+    ("HDF_SD_ATTRINFO" pro nil (system) "%s, SD_id, Attr_Index" ("HDF-routines99.html" ("COUNT" . 1053698) ("DATA" . 1053701) ("HDF_TYPE" . 1053704) ("NAME" . 1053707) ("TYPE" . 1053710)))
+    ("HDF_SD_ATTRSET" pro nil (system) "%s, SD_id, Attr_Name, Values [, Count]" ("HDF-routines100.html" ("BYTE" . 1053770) ("DFNT_CHAR" . 1053773) ("DFNT_FLOAT32" . 1053776) ("DFNT_FLOAT64" . 1053779) ("DFNT_INT16" . 1053785) ("DFNT_INT32" . 1053788) ("DFNT_INT8" . 1053782) ("DFNT_UINT16" . 1053794) ("DFNT_UINT32" . 1053797) ("DFNT_UINT8" . 1053791) ("DOUBLE" . 1053800) ("FLOAT" . 1053803) ("INT" . 1053806) ("LONG" . 1053809) ("SHORT" . 1053812) ("STRING" . 1053815)))
+    ("HDF_SD_DIMGET" pro nil (system) "%s, Dim_ID" ("HDF-routines102.html" ("COMPATIBILITY" . 1053946) ("COUNT" . 1053944) ("FORMAT" . 1053948) ("LABEL" . 1053950) ("NAME" . 1053952) ("NATTR" . 1053954) ("SCALE" . 1053956) ("TYPE" . 1053958) ("UNIT" . 1053960)))
+    ("HDF_SD_DIMSET" pro nil (system) "%s, Dim_ID" ("HDF-routines104.html" ("BW_INCOMP" . 1054021) ("FORMAT" . 1054025) ("LABEL" . 1054027) ("NAME" . 1054029) ("SCALE" . 1054031) ("UNIT" . 1054033)))
+    ("HDF_SD_END" pro nil (system) "%s, SDinterface_id" ("HDF-routines105.html"))
+    ("HDF_SD_ENDACCESS" pro nil (system) "%s, SDinterface_id" ("HDF-routines106.html"))
+    ("HDF_SD_FILEINFO" pro nil (system) "%s, SDinterface_id, Datasets, Attributes" ("HDF-routines107.html"))
+    ("HDF_SD_GETDATA" pro nil (system) "%s, SDdataset_id, Data" ("HDF-routines108.html" ("COUNT" . 1054195) ("NOREVERSE" . 1054198) ("START" . 1054201) ("STRIDE" . 1054204)))
+    ("HDF_SD_GETINFO" pro nil (system) "%s, SDdataset_id" ("HDF-routines109.html" ("CALDATA" . 1054234) ("COORDSYS" . 1054238) ("DIMS" . 1054241) ("FILL" . 1054244) ("FORMAT" . 1054247) ("HDF_TYPE" . 1054250) ("LABEL" . 1054253) ("NAME" . 1054256) ("NATTS" . 1054259) ("NDIMS" . 1054262) ("NOREVERSE" . 1054265) ("RANGE" . 1054268) ("TYPE" . 1054271) ("UNIT" . 1054274)))
+    ("HDF_SD_SETCOMPRESS" pro nil (system) "%s, SDdataset_id, comptype" ("HDF-routines115.html" ("EFFORT" . 1074118)))
+    ("HDF_SD_SETEXTFILE" pro nil (system) "%s, SDdataset_id, Filename" ("HDF-routines116.html" ("OFFSET" . 1054488)))
+    ("HDF_SD_SETINFO" pro nil (system) "%s, SDdataset_id" ("HDF-routines117.html" ("CALDATA" . 1205515) ("COORDSYS" . 1205576) ("FILL" . 1054536) ("FORMAT" . 1054539) ("LABEL" . 1054542) ("RANGE" . 1054545) ("UNIT" . 1054548)))
+    ("HDF_UNPACKDATA" pro nil (system) "%s, packeddata, data1 [, data2 [, data3 [, data4 [, data5 [, data6 [, data7 [, data8]]]]]]]" ("HDF-routines119.html" ("HDF_ORDER" . 1042997) ("HDF_TYPE" . 1043000) ("NREC" . 1043003)))
+    ("HDF_VD_ATTRINFO" pro nil (system) "%s, VData, FieldID, AttrID" ("HDF-routines122.html" ("COUNT" . 1109959) ("DATA" . 1109961) ("HDF_TYPE" . 1109963) ("NAME" . 1109965) ("TYPE" . 1109967)))
+    ("HDF_VD_ATTRSET" pro nil (system) "%s, VData, FieldID, Attr_Name, Values [, Count]" ("HDF-routines123.html" ("BYTE" . 1110005) ("DFNT_CHAR88" . 1110007) ("DFNT_FLOAT32" . 1110009) ("DFNT_FLOAT64" . 1110011) ("DFNT_INT16" . 1110015) ("DFNT_INT32" . 1110017) ("DFNT_INT8" . 1110013) ("DFNT_UCHAR88" . 1110019) ("DFNT_UINT16" . 1110023) ("DFNT_UINT32" . 1110025) ("DFNT_UINT8" . 1110021) ("DOUBLE" . 1110027) ("FLOAT" . 1110029) ("INT" . 1110031) ("LONG" . 1110033) ("SHORT" . 1110035) ("STRING" . 1110037) ("UINT" . 1110039) ("ULONG" . 1110041)))
+    ("HDF_VD_DETACH" pro nil (system) "%s, VData" ("HDF-routines124.html"))
+    ("HDF_VD_FDEFINE" pro nil (system) "%s, VData, Fieldname" ("HDF-routines125.html" ("BYTE" . 999536) ("DOUBLE" . 999539) ("FLOAT" . 999542) ("INT" . 999545) ("LONG" . 999548) ("ORDER" . 999551)))
+    ("HDF_VD_GET" pro nil (system) "%s, VData" ("HDF-routines128.html" ("CLASS" . 999597) ("COUNT" . 999600) ("FIELDS" . 999603) ("INTERLACE" . 999606) ("NAME" . 999609) ("NFIELDS" . 999612) ("REF" . 999615) ("SIZE" . 999618) ("TAG" . 999621)))
+    ("HDF_VD_GETINFO" pro nil (system) "%s, VData, Index" ("HDF-routines130.html" ("NAME" . 999666) ("ORDER" . 999669) ("SIZE" . 999672) ("TYPE" . 999675)))
+    ("HDF_VD_INSERT" pro nil (system) "%s, VGroup, VData(or Vgroup)" ("HDF-routines131.html" ("POSITION" . 1141285)))
+    ("HDF_VD_SEEK" pro nil (system) "%s, VData, Record" ("HDF-routines138.html"))
+    ("HDF_VD_SETINFO" pro nil (system) "%s, VData" ("HDF-routines139.html" ("CLASS" . 999834) ("FULL_INTERLACE" . 999837) ("NAME" . 999840) ("NO_INTERLACE" . 999843)))
+    ("HDF_VD_WRITE" pro nil (system) "%s, VData, Fields, Data" ("HDF-routines140.html" ("FULL_INTERLACE" . 999876) ("NO_INTERLACE" . 999879) ("NRECORDS" . 999882)))
+    ("HDF_VG_ADDTR" pro nil (system) "%s, VGroup, Tag, Ref" ("HDF-routines141.html"))
+    ("HDF_VG_DETACH" pro nil (system) "%s, VGroup" ("HDF-routines143.html"))
+    ("HDF_VG_GETINFO" pro nil (system) "%s, VGroup" ("HDF-routines145.html" ("CLASS" . 1000002) ("NAME" . 1000005) ("NENTRIES" . 1000008) ("REF" . 1109613) ("TAG" . 1109591)))
+    ("HDF_VG_GETTR" pro nil (system) "%s, VGroup, Index, Tags, Refs" ("HDF-routines147.html"))
+    ("HDF_VG_GETTRS" pro nil (system) "%s, VGroup, Tags, Refs" ("HDF-routines148.html" ("MAXSIZE" . 1000064)))
+    ("HDF_VG_INSERT" pro nil (system) "%s, VGroup, VData(or Vgroup)" ("HDF-routines150.html" ("POSITION" . 1234250)))
+    ("HDF_VG_SETINFO" pro nil (system) "%s, VGroup" ("HDF-routines155.html" ("CLASSNAME" . 1000182) ("NAME" . 1000184)))
+    ("HEAP_FREE" pro nil (system) "%s, Var" ("H9.html" ("OBJ" . 877472) ("PTR" . 877474) ("VERBOSE" . 877477)))
+    ("HEAP_GC" pro nil (system) "%s" ("H10.html" ("OBJ" . 871683) ("PTR" . 832713) ("VERBOSE" . 832717)))
+    ("HELP" pro nil (system) "%s, Expression1, ..., Expressionn" ("H11.html" ("ALL_KEYS" . 677134) ("BREAKPOINTS" . 677136) ("BRIEF" . 870534) ("CALLS" . 870532) ("DEVICE" . 677140) ("DLM" . 677142) ("FILES" . 843801) ("FULL" . 832176) ("FUNCTIONS" . 870207) ("HEAP_VARIABLES" . 870621) ("KEYS" . 677144) ("LAST_MESSAGE" . 843755) ("LEVEL" . 897567) ("MEMORY" . 677146) ("MESSAGES" . 677148) ("NAMES" . 843817) ("OBJECTS" . 832180) ("OUTPUT" . 832171) ("PATH_CACHE" . 677150) ("PROCEDURES" . 888071) ("RECALL_COMMANDS" . 870903) ("ROUTINES" . 869603) ("SHARED_MEMORY" . 880202) ("SOURCE_FILES" . 168290) ("STRUCTURES" . 677154) ("SYSTEM_VARIABLES" . 677156) ("TRACEBACK" . 677158)))
+    ("HLS" pro nil (system) "%s, Litlo, Lithi, Satlo, Sathi, Hue, Loops [, Colr]" ("H16.html"))
+    ("HSV" pro nil (system) "%s, Vlo, Vhi, Satlo, Sathi, Hue, Loops [, Colr]" ("H19.html"))
+    ("ICONTOUR" pro nil (system) "%s[, Z[, X, Y]]" ("I2.html" ("AM_PM" . 937300) ("ANISOTROPY" . 937305) ("BACKGROUND_COLOR" . 963582) ("C_COLOR" . 963600) ("C_FILL_PATTERN" . 937326) ("C_LABEL_INTERVAL" . 937328) ("C_LABEL_NOGAPS" . 937330) ("C_LABEL_OBJECTS" . 937332) ("C_LABEL_SHOW" . 937341) ("C_LINESTYLE" . 937343) ("C_THICK" . 937356) ("C_USE_LABEL_COLOR" . 937358) ("C_USE_LABEL_ORIENTATION" . 937360) ("C_VALUE" . 937362) ("CLIP_PLANES" . 937364) ("COLOR" . 937367) ("DAYS_OF_WEEK" . 937369) ("DEPTH_OFFSET" . 963869) ("DIMENSIONS" . 937374) ("DOWNHILL" . 937376) ("FILL" . 937378) ("GRID_UNITS" . 964865) ("HIDE" . 937391) ("IDENTIFIER" . 937395) ("LABEL_FONT" . 937397) ("LABEL_FORMAT" . 937399) ("LABEL_FRMTDATA" . 937406) ("LABEL_UNITS" . 937408) ("LOCATION" . 937422) ("MACRO_NAMES" . 964542) ("MAX_VALUE" . 937424) ("MIN_VALUE" . 937431) ("MONTHS" . 937426) ("N_LEVELS" . 937435) ("NAME" . 937433) ("NO_SAVEPROMPT" . 982371) ("OVERPLOT" . 937437) ("PLANAR" . 937440) ("RGB_INDICES" . 937445) ("RGB_TABLE" . 937451) ("SHADE_RANGE" . 937458) ("SHADING" . 937460) ("STYLE_NAME" . 964365) ("TICKINTERVAL" . 937465) ("TICKLEN" . 937467) ("TITLE" . 937469) ("USE_TEXT_ALIGNMENTS" . 937471) ("VIEW_GRID" . 937473) ("VIEW_NEXT" . 937475) ("VIEW_NUMBER" . 937478) ("XGRIDSTYLE" . 937481) ("XMAJOR" . 961791) ("XMINOR" . 937483) ("XRANGE" . 937485) ("XSUBTICKLEN" . 937487) ("XTEXT_COLOR" . 937489) ("XTICKFONT_INDEX" . 937491) ("XTICKFONT_SIZE" . 937499) ("XTICKFONT_STYLE" . 937501) ("XTICKFORMAT" . 937508) ("XTICKINTERVAL" . 937526) ("XTICKLAYOUT" . 937530) ("XTICKLEN" . 937538) ("XTICKNAME" . 937540) ("XTICKUNITS" . 937542) ("XTICKVALUES" . 937558) ("XTITLE" . 937560) ("YGRIDSTYLE" . 937481) ("YMAJOR" . 961791) ("YMINOR" . 937483) ("YRANGE" . 937485) ("YSUBTICKLEN" . 937487) ("YTEXT_COLOR" . 937489) ("YTICKFONT_INDEX" . 937491) ("YTICKFONT_SIZE" . 937499) ("YTICKFONT_STYLE" . 937501) ("YTICKFORMAT" . 937508) ("YTICKINTERVAL" . 937526) ("YTICKLAYOUT" . 937530) ("YTICKLEN" . 937538) ("YTICKNAME" . 937540) ("YTICKUNITS" . 937542) ("YTICKVALUES" . 937558) ("YTITLE" . 937560) ("ZGRIDSTYLE" . 937481) ("ZMAJOR" . 961791) ("ZMINOR" . 937483) ("ZRANGE" . 937485) ("ZSUBTICKLEN" . 937487) ("ZTEXT_COLOR" . 937489) ("ZTICKFONT_INDEX" . 937491) ("ZTICKFONT_SIZE" . 937499) ("ZTICKFONT_STYLE" . 937501) ("ZTICKFORMAT" . 937508) ("ZTICKINTERVAL" . 937526) ("ZTICKLAYOUT" . 937530) ("ZTICKLEN" . 937538) ("ZTICKNAME" . 937540) ("ZTICKUNITS" . 937542) ("ZTICKVALUES" . 937558) ("ZTITLE" . 937560) ("ZVALUE" . 937562)))
+    ("IIMAGE" pro nil (system) "%s[, Image[, X, Y]]" ("I8.html" ("ALPHA_CHANNEL" . 942273) ("BACKGROUND_COLOR" . 963611) ("BLUE_CHANNEL" . 940200) ("CHANNEL" . 940203) ("CLIP_PLANES" . 940205) ("DIMENSIONS" . 940208) ("GREEN_CHANNEL" . 940210) ("GRID_UNITS" . 964788) ("HIDE" . 940212) ("IDENTIFIER" . 940216) ("IMAGE_DIMENSIONS" . 940218) ("IMAGE_LOCATION" . 940220) ("INTERPOLATE" . 940222) ("LOCATION" . 940224) ("MACRO_NAMES" . 964551) ("NAME" . 940226) ("NO_SAVEPROMPT" . 982596) ("ORDER" . 964559) ("OVERPLOT" . 940230) ("RED_CHANNEL" . 940233) ("RGB_TABLE" . 940235) ("STYLE_NAME" . 964392) ("TITLE" . 940237) ("VIEW_GRID" . 940239) ("VIEW_NEXT" . 940241) ("VIEW_NUMBER" . 940244) ("XGRIDSTYLE" . 961815) ("XMAJOR" . 940247) ("XMINOR" . 940249) ("XRANGE" . 940251) ("XSUBTICKLEN" . 940253) ("XTEXT_COLOR" . 940255) ("XTICKFONT_INDEX" . 940257) ("XTICKFONT_SIZE" . 940264) ("XTICKFONT_STYLE" . 940266) ("XTICKFORMAT" . 940272) ("XTICKINTERVAL" . 940289) ("XTICKLAYOUT" . 940292) ("XTICKLEN" . 940299) ("XTICKNAME" . 940301) ("XTICKUNITS" . 940303) ("XTICKVALUES" . 940318) ("XTITLE" . 940320) ("YGRIDSTYLE" . 961815) ("YMAJOR" . 940247) ("YMINOR" . 940249) ("YRANGE" . 940251) ("YSUBTICKLEN" . 940253) ("YTEXT_COLOR" . 940255) ("YTICKFONT_INDEX" . 940257) ("YTICKFONT_SIZE" . 940264) ("YTICKFONT_STYLE" . 940266) ("YTICKFORMAT" . 940272) ("YTICKINTERVAL" . 940289) ("YTICKLAYOUT" . 940292) ("YTICKLEN" . 940299) ("YTICKNAME" . 940301) ("YTICKUNITS" . 940303) ("YTICKVALUES" . 940318) ("YTITLE" . 940320)))
+    ("IMAGE_CONT" pro nil (system) "%s, A" ("I9.html" ("ASPECT" . 757356) ("INTERP" . 757359) ("WINDOW_SCALE" . 757362)))
+    ("IMAGE_STATISTICS" pro nil (system) "%s, Data" ("I10.html" ("COUNT" . 873572) ("DATA_SUM" . 873574) ("LABELED" . 873576) ("LUT" . 873582) ("MASK" . 873584) ("MAXIMUM" . 873586) ("MEAN" . 873588) ("MINIMUM" . 873590) ("STDDEV" . 873592) ("SUM_OF_SQUARES" . 873594) ("VARIANCE" . 873596) ("VECTOR" . 873598) ("WEIGHT_SUM" . 873600) ("WEIGHTED" . 873603)))
+    ("IMAP" pro nil (system) "%s" ("I12.html" ("BACKGROUND_COLOR" . 966654) ("CENTER_LATITUDE" . 966771) ("CENTER_LONGITUDE" . 966773) ("CONTOUR" . 966500) ("DATUM" . 966775) ("DIMENSIONS" . 966656) ("FALSE_EASTING" . 966916) ("FALSE_NORTHING" . 966918) ("GRID_UNITS" . 981023) ("HEIGHT" . 966920) ("HOM_AZIM_ANGLE" . 966924) ("HOM_AZIM_LONGITUDE" . 966922) ("HOM_LATITUDE1" . 966926) ("HOM_LATITUDE2" . 966928) ("HOM_LONGITUDE1" . 966930) ("HOM_LONGITUDE2" . 966932) ("IDENTIFIER" . 966658) ("IS_JUSTIFY" . 966936) ("IS_ZONES" . 966934) ("LIMIT" . 966941) ("LOCATION" . 966660) ("MACRO_NAMES" . 966666) ("MAP_PROJECTION" . 966503) ("MERCATOR_SCALE" . 966943) ("NAME" . 966668) ("NO_SAVEPROMPT" . 982447) ("OEA_ANGLE" . 966945) ("OEA_SHAPEM" . 966947) ("OEA_SHAPEN" . 966950) ("OVERPLOT" . 966670) ("SEMIMAJOR_AXIS" . 966953) ("SEMIMINOR_AXIS" . 966955) ("SOM_FLAG" . 966965) ("SOM_INCLINATION" . 966957) ("SOM_LANDSAT_NUMBER" . 966967) ("SOM_LANDSAT_PATH" . 966969) ("SOM_LONGITUDE" . 966959) ("SOM_PERIOD" . 966961) ("SOM_RATIO" . 966963) ("SPHERE_RADIUS" . 966971) ("STANDARD_PAR1" . 966975) ("STANDARD_PAR2" . 966977) ("STANDARD_PARALLEL" . 966973) ("STYLE_NAME" . 966673) ("TITLE" . 966678) ("TRUE_SCALE_LATITUDE" . 966979) ("VIEW_GRID" . 966680) ("VIEW_NEXT" . 966682) ("VIEW_NUMBER" . 966685) ("XGRIDSTYLE" . 966688) ("XMAJOR" . 966690) ("XMINOR" . 966692) ("XRANGE" . 966694) ("XSUBTICKLEN" . 966696) ("XTEXT_COLOR" . 966698) ("XTICKFONT_INDEX" . 966700) ("XTICKFONT_SIZE" . 966707) ("XTICKFONT_STYLE" . 966709) ("XTICKFORMAT" . 966715) ("XTICKINTERVAL" . 966736) ("XTICKLAYOUT" . 966739) ("XTICKLEN" . 966746) ("XTICKNAME" . 966748) ("XTICKUNITS" . 966750) ("XTICKVALUES" . 966766) ("XTITLE" . 966768) ("YGRIDSTYLE" . 966688) ("YMAJOR" . 966690) ("YMINOR" . 966692) ("YRANGE" . 966694) ("YSUBTICKLEN" . 966696) ("YTEXT_COLOR" . 966698) ("YTICKFONT_INDEX" . 966700) ("YTICKFONT_SIZE" . 966707) ("YTICKFONT_STYLE" . 966709) ("YTICKFORMAT" . 966715) ("YTICKINTERVAL" . 966736) ("YTICKLAYOUT" . 966739) ("YTICKLEN" . 966746) ("YTICKNAME" . 966748) ("YTICKUNITS" . 966750) ("YTICKVALUES" . 966766) ("YTITLE" . 966768) ("ZONE" . 966981)) ("I2.html" ("AM_PM" . 937300) ("ANISOTROPY" . 937305) ("BACKGROUND_COLOR" . 963582) ("C_COLOR" . 963600) ("C_FILL_PATTERN" . 937326) ("C_LABEL_INTERVAL" . 937328) ("C_LABEL_NOGAPS" . 937330) ("C_LABEL_OBJECTS" . 937332) ("C_LABEL_SHOW" . 937341) ("C_LINESTYLE" . 937343) ("C_THICK" . 937356) ("C_USE_LABEL_COLOR" . 937358) ("C_USE_LABEL_ORIENTATION" . 937360) ("C_VALUE" . 937362) ("CLIP_PLANES" . 937364) ("COLOR" . 937367) ("DAYS_OF_WEEK" . 937369) ("DEPTH_OFFSET" . 963869) ("DIMENSIONS" . 937374) ("DOWNHILL" . 937376) ("FILL" . 937378) ("GRID_UNITS" . 964865) ("HIDE" . 937391) ("IDENTIFIER" . 937395) ("LABEL_FONT" . 937397) ("LABEL_FORMAT" . 937399) ("LABEL_FRMTDATA" . 937406) ("LABEL_UNITS" . 937408) ("LOCATION" . 937422) ("MACRO_NAMES" . 964542) ("MAX_VALUE" . 937424) ("MIN_VALUE" . 937431) ("MONTHS" . 937426) ("N_LEVELS" . 937435) ("NAME" . 937433) ("NO_SAVEPROMPT" . 982371) ("OVERPLOT" . 937437) ("PLANAR" . 937440) ("RGB_INDICES" . 937445) ("RGB_TABLE" . 937451) ("SHADE_RANGE" . 937458) ("SHADING" . 937460) ("STYLE_NAME" . 964365) ("TICKINTERVAL" . 937465) ("TICKLEN" . 937467) ("TITLE" . 937469) ("USE_TEXT_ALIGNMENTS" . 937471) ("VIEW_GRID" . 937473) ("VIEW_NEXT" . 937475) ("VIEW_NUMBER" . 937478) ("XGRIDSTYLE" . 937481) ("XMAJOR" . 961791) ("XMINOR" . 937483) ("XRANGE" . 937485) ("XSUBTICKLEN" . 937487) ("XTEXT_COLOR" . 937489) ("XTICKFONT_INDEX" . 937491) ("XTICKFONT_SIZE" . 937499) ("XTICKFONT_STYLE" . 937501) ("XTICKFORMAT" . 937508) ("XTICKINTERVAL" . 937526) ("XTICKLAYOUT" . 937530) ("XTICKLEN" . 937538) ("XTICKNAME" . 937540) ("XTICKUNITS" . 937542) ("XTICKVALUES" . 937558) ("XTITLE" . 937560) ("YGRIDSTYLE" . 937481) ("YMAJOR" . 961791) ("YMINOR" . 937483) ("YRANGE" . 937485) ("YSUBTICKLEN" . 937487) ("YTEXT_COLOR" . 937489) ("YTICKFONT_INDEX" . 937491) ("YTICKFONT_SIZE" . 937499) ("YTICKFONT_STYLE" . 937501) ("YTICKFORMAT" . 937508) ("YTICKINTERVAL" . 937526) ("YTICKLAYOUT" . 937530) ("YTICKLEN" . 937538) ("YTICKNAME" . 937540) ("YTICKUNITS" . 937542) ("YTICKVALUES" . 937558) ("YTITLE" . 937560) ("ZGRIDSTYLE" . 937481) ("ZMAJOR" . 961791) ("ZMINOR" . 937483) ("ZRANGE" . 937485) ("ZSUBTICKLEN" . 937487) ("ZTEXT_COLOR" . 937489) ("ZTICKFONT_INDEX" . 937491) ("ZTICKFONT_SIZE" . 937499) ("ZTICKFONT_STYLE" . 937501) ("ZTICKFORMAT" . 937508) ("ZTICKINTERVAL" . 937526) ("ZTICKLAYOUT" . 937530) ("ZTICKLEN" . 937538) ("ZTICKNAME" . 937540) ("ZTICKUNITS" . 937542) ("ZTICKVALUES" . 937558) ("ZTITLE" . 937560) ("ZVALUE" . 937562)) ("I8.html" ("ALPHA_CHANNEL" . 942273) ("BACKGROUND_COLOR" . 963611) ("BLUE_CHANNEL" . 940200) ("CHANNEL" . 940203) ("CLIP_PLANES" . 940205) ("DIMENSIONS" . 940208) ("GREEN_CHANNEL" . 940210) ("GRID_UNITS" . 964788) ("HIDE" . 940212) ("IDENTIFIER" . 940216) ("IMAGE_DIMENSIONS" . 940218) ("IMAGE_LOCATION" . 940220) ("INTERPOLATE" . 940222) ("LOCATION" . 940224) ("MACRO_NAMES" . 964551) ("NAME" . 940226) ("NO_SAVEPROMPT" . 982596) ("ORDER" . 964559) ("OVERPLOT" . 940230) ("RED_CHANNEL" . 940233) ("RGB_TABLE" . 940235) ("STYLE_NAME" . 964392) ("TITLE" . 940237) ("VIEW_GRID" . 940239) ("VIEW_NEXT" . 940241) ("VIEW_NUMBER" . 940244) ("XGRIDSTYLE" . 961815) ("XMAJOR" . 940247) ("XMINOR" . 940249) ("XRANGE" . 940251) ("XSUBTICKLEN" . 940253) ("XTEXT_COLOR" . 940255) ("XTICKFONT_INDEX" . 940257) ("XTICKFONT_SIZE" . 940264) ("XTICKFONT_STYLE" . 940266) ("XTICKFORMAT" . 940272) ("XTICKINTERVAL" . 940289) ("XTICKLAYOUT" . 940292) ("XTICKLEN" . 940299) ("XTICKNAME" . 940301) ("XTICKUNITS" . 940303) ("XTICKVALUES" . 940318) ("XTITLE" . 940320) ("YGRIDSTYLE" . 961815) ("YMAJOR" . 940247) ("YMINOR" . 940249) ("YRANGE" . 940251) ("YSUBTICKLEN" . 940253) ("YTEXT_COLOR" . 940255) ("YTICKFONT_INDEX" . 940257) ("YTICKFONT_SIZE" . 940264) ("YTICKFONT_STYLE" . 940266) ("YTICKFORMAT" . 940272) ("YTICKINTERVAL" . 940289) ("YTICKLAYOUT" . 940292) ("YTICKLEN" . 940299) ("YTICKNAME" . 940301) ("YTICKUNITS" . 940303) ("YTICKVALUES" . 940318) ("YTITLE" . 940320)))
+    ("INTERVAL_VOLUME" pro nil (system) "%s, Data, Value0, Value1, Outverts, Outconn" ("I20.html" ("AUXDATA_IN" . 877934) ("AUXDATA_OUT" . 877937) ("GEOM_XYZ" . 877940) ("PROGRESS_CALLBACK" . 904666) ("PROGRESS_METHOD" . 904664) ("PROGRESS_OBJECT" . 904694) ("PROGRESS_PERCENT" . 904705) ("PROGRESS_USERDATA" . 904717) ("TETRAHEDRA" . 904724)))
+    ("IPLOT" pro nil (system) "%s, [X,] Y or %s, X, Y, Z or %s[, R], Theta" ("I23.html" ("BACKGROUND_COLOR" . 940548) ("CLIP_PLANES" . 963636) ("COLOR" . 940551) ("DIMENSIONS" . 984454) ("ERRORBAR_CAPSIZE" . 940557) ("ERRORBAR_COLOR" . 940555) ("FILL_BACKGROUND" . 940559) ("FILL_COLOR" . 940561) ("FILL_LEVEL" . 940563) ("HIDE" . 940565) ("HISTOGRAM" . 940569) ("IDENTIFIER" . 940571) ("LINESTYLE" . 940573) ("LOCATION" . 940586) ("MACRO_NAMES" . 964589) ("MAX_VALUE" . 940588) ("MIN_VALUE" . 940591) ("NAME" . 940594) ("NO_SAVEPROMPT" . 982649) ("NSUM" . 940596) ("OVERPLOT" . 940598) ("POLAR" . 940601) ("RGB_TABLE" . 940603) ("SCATTER" . 940605) ("STYLE_NAME" . 964415) ("SYM_COLOR" . 940607) ("SYM_INCREMENT" . 940610) ("SYM_INDEX" . 940612) ("SYM_SIZE" . 940623) ("SYM_THICK" . 940625) ("THICK" . 940627) ("TITLE" . 940629) ("TRANSPARENCY" . 940631) ("USE_DEFAULT_COLOR" . 940633) ("VERT_COLORS" . 940637) ("VIEW_GRID" . 940639) ("VIEW_NEXT" . 940641) ("VIEW_NUMBER" . 940644) ("X_ERRORBARS" . 940649) ("X_LOG" . 940651) ("XERROR" . 940653) ("XGRIDSTYLE" . 961829) ("XMAJOR" . 940655) ("XMINOR" . 940657) ("XRANGE" . 940659) ("XSUBTICKLEN" . 940661) ("XTEXT_COLOR" . 940663) ("XTICKFONT_INDEX" . 940665) ("XTICKFONT_SIZE" . 940673) ("XTICKFONT_STYLE" . 940675) ("XTICKFORMAT" . 940682) ("XTICKINTERVAL" . 940700) ("XTICKLAYOUT" . 940704) ("XTICKLEN" . 940712) ("XTICKNAME" . 940714) ("XTICKUNITS" . 940716) ("XTICKVALUES" . 940732) ("XTITLE" . 940734) ("XY_SHADOW" . 940647) ("XZ_SHADOW" . 940736) ("Y_ERRORBARS" . 940649) ("Y_LOG" . 940651) ("YERROR" . 940653) ("YGRIDSTYLE" . 961829) ("YMAJOR" . 940655) ("YMINOR" . 940657) ("YRANGE" . 940659) ("YSUBTICKLEN" . 940661) ("YTEXT_COLOR" . 940663) ("YTICKFONT_INDEX" . 940665) ("YTICKFONT_SIZE" . 940673) ("YTICKFONT_STYLE" . 940675) ("YTICKFORMAT" . 940682) ("YTICKINTERVAL" . 940700) ("YTICKLAYOUT" . 940704) ("YTICKLEN" . 940712) ("YTICKNAME" . 940714) ("YTICKUNITS" . 940716) ("YTICKVALUES" . 940732) ("YTITLE" . 940734) ("YZ_SHADOW" . 940738) ("Z_ERRORBARS" . 940649) ("Z_LOG" . 940651) ("ZERROR" . 940653) ("ZGRIDSTYLE" . 961829) ("ZMAJOR" . 940655) ("ZMINOR" . 940657) ("ZRANGE" . 940659) ("ZSUBTICKLEN" . 940661) ("ZTEXT_COLOR" . 940663) ("ZTICKFONT_INDEX" . 940665) ("ZTICKFONT_SIZE" . 940673) ("ZTICKFONT_STYLE" . 940675) ("ZTICKFORMAT" . 940682) ("ZTICKINTERVAL" . 940700) ("ZTICKLAYOUT" . 940704) ("ZTICKLEN" . 940712) ("ZTICKNAME" . 940714) ("ZTICKUNITS" . 940716) ("ZTICKVALUES" . 940732) ("ZTITLE" . 940734)))
+    ("ISOCONTOUR" pro nil (system) "%s, Values, Outverts, Outconn" ("I25.html" ("AUXDATA_IN" . 873707) ("AUXDATA_OUT" . 873709) ("C_LABEL_INTERVAL" . 873711) ("C_LABEL_SHOW" . 880877) ("C_VALUE" . 880888) ("DOUBLE" . 875352) ("FILL" . 873713) ("GEOMX" . 873715) ("GEOMY" . 873717) ("GEOMZ" . 873719) ("LEVEL_VALUES" . 873723) ("N_LEVELS" . 873725) ("OUT_LABEL_OFFSETS" . 873727) ("OUT_LABEL_POLYLINES" . 880899) ("OUT_LABEL_STRINGS" . 880914) ("OUTCONN_INDICES" . 880934) ("POLYGONS" . 873730)))
+    ("ISOSURFACE" pro nil (system) "%s, Data, Value, Outverts, Outconn" ("I26.html" ("AUXDATA_IN" . 873750) ("AUXDATA_OUT" . 873753) ("GEOM_XYZ" . 873756) ("PROGRESS_CALLBACK" . 873759) ("PROGRESS_METHOD" . 904740) ("PROGRESS_OBJECT" . 904767) ("PROGRESS_PERCENT" . 904780) ("PROGRESS_USERDATA" . 904786) ("TETRAHEDRA" . 904793)))
+    ("ISURFACE" pro nil (system) "%s[, Z [, X, Y]]" ("I27.html" ("BACKGROUND_COLOR" . 940941) ("BOTTOM" . 963651) ("CLIP_PLANES" . 940943) ("COLOR" . 940946) ("DEPTH_OFFSET" . 940950) ("DIMENSIONS" . 940948) ("EXTENDED_LEGO" . 940960) ("HIDDEN_LINES" . 940962) ("HIDE" . 940964) ("IDENTIFIER" . 940968) ("LINESTYLE" . 940970) ("LOCATION" . 940983) ("MACRO_NAMES" . 964571) ("NAME" . 940985) ("NO_SAVEPROMPT" . 982715) ("OVERPLOT" . 940987) ("RGB_TABLE" . 940990) ("SHADING" . 940992) ("SHOW_SKIRT" . 940997) ("SKIRT" . 940999) ("STYLE" . 941001) ("STYLE_NAME" . 964441) ("TEXTURE_ALPHA" . 941010) ("TEXTURE_BLUE" . 941012) ("TEXTURE_GREEN" . 941014) ("TEXTURE_HIGHRES" . 941016) ("TEXTURE_IMAGE" . 941019) ("TEXTURE_INTERP" . 941021) ("TEXTURE_RED" . 941023) ("THICK" . 941025) ("TITLE" . 941027) ("USE_TRIANGLES" . 941029) ("VERT_COLORS" . 941031) ("VIEW_GRID" . 941033) ("VIEW_NEXT" . 941035) ("VIEW_NUMBER" . 941038) ("XGRIDSTYLE" . 961847) ("XMAJOR" . 941041) ("XMINOR" . 941043) ("XRANGE" . 941045) ("XSUBTICKLEN" . 941047) ("XTEXT_COLOR" . 941049) ("XTICKFONT_INDEX" . 941051) ("XTICKFONT_SIZE" . 941058) ("XTICKFONT_STYLE" . 941060) ("XTICKFORMAT" . 941066) ("XTICKINTERVAL" . 941083) ("XTICKLAYOUT" . 941086) ("XTICKLEN" . 941093) ("XTICKNAME" . 941095) ("XTICKUNITS" . 941097) ("XTICKVALUES" . 941112) ("XTITLE" . 941114) ("YGRIDSTYLE" . 961847) ("YMAJOR" . 941041) ("YMINOR" . 941043) ("YRANGE" . 941045) ("YSUBTICKLEN" . 941047) ("YTEXT_COLOR" . 941049) ("YTICKFONT_INDEX" . 941051) ("YTICKFONT_SIZE" . 941058) ("YTICKFONT_STYLE" . 941060) ("YTICKFORMAT" . 941066) ("YTICKINTERVAL" . 941083) ("YTICKLAYOUT" . 941086) ("YTICKLEN" . 941093) ("YTICKNAME" . 941095) ("YTICKUNITS" . 941097) ("YTICKVALUES" . 941112) ("YTITLE" . 941114) ("ZERO_OPACITY_SKIP" . 941116) ("ZGRIDSTYLE" . 961847) ("ZMAJOR" . 941041) ("ZMINOR" . 941043) ("ZRANGE" . 941045) ("ZSUBTICKLEN" . 941047) ("ZTEXT_COLOR" . 941049) ("ZTICKFONT_INDEX" . 941051) ("ZTICKFONT_SIZE" . 941058) ("ZTICKFONT_STYLE" . 941060) ("ZTICKFORMAT" . 941066) ("ZTICKINTERVAL" . 941083) ("ZTICKLAYOUT" . 941086) ("ZTICKLEN" . 941093) ("ZTICKNAME" . 941095) ("ZTICKUNITS" . 941097) ("ZTICKVALUES" . 941112) ("ZTITLE" . 941114)))
+    ("ITCURRENT" pro nil (system) "%s, iToolID" ("I28.html"))
+    ("ITDELETE" pro nil (system) "%s[, iToolID]" ("I29.html"))
+    ("ITREGISTER" pro nil (system) "%s, Name, ItemName" ("I31.html" ("ANNOTATION" . 961620) ("DEFAULT" . 980906) ("FILE_READER" . 961629) ("FILE_WRITER" . 961635) ("TYPES" . 941578) ("UI_PANEL" . 941581) ("UI_SERVICE" . 941584) ("USER_INTERFACE" . 961874) ("VISUALIZATION" . 941586)))
+    ("ITRESET" pro nil (system) "%s" ("I32.html" ("NO_PROMPT" . 941670)))
+    ("ITRESOLVE" pro nil (system) "%s" ("I33.html" ("PATH" . 969191)))
+    ("IVOLUME" pro nil (system) "%s[, Vol0[, Vol1][, Vol2, Vol3]]" ("I34.html" ("AMBIENT" . 941804) ("AUTO_RENDER" . 941806) ("BACKGROUND_COLOR" . 941809) ("BOUNDS" . 963673) ("CLIP_PLANES" . 963690) ("COMPOSITE_FUNCTION" . 941815) ("DEPTH_CUE" . 941828) ("DIMENSIONS" . 941837) ("EXTENTS_TRANSPARENCY" . 964340) ("HIDE" . 941839) ("HINTS" . 941843) ("IDENTIFIER" . 941849) ("INTERPOLATE" . 941851) ("LIGHTING_MODEL" . 941853) ("LOCATION" . 941856) ("MACRO_NAMES" . 964580) ("NAME" . 941858) ("NO_SAVEPROMPT" . 982766) ("OPACITY_TABLE0" . 941860) ("OPACITY_TABLE1" . 941862) ("OVERPLOT" . 941864) ("RENDER_EXTENTS" . 941867) ("RENDER_QUALITY" . 941874) ("RENDER_STEP" . 941872) ("RGB_TABLE0" . 941879) ("RGB_TABLE1" . 941881) ("STYLE_NAME" . 964479) ("SUBVOLUME" . 941883) ("TITLE" . 941885) ("TWO_SIDED" . 941887) ("VIEW_GRID" . 941889) ("VIEW_NEXT" . 941891) ("VIEW_NUMBER" . 941894) ("VOLUME_DIMENSIONS" . 941897) ("VOLUME_LOCATION" . 941899) ("XGRIDSTYLE" . 961859) ("XMAJOR" . 941901) ("XMINOR" . 941903) ("XRANGE" . 941905) ("XSUBTICKLEN" . 941907) ("XTEXT_COLOR" . 941909) ("XTICKFONT_INDEX" . 941911) ("XTICKFONT_SIZE" . 941918) ("XTICKFONT_STYLE" . 941920) ("XTICKFORMAT" . 941926) ("XTICKINTERVAL" . 941943) ("XTICKLAYOUT" . 941946) ("XTICKLEN" . 941953) ("XTICKNAME" . 941955) ("XTICKUNITS" . 941957) ("XTICKVALUES" . 941972) ("XTITLE" . 941974) ("YGRIDSTYLE" . 961859) ("YMAJOR" . 941901) ("YMINOR" . 941903) ("YRANGE" . 941905) ("YSUBTICKLEN" . 941907) ("YTEXT_COLOR" . 941909) ("YTICKFONT_INDEX" . 941911) ("YTICKFONT_SIZE" . 941918) ("YTICKFONT_STYLE" . 941920) ("YTICKFORMAT" . 941926) ("YTICKINTERVAL" . 941943) ("YTICKLAYOUT" . 941946) ("YTICKLEN" . 941953) ("YTICKNAME" . 941955) ("YTICKUNITS" . 941957) ("YTICKVALUES" . 941972) ("YTITLE" . 941974) ("ZBUFFER" . 941976) ("ZERO_OPACITY_SKIP" . 941978) ("ZGRIDSTYLE" . 961859) ("ZMAJOR" . 941901) ("ZMINOR" . 941903) ("ZRANGE" . 941905) ("ZSUBTICKLEN" . 941907) ("ZTEXT_COLOR" . 941909) ("ZTICKFONT_INDEX" . 941911) ("ZTICKFONT_SIZE" . 941918) ("ZTICKFONT_STYLE" . 941920) ("ZTICKFORMAT" . 941926) ("ZTICKINTERVAL" . 941943) ("ZTICKLAYOUT" . 941946) ("ZTICKLEN" . 941953) ("ZTICKNAME" . 941955) ("ZTICKUNITS" . 941957) ("ZTICKVALUES" . 941972) ("ZTITLE" . 941974)))
+    ("JOURNAL" pro nil (system) "%s [, Arg]" ("J.html"))
+    ("LA_CHOLDC" pro nil (system) "%s, Array" ("L2.html" ("DOUBLE" . 969070) ("STATUS" . 969072) ("UPPER" . 969077)))
+    ("LA_LUDC" pro nil (system) "%s, Array, Index" ("L16.html" ("DOUBLE" . 970769) ("STATUS" . 970771)))
+    ("LA_SVD" pro nil (system) "%s, Array, W, U, V" ("L19.html" ("DIVIDE_CONQUER" . 971149) ("DOUBLE" . 971151) ("STATUS" . 971153)))
+    ("LA_TRIDC" pro nil (system) "%s, AL, A, AU, U2, Index" ("L20.html" ("DOUBLE" . 971273) ("STATUS" . 971275)))
+    ("LA_TRIQL" pro nil (system) "%s, D, E [, A]" ("L22.html" ("DOUBLE" . 971540) ("STATUS" . 971542)))
+    ("LA_TRIRED" pro nil (system) "%s, Array, D, E" ("L23.html" ("DOUBLE" . 971643) ("UPPER" . 971645)))
+    ("LINKIMAGE" pro nil (system) "%s, Name, Image [, Type [, Entry]]" ("L34.html" ("DEVICE" . 855619) ("FUNCT" . 855622) ("KEYWORDS" . 855625) ("MAX_ARGS" . 855628) ("MIN_ARGS" . 855632)))
+    ("LOADCT" pro nil (system) "%s [, Table]" ("L40.html" ("BOTTOM" . 168327) ("FILE" . 759299) ("GET_NAMES" . 759305) ("NCOLORS" . 759308) ("SILENT" . 759311)))
+    ("LUDC" pro nil (system) "%s, A, Index" ("L51.html" ("COLUMN" . 58718) ("DOUBLE" . 50959) ("INTERCHANGES" . 50962)))
+    ("MAKE_DLL" pro nil (system) "%s, InputFiles [, OutputFile], ExportedRoutineNames" ("M4.html" ("CC" . 960457) ("COMPILE_DIRECTORY" . 960459) ("DLL_PATH" . 960461) ("EXPORTED_DATA" . 960463) ("EXTRA_CFLAGS" . 960465) ("EXTRA_LFLAGS" . 960467) ("INPUT_DIRECTORY" . 960469) ("LD" . 960471) ("NOCLEANUP" . 960473) ("OUTPUT_DIRECTORY" . 960502) ("REUSE_EXISTING" . 973081) ("SHOW_ALL_OUTPUT" . 960504) ("VERBOSE" . 960506)))
+    ("MAP_CONTINENTS" pro nil (system) "%s" ("M6.html" ("COASTS" . 1048587) ("COLOR" . 887531) ("CONTINENTS" . 957787) ("COUNTRIES" . 887534) ("FILL_CONTINENTS" . 887537) ("HIRES" . 887540) ("LIMIT" . 957885) ("MAP_STRUCTURE" . 1059750) ("MLINESTYLE" . 1059754) ("MLINETHICK" . 887584) ("ORIENTATION" . 887588) ("RIVERS" . 887591) ("SPACING" . 887594) ("USA" . 887597)) ("graphkeyw2.html" ("T3D" . 315956) ("ZVALUE" . 316102)))
+    ("MAP_GRID" pro nil (system) "%s" ("M7.html" ("BOX_AXES" . 919039) ("CHARSIZE" . 887636) ("CLIP_TEXT" . 919041) ("COLOR" . 887639) ("FILL_HORIZON" . 958045) ("GLINESTYLE" . 887642) ("GLINETHICK" . 887648) ("HORIZON" . 958090) ("INCREMENT" . 958092) ("LABEL" . 958064) ("LATALIGN" . 887654) ("LATDEL" . 887657) ("LATLAB" . 887660) ("LATNAMES" . 887663) ("LATS" . 887668) ("LONALIGN" . 887673) ("LONDEL" . 887676) ("LONLAB" . 887679) ("LONNAMES" . 887682) ("LONS" . 887687) ("MAP_STRUCTURE" . 1059914) ("NO_GRID" . 958111) ("ORIENTATION" . 887692)) ("graphkeyw2.html" ("T3D" . 315956) ("ZVALUE" . 316102)))
+    ("MAP_PROJ_INFO" pro nil (system) "%s [, iproj]" ("M12.html" ("AZIMUTHAL" . 918995) ("CIRCLE" . 928077) ("CURRENT" . 918999) ("CYLINDRICAL" . 919001) ("LL_LIMITS" . 919003) ("NAME" . 919005) ("PROJ_NAMES" . 919007) ("UV_LIMITS" . 919011) ("UV_RANGE" . 928995)))
+    ("MAP_SET" pro nil (system) "%s [, P0lat, P0lon, Rot]" ("M15.html" ("ADVANCE" . 887984) ("AITOFF" . 957265) ("ALBERS" . 887925) ("AZIMUTHAL" . 887931) ("CENTRAL_AZIMUTH" . 888123) ("CHARSIZE" . 887987) ("CLIP" . 887990) ("COLOR" . 887997) ("CON_COLOR" . 888003) ("CONIC" . 887934) ("CONTINENTS" . 888000) ("CYLINDRICAL" . 887940) ("E_CONTINENTS" . 888006) ("E_GRID" . 888009) ("E_HORIZON" . 888013) ("ELLIPSOID" . 888127) ("GLINESTYLE" . 888019) ("GLINETHICK" . 888025) ("GNOMIC" . 887943) ("GOODESHOMOLOSINE" . 918601) ("GRID" . 949681) ("HAMMER" . 887946) ("HIRES" . 888031) ("HORIZON" . 888034) ("ISOTROPIC" . 888134) ("LABEL" . 918537) ("LAMBERT" . 887950) ("LATALIGN" . 888043) ("LATDEL" . 888049) ("LATLAB" . 888046) ("LIMIT" . 888141) ("LONALIGN" . 888052) ("LONDEL" . 888055) ("LONLAB" . 888058) ("MERCATOR" . 887953) ("MILLER_CYLINDRICAL" . 887956) ("MLINESTYLE" . 888061) ("MLINETHICK" . 888101) ("MOLLWEIDE" . 887959) ("NAME" . 958229) ("NOBORDER" . 958173) ("NOERASE" . 888107) ("ORTHOGRAPHIC" . 887962) ("REVERSE" . 888110) ("ROBINSON" . 919362) ("SAT_P" . 888146) ("SATELLITE" . 887965) ("SCALE" . 958134) ("SINUSOIDAL" . 887971) ("STANDARD_PARALLELS" . 888156) ("STEREOGRAPHIC" . 887974) ("TITLE" . 958298) ("TRANSVERSE_MERCATOR" . 887977) ("USA" . 888113) ("XMARGIN" . 958356) ("YMARGIN" . 888119)) ("graphkeyw2.html" ("POSITION" . 316026) ("T3D" . 315956) ("ZVALUE" . 316102)))
+    ("MESH_OBJ" pro nil (system) "%s, Type, Vertex_List, Polygon_List, Array1 [, Array2]" ("M29.html" ("CLOSED" . 888559) ("DEGREES" . 965212) ("P1" . 888562) ("P5")))
+    ("MESSAGE" pro nil (system) "%s, [Text]" ("M34.html" ("BLOCK" . 888669) ("CONTINUE" . 965245) ("INFORMATIONAL" . 888672) ("IOERROR" . 888676) ("LEVEL" . 965401) ("NAME" . 965353) ("NONAME" . 965554) ("NOPREFIX" . 888682) ("NOPRINT" . 888686) ("REISSUE_LAST" . 1016375) ("RESET" . 1016373) ("TRACEBACK" . 888698)))
+    ("MK_HTML_HELP" pro nil (system) "%s, Sources, Filename" ("M37.html" ("STRICT" . 888862) ("TITLE" . 888864) ("VERBOSE" . 888866)))
+    ("MODIFYCT" pro nil (system) "%s, Itab, Name, R, G, B" ("M38.html" ("FILE" . 962516)))
+    ("MPEG_CLOSE" pro nil (system) "%s, mpegID" ("M47.html"))
+    ("MPEG_PUT" pro nil (system) "%s, mpegID" ("M49.html" ("COLOR" . 889108) ("FRAME" . 915949) ("IMAGE" . 889110) ("ORDER" . 889112) ("WINDOW" . 889114)))
+    ("MPEG_SAVE" pro nil (system) "%s, mpegID" ("M50.html" ("FILENAME" . 889150)))
+    ("MULTI" pro nil (system) "%s, N" ("M51.html"))
+    ("NCDF_ATTCDEL" pro nil (system) "%s, Cdfid [, Varid]" ("NetCDF-routines12.html" ("GLOBAL" . 996962)))
+    ("NCDF_ATTGET" pro nil (system) "%s, Cdfid [, Varid]" ("NetCDF-routines13.html" ("GLOBAL" . 996996)))
+    ("NCDF_ATTPUT" pro nil (system) "%s, Cdfid [, Varid]" ("NetCDF-routines16.html" ("BYTE" . 997126) ("CHAR" . 997129) ("DOUBLE" . 997132) ("FLOAT" . 997135) ("GLOBAL" . 997116) ("LENGTH" . 997119) ("LONG" . 997138) ("SHORT" . 997141)))
+    ("NCDF_ATTRENAME" pro nil (system) "%s, Cdfid [, Varid]" ("NetCDF-routines17.html" ("GLOBAL" . 997166)))
+    ("NCDF_CLOSE" pro nil (system) "%s, Cdfid" ("NetCDF-routines18.html"))
+    ("NCDF_CONTROL" pro nil (system) "%s, Cdfid" ("NetCDF-routines19.html" ("ABORT" . 997195) ("ENDEF" . 997198) ("FILL" . 997201) ("NOFILL" . 997237) ("NOVERBOSE" . 997240) ("OLDFILL" . 997243) ("REDEF" . 997247) ("SYNC" . 997250) ("VERBOSE" . 997253)))
+    ("NCDF_DIMINQ" pro nil (system) "%s, Cdfid, Dimid, Name, Size" ("NetCDF-routines23.html"))
+    ("NCDF_DIMRENAME" pro nil (system) "%s, Cdfid, Dimid, NewName" ("NetCDF-routines24.html"))
+    ("NCDF_VARGET" pro nil (system) "%s, Cdfid, Varid, Value" ("NetCDF-routines29.html" ("COUNT" . 997494) ("OFFSET" . 997497) ("STRIDE" . 997500)))
+    ("NCDF_VARGET1" pro nil (system) "%s, Cdfid, Varid, Value" ("NetCDF-routines30.html" ("OFFSET" . 997545)))
+    ("NCDF_VARPUT" pro nil (system) "%s, Cdfid, Varid, Value" ("NetCDF-routines33.html" ("COUNT" . 997627) ("OFFSET" . 997630) ("STRIDE" . 997633)))
+    ("NCDF_VARRENAME" pro nil (system) "%s, Cdfid, Varid, Name" ("NetCDF-routines34.html"))
+    ("OBJ" pro nil (system) "%s - > [IDLffJPEG2000::]Cleanup" ("objects_ff37.html"))
+    ("OBJ_DESTROY" pro nil (system) "%s, Obj" ("objects_ff89.html"))
+    ("ON_ERROR" pro nil (system) "%s, N" ("O7.html"))
+    ("ON_IOERROR" pro nil (system) "%s, Label" ("O8.html"))
+    ("ONLINE_HELP" pro nil (system) "%s [, Value]" ("O9.html" ("BOOK" . 889642) ("CONTEXT" . 934178) ("FOLD_CASE" . 934187) ("FULL_PATH" . 932136) ("PAGE" . 934194) ("QUIT" . 932700) ("SUPPRESS_PLUGIN_ERRORS" . 940902) ("TOPICS" . 931860)))
+    ("ONLINE_HELP_PDF_INDEX" pro nil (system) "%s [, SearchTerm]" ("O10.html"))
+    ("OPENR" pro nil (system) "%s, Unit, File" ("O11.html" ("APPEND" . 889709) ("BUFSIZE" . 889712) ("COMPRESS" . 928372) ("DELETE" . 928370) ("ERROR" . 889720) ("F77_UNFORMATTED" . 889729) ("GET_LUN" . 889739) ("MORE" . 889747) ("NOEXPAND_PATH" . 929441) ("RAWIO" . 934244) ("STDIO" . 930929) ("SWAP_ENDIAN" . 889764) ("SWAP_IF_BIG_ENDIAN" . 889767) ("SWAP_IF_LITTLE_ENDIAN" . 889770) ("VAX_FLOAT" . 889773) ("WIDTH" . 889787) ("XDR" . 889796)))
+    ("OPENU" pro nil (system) "%s, Unit, File" ("O11.html" ("APPEND" . 889709) ("BUFSIZE" . 889712) ("COMPRESS" . 928372) ("DELETE" . 928370) ("ERROR" . 889720) ("F77_UNFORMATTED" . 889729) ("GET_LUN" . 889739) ("MORE" . 889747) ("NOEXPAND_PATH" . 929441) ("RAWIO" . 934244) ("STDIO" . 930929) ("SWAP_ENDIAN" . 889764) ("SWAP_IF_BIG_ENDIAN" . 889767) ("SWAP_IF_LITTLE_ENDIAN" . 889770) ("VAX_FLOAT" . 889773) ("WIDTH" . 889787) ("XDR" . 889796)))
+    ("OPENW" pro nil (system) "%s, Unit, File" ("O11.html" ("APPEND" . 889709) ("BUFSIZE" . 889712) ("COMPRESS" . 928372) ("DELETE" . 928370) ("ERROR" . 889720) ("F77_UNFORMATTED" . 889729) ("GET_LUN" . 889739) ("MORE" . 889747) ("NOEXPAND_PATH" . 929441) ("RAWIO" . 934244) ("STDIO" . 930929) ("SWAP_ENDIAN" . 889764) ("SWAP_IF_BIG_ENDIAN" . 889767) ("SWAP_IF_LITTLE_ENDIAN" . 889770) ("VAX_FLOAT" . 889773) ("WIDTH" . 889787) ("XDR" . 889796)))
+    ("OPLOT" pro nil (system) "%s, [X,] Y" ("O12.html" ("MAX_VALUE" . 889969) ("MIN_VALUE" . 889976) ("NSUM" . 889983) ("POLAR" . 889990) ("THICK" . 889995)) ("graphkeyw2.html" ("CLIP" . 315949) ("COLOR" . 315952) ("LINESTYLE" . 331728) ("NOCLIP" . 323508) ("PSYM" . 316038) ("SYMSIZE" . 316061) ("T3D" . 315956) ("ZVALUE" . 316102)))
+    ("OPLOTERR" pro nil (system) "%s, [ X ,] Y , Err [, Psym]" ("O13.html"))
+    ("PARTICLE_TRACE" pro nil (system) "%s, Data, Seeds, Verts, Conn [, Normals]" ("P2.html" ("ANISOTROPY" . 1071147) ("INTEGRATION" . 1071149) ("MAX_ITERATIONS" . 1071158) ("MAX_STEPSIZE" . 1071160) ("SEED_NORMAL" . 1071154) ("TOLERANCE" . 1071156) ("UNIFORM" . 1071162)))
+    ("PATH_CACHE" pro nil (system) "%s" ("P3.html" ("CLEAR" . 1105531) ("ENABLE" . 1105534) ("REBUILD" . 1105537)))
+    ("PLOT" pro nil (system) "%s, [X,] Y" ("P6.html" ("ISOTROPIC" . 948898) ("MAX_VALUE" . 678098) ("MIN_VALUE" . 47057) ("NSUM" . 678100) ("POLAR" . 678103) ("THICK" . 678106) ("XLOG" . 810411) ("YLOG" . 810463) ("YNOZERO" . 810415)) ("graphkeyw2.html" ("BACKGROUND" . 328424) ("CHARSIZE" . 266973) ("CHARTHICK" . 331668) ("CLIP" . 315949) ("COLOR" . 315952) ("DATA" . 315961) ("DEVICE" . 315977) ("FONT" . 331795) ("LINESTYLE" . 331728) ("NOCLIP" . 323508) ("NODATA" . 316018) ("NOERASE" . 316024) ("NORMAL" . 315963) ("POSITION" . 316026) ("PSYM" . 316038) ("SUBTITLE" . 316057) ("SYMSIZE" . 316061) ("T3D" . 315956) ("TICKLEN" . 332207) ("TITLE" . 332238) ("XCHARSIZE" . 331699) ("XGRIDSTYLE" . 332009) ("XMARGIN" . 332038) ("XMINOR" . 332061) ("XRANGE" . 332090) ("XSTYLE" . 332116) ("XTHICK" . 332298) ("XTICK_GET" . 332321) ("XTICKFORMAT" . 332347) ("XTICKINTERVAL" . 332463) ("XTICKLAYOUT" . 332488) ("XTICKLEN" . 332513) ("XTICKNAME" . 332536) ("XTICKS" . 332559) ("XTICKUNITS" . 332586) ("XTICKV" . 332628) ("XTITLE" . 316100) ("YCHARSIZE" . 331699) ("YGRIDSTYLE" . 332009) ("YMARGIN" . 332038) ("YMINOR" . 332061) ("YRANGE" . 332090) ("YSTYLE" . 332116) ("YTHICK" . 332298) ("YTICK_GET" . 332321) ("YTICKFORMAT" . 332347) ("YTICKINTERVAL" . 332463) ("YTICKLAYOUT" . 332488) ("YTICKLEN" . 332513) ("YTICKNAME" . 332536) ("YTICKS" . 332559) ("YTICKUNITS" . 332586) ("YTICKV" . 332628) ("YTITLE" . 316100) ("ZCHARSIZE" . 331699) ("ZGRIDSTYLE" . 332009) ("ZMARGIN" . 332038) ("ZMINOR" . 332061) ("ZRANGE" . 332090) ("ZSTYLE" . 332116) ("ZTHICK" . 332298) ("ZTICK_GET" . 332321) ("ZTICKFORMAT" . 332347) ("ZTICKINTERVAL" . 332463) ("ZTICKLAYOUT" . 332488) ("ZTICKLEN" . 332513) ("ZTICKNAME" . 332536) ("ZTICKS" . 332559) ("ZTICKUNITS" . 332586) ("ZTICKV" . 332628) ("ZTITLE" . 316100) ("ZVALUE" . 316102)))
+    ("PLOT_3DBOX" pro nil (system) "%s, X, Y, Z" ("P7.html" ("GRIDSTYLE" . 137555) ("PSYM" . 137608) ("SOLID_WALLS" . 835291) ("XY_PLANE" . 137639) ("XYSTYLE" . 137642) ("XZ_PLANE" . 137637) ("XZSTYLE" . 137638) ("YZ_PLANE" . 137640) ("YZSTYLE" . 137643)) ("S75.html" ("AX" . 679220) ("AZ" . 679225) ("ZAXIS" . 679256)))
+    ("PLOT_FIELD" pro nil (system) "%s, U, V" ("P8.html" ("ASPECT" . 757604) ("LENGTH" . 757607) ("N" . 757610) ("TITLE" . 757613)))
+    ("PLOTERR" pro nil (system) "%s, [ X ,] Y , Err" ("P9.html" ("PSYM" . 757654) ("TYPE" . 757647)))
+    ("PLOTS" pro nil (system) "%s, X [, Y [, Z]]" ("P10.html" ("CONTINUE" . 678168)) ("graphkeyw2.html" ("CLIP" . 315949) ("COLOR" . 315952) ("DATA" . 315961) ("DEVICE" . 315977) ("LINESTYLE" . 331728) ("NOCLIP" . 323508) ("NORMAL" . 315963) ("PSYM" . 316038) ("SYMSIZE" . 316061) ("T3D" . 315956) ("THICK" . 316006) ("Z" . 332658)))
+    ("POINT_LUN" pro nil (system) "%s, Unit, Position" ("P12.html"))
+    ("POLAR_CONTOUR" pro nil (system) "%s, Z, Theta, R" ("P13.html" ("SHOW_TRIANGULATION" . 128404)) ("C40.html" ("C_ANNOTATION" . 1023103) ("C_CHARSIZE" . 676279) ("C_CHARTHICK" . 905138) ("C_COLORS" . 676281) ("C_LINESTYLE" . 676292) ("C_ORIENTATION" . 676298) ("C_SPACING" . 676300) ("C_THICK" . 676302) ("CLOSED" . 676304) ("FILL" . 676308) ("IRREGULAR" . 879096) ("LEVELS" . 927695) ("MAX_VALUE" . 676323) ("MIN_VALUE" . 47033) ("NLEVELS" . 676325) ("OVERPLOT" . 861732) ("PATH_DATA_COORDS" . 879089) ("TRIANGULATION" . 746344) ("XLOG" . 158329) ("YLOG" . 158344) ("ZAXIS" . 676344)))
+    ("POLYFILL" pro nil (system) "%s, X [, Y [, Z]]" ("P19.html" ("IMAGE_COORD" . 678254) ("IMAGE_INTERP" . 678256) ("LINE_FILL" . 678258) ("PATTERN" . 678260) ("SPACING" . 678269) ("TRANSPARENT" . 678271)) ("graphkeyw2.html" ("CLIP" . 315949) ("COLOR" . 315952) ("DATA" . 315961) ("DEVICE" . 315977) ("LINESTYLE" . 331728) ("NOCLIP" . 323508) ("NORMAL" . 315963) ("ORIENTATION" . 315964) ("T3D" . 315956) ("THICK" . 316006) ("Z" . 332658)))
+    ("POLYWARP" pro nil (system) "%s, Xi, Yi, Xo, Yo, Degree, Kx, Ky" ("P22.html" ("DOUBLE" . 1075034) ("STATUS" . 1075060)))
+    ("POPD" pro nil (system) "%s" ("P23.html"))
+    ("POWELL" pro nil (system) "%s, P, Xi, Ftol, Fmin, Func" ("P24.html" ("DOUBLE" . 51467) ("ITER" . 51470) ("ITMAX" . 51473)))
+    ("PRINT" pro nil (system) "%s [, Expr1, ..., Exprn]" ("P26.html" ("AM_PM" . 678362) ("DAYS_OF_WEEK" . 1015582) ("FORMAT" . 1015576) ("MONTHS" . 1015619) ("STDIO_NON_FINITE" . 1015513)))
+    ("PRINTD" pro nil (system) "%s" ("P27.html"))
+    ("PRINTF" pro nil (system) "%s [, Unit, Expr1, ..., Exprn]" ("P26.html" ("AM_PM" . 678362) ("DAYS_OF_WEEK" . 1015582) ("FORMAT" . 1015576) ("MONTHS" . 1015619) ("STDIO_NON_FINITE" . 1015513)))
+    ("PROFILER" pro nil (system) "%s [, Module]" ("P31.html" ("CLEAR" . 900205) ("DATA" . 1088814) ("OUTPUT" . 900155) ("REPORT" . 900194) ("RESET" . 900195) ("SYSTEM" . 900159)))
+    ("PROFILES" pro nil (system) "%s, Image" ("P32.html" ("ORDER" . 757719) ("SX" . 757722) ("SY" . 757725) ("WSIZE" . 757728)))
+    ("PS_SHOW_FONTS" pro nil (system) "%s" ("P34.html" ("NOLATIN" . 762026)))
+    ("PSAFM" pro nil (system) "%s, Input_Filename, Output_Filename" ("P35.html"))
+    ("PSEUDO" pro nil (system) "%s, Litlo, Lithi, Satlo, Sathi, Hue, Loops [, Colr]" ("P36.html"))
+    ("PTR_FREE" pro nil (system) "%s, P1, ... ..., Pn" ("P37.html"))
+    ("PUSHD" pro nil (system) "%s, Dir" ("P41.html"))
+    ("QHULL" pro nil (system) "%s, V, Tr or, %s, V0 , V1, [, V2 ... [, V6] ] , Tr" ("Q2.html" ("BOUNDS" . 1073465) ("CONNECTIVITY" . 1073467) ("DELAUNAY" . 1073473) ("SPHERE" . 1073475) ("VDIAGRAM" . 1073477) ("VNORMALS" . 1073481) ("VVERTICES" . 1073483)))
+    ("RDPIX" pro nil (system) "%s, Image [, X0, Y0]" ("R7.html"))
+    ("READ" pro nil (system) "%s, [Prompt,] Var1, ..., Varn" ("R8.html" ("AM_PM" . 1015647) ("DAYS_OF_WEEK" . 1015649) ("FORMAT" . 1015645) ("MONTHS" . 1015670) ("PROMPT" . 863855)))
+    ("READ_GIF" pro nil (system) "%s, Filename, Image [, R, G, B]" ("R13.html" ("CLOSE" . 1165757) ("MULTIPLE" . 1165763)))
+    ("READ_INTERFILE" pro nil (system) "%s, File, Data" ("R15.html"))
+    ("READ_JPEG" pro nil (system) "%s [, Filename] , Image [, Colortable]" ("R16.html" ("BUFFER" . 279694) ("COLORS" . 279696) ("DITHER" . 279697) ("GRAYSCALE" . 1064444) ("ORDER" . 868283) ("TRUE" . 279699) ("TWO_PASS_QUANTIZE" . 279700) ("UNIT" . 279701)))
+    ("READ_PICT" pro nil (system) "%s, Filename, Image [, R, G, B]" ("R19.html"))
+    ("READ_PPM" pro nil (system) "%s, Filename, Image" ("R21.html" ("MAXVAL" . 67809)))
+    ("READ_SRF" pro nil (system) "%s, Filename, Image [, R, G, B]" ("R23.html"))
+    ("READ_WAVE" pro nil (system) "%s, File, Variables, Names, Dimensions" ("R27.html" ("MESHNAMES" . 756240)))
+    ("READ_X11_BITMAP" pro nil (system) "%s, File, Bitmap [, X, Y]" ("R28.html" ("EXPAND_TO_BYTES" . 756264)))
+    ("READF" pro nil (system) "%s, [Prompt,] Unit, Var1, ..., Varn" ("R8.html" ("AM_PM" . 1015647) ("DAYS_OF_WEEK" . 1015649) ("FORMAT" . 1015645) ("MONTHS" . 1015670) ("PROMPT" . 863855)))
+    ("READS" pro nil (system) "%s, Input, Var1, ..., Varn" ("R30.html" ("AM_PM" . 1015707) ("DAYS_OF_WEEK" . 1015709) ("FORMAT" . 678457) ("MONTHS" . 1015728)))
+    ("READU" pro nil (system) "%s, Unit, Var1, ..., Varn" ("R31.html" ("TRANSFER_COUNT" . 678471)))
+    ("REDUCE_COLORS" pro nil (system) "%s, Image, Values" ("R36.html"))
+    ("REGISTER_CURSOR" pro nil (system) "%s, Name, Image" ("R39.html" ("HOTSPOT" . 1108842) ("MASK" . 1108840) ("OVERWRITE" . 1108844)))
+    ("REPLICATE_INPLACE" pro nil (system) "%s, X, Value [, D1, Loc1 [, D2, Range]]" ("R43.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("RESOLVE_ALL" pro nil (system) "%s" ("R44.html" ("CLASS" . 1114080) ("CONTINUE_ON_ERROR" . 1114078) ("QUIET" . 1014991) ("RESOLVE_EITHER" . 1166218) ("RESOLVE_FUNCTION" . 1166223) ("RESOLVE_PROCEDURE" . 1166248) ("SKIP_ROUTINES" . 1166262) ("UNRESOLVED" . 1166255)))
+    ("RESOLVE_ROUTINE" pro nil (system) "%s, Name" ("R45.html" ("COMPILE_FULL_FILE" . 1069898) ("EITHER" . 1073138) ("IS_FUNCTION" . 1069896) ("NO_RECOMPILE" . 1069991)))
+    ("RESTORE" pro nil (system) "%s [[, Filename]]" ("R46.html" ("DESCRIPTION" . 1135778) ("FILENAME" . 678568) ("RELAXED_STRUCTURE_ASSIGNMENT" . 900571) ("RESTORED_OBJECTS" . 900564) ("VERBOSE" . 678570)))
+    ("RETALL" pro nil (system) "%s" ("R47.html"))
+    ("SAVE" pro nil (system) "%s [, Var1, ..., Varn]" ("S2.html" ("ALL" . 678631) ("COMM" . 678633) ("COMPRESS" . 1074405) ("DESCRIPTION" . 678635) ("FILENAME" . 1199210) ("ROUTINES" . 678637) ("SYSTEM_VARIABLES" . 678639) ("VARIABLES" . 678642) ("VERBOSE" . 678644)))
+    ("SCALE3" pro nil (system) "%s" ("S4.html" ("AX" . 787108) ("AZ" . 787111) ("XRANGE" . 787099) ("YRANGE" . 787102) ("ZRANGE" . 787105)))
+    ("SCALE3D" pro nil (system) "%s" ("S5.html"))
+    ("SET_PLOT" pro nil (system) "%s, Device" ("S11.html" ("COPY" . 862592) ("INTERPOLATE" . 862599)))
+    ("SET_SHADING" pro nil (system) "%s" ("S12.html" ("GOURAUD" . 678682) ("LIGHT" . 678685) ("REJECT" . 678687) ("VALUES" . 678689)))
+    ("SETENV" pro nil (system) "%s, Environment_Expression" ("S13.html"))
+    ("SETUP_KEYS" pro nil (system) "%s" ("S14.html" ("ANSI" . 43203) ("APP_KEYPAD" . 43217) ("EIGHTBIT" . 1015422) ("HP9000" . 43209) ("IBM" . 1015421) ("MIPS" . 43211) ("NUM_KEYPAD" . 43219) ("SGI" . 43215) ("SUN" . 43205) ("VT200" . 43207)))
+    ("SHADE_SURF" pro nil (system) "%s, Z [, X, Y]" ("S16.html" ("AX" . 678754) ("AZ" . 678759) ("IMAGE" . 678761) ("MAX_VALUE" . 678763) ("MIN_VALUE" . 47127) ("PIXELS" . 844042) ("SAVE" . 678765) ("SHADES" . 678767) ("XLOG" . 158361) ("YLOG" . 158393)) ("graphkeyw2.html" ("CHARSIZE" . 266973) ("CHARTHICK" . 331668) ("COLOR" . 315952) ("DATA" . 315961) ("DEVICE" . 315977) ("FONT" . 331795) ("NODATA" . 316018) ("NORMAL" . 315963) ("POSITION" . 316026) ("SUBTITLE" . 316057) ("T3D" . 315956) ("THICK" . 316006) ("TICKLEN" . 332207) ("TITLE" . 332238) ("XCHARSIZE" . 331699) ("XGRIDSTYLE" . 332009) ("XMARGIN" . 332038) ("XMINOR" . 332061) ("XRANGE" . 332090) ("XSTYLE" . 332116) ("XTHICK" . 332298) ("XTICK_GET" . 332321) ("XTICKFORMAT" . 332347) ("XTICKINTERVAL" . 332463) ("XTICKLAYOUT" . 332488) ("XTICKLEN" . 332513) ("XTICKNAME" . 332536) ("XTICKS" . 332559) ("XTICKUNITS" . 332586) ("XTICKV" . 332628) ("XTITLE" . 316100) ("YCHARSIZE" . 331699) ("YGRIDSTYLE" . 332009) ("YMARGIN" . 332038) ("YMINOR" . 332061) ("YRANGE" . 332090) ("YSTYLE" . 332116) ("YTHICK" . 332298) ("YTICK_GET" . 332321) ("YTICKFORMAT" . 332347) ("YTICKINTERVAL" . 332463) ("YTICKLAYOUT" . 332488) ("YTICKLEN" . 332513) ("YTICKNAME" . 332536) ("YTICKS" . 332559) ("YTICKUNITS" . 332586) ("YTICKV" . 332628) ("YTITLE" . 316100) ("ZCHARSIZE" . 331699) ("ZGRIDSTYLE" . 332009) ("ZMARGIN" . 332038) ("ZMINOR" . 332061) ("ZRANGE" . 332090) ("ZSTYLE" . 332116) ("ZTHICK" . 332298) ("ZTICK_GET" . 332321) ("ZTICKFORMAT" . 332347) ("ZTICKINTERVAL" . 332463) ("ZTICKLAYOUT" . 332488) ("ZTICKLEN" . 332513) ("ZTICKNAME" . 332536) ("ZTICKS" . 332559) ("ZTICKUNITS" . 332586) ("ZTICKV" . 332628) ("ZTITLE" . 316100) ("ZVALUE" . 316102)))
+    ("SHADE_SURF_IRR" pro nil (system) "%s, Z, X, Y" ("S17.html" ("AX" . 787162) ("AZ" . 787165) ("IMAGE" . 787168) ("PLIST" . 787171) ("T3D" . 867401)))
+    ("SHADE_VOLUME" pro nil (system) "%s, Volume, Value, Vertex, Poly" ("S18.html" ("LOW" . 678801) ("SHADES" . 678803) ("VERBOSE" . 678805) ("XRANGE" . 678807) ("YRANGE" . 678809) ("ZRANGE" . 678811)))
+    ("SHMMAP" pro nil (system) "%s [, SegmentName] [, D1, ..., D8]" ("S21.html" ("BYTE" . 1143213) ("COMPLEX" . 1143215) ("DCOMPLEX" . 1143217) ("DESTROY_SEGMENT" . 1143219) ("DIMENSION" . 1143226) ("DOUBLE" . 1143228) ("FILENAME" . 1143230) ("FLOAT" . 1143234) ("GET_NAME" . 1143237) ("GET_OS_HANDLE" . 1143240) ("INTEGER" . 1143245) ("L64" . 1143247) ("LONG" . 1143252) ("OFFSET" . 1143254) ("OS_HANDLE" . 1143259) ("PRIVATE" . 1143277) ("SIZE" . 1143281) ("SYSV" . 1143286) ("TEMPLATE" . 1143291) ("TYPE" . 1143293) ("UINT" . 1143298) ("UL64" . 1143302) ("ULONG" . 1143300)))
+    ("SHMUNMAP" pro nil (system) "%s, SegmentName" ("S22.html"))
+    ("SHOW3" pro nil (system) "%s, Image [, X, Y]" ("S24.html" ("E_CONTOUR" . 863032) ("E_SURFACE" . 863036) ("INTERP" . 862964) ("SSCALE" . 787203)))
+    ("SHOWFONT" pro nil (system) "%s, Font, Name" ("S25.html" ("ENCAPSULATED" . 762072) ("TT_FONT" . 901959)))
+    ("SKIP_LUN" pro nil (system) "%s, FromUnit, [, Num]" ("S32.html" ("EOF" . 1143762) ("LINES" . 1143765) ("TRANSFER_COUNT" . 1143767)))
+    ("SLICER3" pro nil (system) "%s [, hData3D]" ("S33.html" ("DATA_NAMES" . 914863) ("DETACH" . 914866) ("GROUP" . 914869) ("MODAL" . 914872)))
+    ("SLIDE_IMAGE" pro nil (system) "%s [, Image]" ("S34.html" ("BLOCK" . 923990) ("CONGRID" . 787344) ("FULL_WINDOW" . 787347) ("GROUP" . 787350) ("ORDER" . 787353) ("REGISTER" . 787356) ("RETAIN" . 787360) ("SHOW_FULL" . 787366) ("SLIDE_WINDOW" . 787363) ("TITLE" . 900068) ("TOP_ID" . 787369) ("XSIZE" . 787374) ("XVISIBLE" . 787377) ("YSIZE" . 787380) ("YVISIBLE" . 787383)))
+    ("SOCKET" pro nil (system) "%s, Unit, Host, Port" ("S37.html" ("CONNECT_TIMEOUT" . 1098145) ("ERROR" . 1098148) ("GET_LUN" . 1142975) ("RAWIO" . 1098160) ("READ_TIMEOUT" . 1098166) ("STDIO" . 1133828) ("SWAP_ENDIAN" . 1098168) ("SWAP_IF_BIG_ENDIAN" . 1098171) ("SWAP_IF_LITTLE_ENDIAN" . 1098175) ("WIDTH" . 1098179) ("WRITE_TIMEOUT" . 1098187)))
+    ("SPAWN" pro nil (system) "%s [, Command [, Result] [, ErrResult]]" ("S39.html" ("COUNT" . 678969) ("EXIT_STATUS" . 678971) ("HIDE" . 1133996) ("LOG_OUTPUT" . 1134006) ("NOSHELL" . 1108410) ("NOTTYRESET" . 1134017) ("NOWAIT" . 1134051) ("NULL_STDIN" . 1134151) ("PID" . 1084167) ("SH" . 1133965) ("STDERR" . 1133968) ("UNIT" . 1133975)))
+    ("SPH_4PNT" pro nil (system) "%s, X, Y, Z, Xc, Yc, Zc, R" ("S40.html" ("DOUBLE" . 1094107)))
+    ("SPLINE_P" pro nil (system) "%s, X, Y, Xr, Yr" ("S46.html" ("DOUBLE" . 1187959) ("INTERVAL" . 758561) ("TAN0" . 758564) ("TAN1" . 758567)))
+    ("STOP" pro nil (system) "%s [, Expr1, ..., Exprn]" ("S54.html"))
+    ("STREAMLINE" pro nil (system) "%s, Verts, Conn, Normals, Outverts, Outconn" ("S58.html" ("ANISOTROPY" . 1078861) ("PROFILE" . 1078865) ("SIZE" . 1078863)))
+    ("STRETCH" pro nil (system) "%s [, Low, High [, Gamma]]" ("S60.html" ("CHOP" . 759533)))
+    ("STRPUT" pro nil (system) "%s, Destination, Source [, Position]" ("S69.html"))
+    ("STRUCT_ASSIGN" pro nil (system) "%s, Source, Destination" ("S72.html" ("NOZERO" . 1074356) ("VERBOSE" . 901018)))
+    ("STRUCT_HIDE" pro nil (system) "%s, Arg1 [, Arg2, ..., Argn]" ("S73.html"))
+    ("SURFACE" pro nil (system) "%s, Z [, X, Y]" ("S75.html" ("AX" . 679220) ("AZ" . 679225) ("BOTTOM" . 679227) ("HORIZONTAL" . 679229) ("LEGO" . 716839) ("LOWER_ONLY" . 679231) ("MAX_VALUE" . 679233) ("MIN_VALUE" . 47161) ("SAVE" . 679235) ("SHADES" . 679245) ("SKIRT" . 679247) ("UPPER_ONLY" . 679250) ("XLOG" . 158409) ("YLOG" . 158414) ("ZAXIS" . 679256) ("ZLOG" . 862016)))
+    ("SURFR" pro nil (system) "%s" ("S76.html" ("AX" . 787417) ("AZ" . 787420)))
+    ("SVDC" pro nil (system) "%s, A, W, U, V" ("S77.html" ("COLUMN" . 58767) ("DOUBLE" . 52115) ("ITMAX" . 1095860)))
+    ("SWAP_ENDIAN_INPLACE" pro nil (system) "%s, Variable" ("S81.html" ("SWAP_IF_BIG_ENDIAN" . 1143824) ("SWAP_IF_LITTLE_ENDIAN" . 1143826)))
+    ("T3D" pro nil (system) "%s [, Array]" ("T3.html" ("MATRIX" . 787453) ("OBLIQUE" . 1076313) ("PERSPECTIVE" . 787459) ("RESET" . 787462) ("ROTATE" . 787465) ("SCALE" . 787468) ("TRANSLATE" . 787471) ("XYEXCH" . 787474) ("XZEXCH" . 787477) ("YZEXCH" . 787480)))
+    ("TEK_COLOR" pro nil (system) "%s [, Start_Index, Colors]" ("T7.html"))
+    ("THREED" pro nil (system) "%s, A [, Sp]" ("T13.html" ("TITLE" . 787515) ("XTITLE" . 787518) ("YTITLE" . 787521)))
+    ("TIME_TEST2" pro nil (system) "%s [, Filename]" ("T14.html"))
+    ("TRIANGULATE" pro nil (system) "%s, X, Y, Triangles [, B]" ("T21.html" ("CONNECTIVITY" . 679547) ("DEGREES" . 126686) ("FVALUE" . 126695) ("REPEATS" . 679555) ("SPHERE" . 126681)))
+    ("TRIQL" pro nil (system) "%s, D, E, A" ("T23.html" ("DOUBLE" . 52221)))
+    ("TRIRED" pro nil (system) "%s, A, D, E" ("T24.html" ("DOUBLE" . 52282)))
+    ("TRUNCATE_LUN" pro nil (system) "%s, Unit1, ..., Unitn" ("T26.html"))
+    ("TV" pro nil (system) "%s, Image [, Position] or %s, Image [, X, Y [, Channel]]" ("T31.html" ("CENTIMETERS" . 679682) ("INCHES" . 679690) ("ORDER" . 679694) ("TRUE" . 679698) ("WORDS" . 679701) ("XSIZE" . 679703) ("YSIZE" . 679705)) ("graphkeyw2.html" ("CHANNEL" . 315931) ("DATA" . 315961) ("DEVICE" . 315977) ("NORMAL" . 315963) ("T3D" . 315956) ("Z" . 332658)))
+    ("TVCRS" pro nil (system) "%s [, ON_OFF] or %s [, X, Y]" ("T32.html" ("CENTIMETERS" . 679732) ("HIDE_CURSOR" . 817846) ("INCHES" . 817861)) ("graphkeyw2.html" ("DATA" . 315961) ("DEVICE" . 315977) ("NORMAL" . 315963) ("T3D" . 315956) ("Z" . 332658)))
+    ("TVLCT" pro nil (system) "%s, V1, V2, V3 [, Start]" ("T33.html" ("GET" . 844142) ("HLS" . 679761) ("HSV" . 679763)))
+    ("TVSCL" pro nil (system) "%s, Image [, Position] or %s, Image [, X, Y [, Channel]]" ("T35.html" ("CENTIMETERS") ("INCHES") ("NAN" . 902069) ("ORDER") ("TOP" . 218988) ("TRUE") ("WORDS") ("XSIZE") ("YSIZE")) ("T31.html" ("CENTIMETERS" . 679682) ("INCHES" . 679690) ("ORDER" . 679694) ("TRUE" . 679698) ("WORDS" . 679701) ("XSIZE" . 679703) ("YSIZE" . 679705)) ("graphkeyw2.html" ("CHANNEL" . 315931) ("DATA" . 315961) ("DEVICE" . 315977) ("NORMAL" . 315963) ("T3D" . 315956) ("Z" . 332658)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("USERSYM" pro nil (system) "%s, X [, Y]" ("U12.html" ("COLOR" . 886945) ("FILL" . 886948) ("THICK" . 886951)))
+    ("VECTOR_FIELD" pro nil (system) "%s, Field, Outverts, Outconn" ("V3.html" ("ANISOTROPY" . 957083) ("SCALE" . 957085) ("VERTICES" . 957087)))
+    ("VEL" pro nil (system) "%s, U, V" ("V4.html" ("LENGTH" . 956021) ("NSTEPS" . 956033) ("NVECS" . 787550) ("TITLE" . 956041) ("XMAX" . 787553)))
+    ("VELOVECT" pro nil (system) "%s, U, V [, X, Y]" ("V5.html" ("COLOR" . 787592) ("DOTS" . 787595) ("LENGTH" . 787598) ("MISSING" . 787601) ("OVERPLOT" . 957555)) ("P6.html" ("ISOTROPIC" . 948898) ("MAX_VALUE" . 678098) ("MIN_VALUE" . 47057) ("NSUM" . 678100) ("POLAR" . 678103) ("THICK" . 678106) ("XLOG" . 810411) ("YLOG" . 810463) ("YNOZERO" . 810415)))
+    ("VORONOI" pro nil (system) "%s, X, Y, I0, C, Xp, Yp, Rect" ("V8.html"))
+    ("WAIT" pro nil (system) "%s, Seconds" ("W.html"))
+    ("WDELETE" pro nil (system) "%s [, Window_Index [, ...]]" ("W5.html"))
+    ("WF_DRAW" pro nil (system) "%s, X, Y" ("W6.html" ("COLD" . 787681) ("COLOR" . 787684) ("CONVERGENCE" . 787687) ("DATA" . 787690) ("DEVICE" . 787693) ("FRONT_TYPE" . 787696) ("INTERVAL" . 787699) ("NORMAL" . 787702) ("OCCLUDED" . 787705) ("PSYM" . 787708) ("STATIONARY" . 787714) ("SYM_HT" . 787717) ("SYM_LEN" . 787720) ("THICK" . 787723) ("WARM" . 787726)))
+    ("WIDGET_CONTROL" pro nil (system) "%s [, Widget_ID]" ("W13.html" ("ALIGNMENT" . 894840) ("ALL_TABLE_EVENTS" . 894849) ("ALL_TEXT_EVENTS" . 680079) ("AM_PM" . 949789) ("APPEND" . 886776) ("BAD_ID" . 680083) ("BASE_SET_TITLE" . 977104) ("BITMAP" . 1077396) ("CANCEL_BUTTON" . 910691) ("CLEAR_EVENTS" . 978647) ("COLUMN_LABELS" . 894928) ("COLUMN_WIDTHS" . 894930) ("COMBOBOX_ADDITEM" . 981369) ("COMBOBOX_DELETEITEM" . 981434) ("COMBOBOX_INDEX" . 981376) ("CONTEXT_EVENTS" . 949802) ("DAYS_OF_WEEK" . 970733) ("DEFAULT_BUTTON" . 909921) ("DEFAULT_FONT" . 680087) ("DELAY_DESTROY" . 680090) ("DELETE_COLUMNS" . 894963) ("DELETE_ROWS" . 919067) ("DESTROY" . 680094) ("DRAW_BUTTON_EVENTS" . 680097) ("DRAW_EXPOSE_EVENTS" . 907371) ("DRAW_KEYBOARD_EVENTS" . 985153) ("DRAW_MOTION_EVENTS" . 680099) ("DRAW_VIEWPORT_EVENTS" . 680101) ("DRAW_XSIZE" . 58243) ("DRAW_YSIZE" . 58244) ("DYNAMIC_RESIZE" . 192830) ("EDIT_CELL" . 895011) ("EDITABLE" . 889314) ("EVENT_FUNC" . 895036) ("EVENT_PRO" . 680108) ("FORMAT" . 895067) ("FUNC_GET_VALUE" . 680113) ("GET_DRAW_VIEW" . 680115) ("GET_UVALUE" . 680117) ("GET_VALUE" . 680122) ("GROUP_LEADER" . 933268) ("HOURGLASS" . 680134) ("ICONIFY" . 680136) ("INPUT_FOCUS" . 680138) ("INSERT_COLUMNS" . 895129) ("INSERT_ROWS" . 895131) ("KBRD_FOCUS_EVENTS" . 919052) ("KILL_NOTIFY" . 680140) ("MANAGED" . 680144) ("MAP" . 680146) ("MONTHS" . 949815) ("MULTIPLE_PROPERTIES" . 1100768) ("NO_COPY" . 680150) ("NO_NEWLINE" . 680152) ("NOTIFY_REALIZE" . 67586) ("PRO_SET_VALUE" . 680154) ("PROPERTYSHEET_SETSELECTED" . 1070765) ("PUSHBUTTON_EVENTS" . 1020091) ("REALIZE" . 680156) ("REFRESH_PROPERTY" . 1018381) ("RESET" . 1018400) ("ROW_HEIGHTS" . 895150) ("ROW_LABELS" . 895148) ("SCR_XSIZE" . 58190) ("SCR_YSIZE" . 58191) ("SEND_EVENT" . 58210) ("SENSITIVE" . 680164) ("SET_BUTTON" . 680167) ("SET_COMBOBOX_SELECT" . 981513) ("SET_DRAW_VIEW" . 680169) ("SET_DROPLIST_SELECT" . 680172) ("SET_LIST_SELECT" . 58235) ("SET_LIST_TOP" . 680175) ("SET_SLIDER_MAX" . 680177) ("SET_SLIDER_MIN" . 680179) ("SET_TAB_CURRENT" . 977118) ("SET_TAB_MULTILINE" . 977124) ("SET_TABLE_SELECT" . 895216) ("SET_TABLE_VIEW" . 895208) ("SET_TEXT_SELECT" . 680181) ("SET_TEXT_TOP_LINE" . 680185) ("SET_TREE_BITMAP" . 978535) ("SET_TREE_EXPANDED" . 978542) ("SET_TREE_SELECT" . 978548) ("SET_TREE_VISIBLE" . 978561) ("SET_UNAME" . 1095671) ("SET_UVALUE" . 949285) ("SET_VALUE" . 680190) ("SHOW" . 680199) ("TAB_MODE" . 1069607) ("TABLE_BLANK" . 1069681) ("TABLE_DISJOINT_SELECTION" . 987414) ("TABLE_XSIZE" . 895238) ("TABLE_YSIZE" . 895244) ("TIMER" . 680201) ("TLB_GET_OFFSET" . 680204) ("TLB_GET_SIZE" . 680206) ("TLB_ICONIFY_EVENTS" . 984722) ("TLB_KILL_REQUEST_EVENTS" . 192837) ("TLB_MOVE_EVENTS" . 984735) ("TLB_SET_TITLE" . 680208) ("TLB_SET_XOFFSET" . 680210) ("TLB_SET_YOFFSET" . 680212) ("TLB_SIZE_EVENTS" . 984752) ("TOOLTIP" . 982093) ("TRACKING_EVENTS" . 58183) ("UNITS" . 895316) ("UPDATE" . 680214) ("USE_TABLE_SELECT" . 934621) ("USE_TEXT_SELECT" . 192856) ("X_BITMAP_EXTRA" . 680216) ("XOFFSET" . 58269) ("XSIZE" . 58220) ("YOFFSET" . 58279) ("YSIZE" . 58221)))
+    ("WIDGET_DISPLAYCONTEXTMENU" pro nil (system) "%s, Parent, X, Y, ContextBase_ID" ("W14.html"))
+    ("WINDOW" pro nil (system) "%s [, Window_Index]" ("W27.html" ("COLORS" . 896410) ("FREE" . 680620) ("PIXMAP" . 680622) ("RETAIN" . 680624) ("TITLE" . 680625) ("XPOS" . 680628) ("XSIZE" . 680635) ("YPOS" . 680633) ("YSIZE" . 680637)))
+    ("WRITE_BMP" pro nil (system) "%s, Filename, Image[, R, G, B]" ("W28.html" ("FOUR_BIT" . 756441) ("HEADER_DEFINE" . 756447) ("IHDR" . 756444) ("RGB" . 964751)))
+    ("WRITE_GIF" pro nil (system) "%s, Filename, Image[, R, G, B]" ("W29.html" ("CLOSE" . 1068115) ("MULTIPLE" . 1068121)))
+    ("WRITE_IMAGE" pro nil (system) "%s, Filename, Format, Data [, Red, Green, Blue]" ("W30.html" ("APPEND" . 961233)))
+    ("WRITE_JPEG" pro nil (system) "%s [, Filename] , Image" ("W31.html" ("ORDER" . 279735) ("PROGRESSIVE" . 912025) ("QUALITY" . 279736) ("TRUE" . 279737) ("UNIT" . 896438)))
+    ("WRITE_JPEG2000" pro nil (system) "%s, Filename, Image [, Red, Green, Blue]" ("W32.html" ("N_LAYERS" . 1112356) ("N_LEVELS" . 1112359) ("ORDER" . 1112362) ("REVERSIBLE" . 1112365)))
+    ("WRITE_NRIF" pro nil (system) "%s, File, Image [, R, G, B]" ("W33.html"))
+    ("WRITE_PICT" pro nil (system) "%s, Filename [, Image, R, G, B]" ("W34.html"))
+    ("WRITE_PNG" pro nil (system) "%s, Filename, Image[, R, G, B]" ("W35.html" ("ORDER" . 950656) ("TRANSPARENT" . 950659) ("VERBOSE" . 964556)))
+    ("WRITE_PPM" pro nil (system) "%s, Filename, Image" ("W36.html" ("ASCII" . 67923)))
+    ("WRITE_SPR" pro nil (system) "%s, AS, Filename" ("W37.html"))
+    ("WRITE_SRF" pro nil (system) "%s, Filename [, Image, R, G, B]" ("W38.html" ("ORDER" . 756556) ("WRITE_32" . 756559)))
+    ("WRITE_TIFF" pro nil (system) "%s, Filename [, Image]" ("W40.html" ("APPEND" . 945440) ("BITS_PER_SAMPLE" . 945448) ("BLUE" . 960346) ("CMYK" . 1049851) ("COMPRESSION" . 972526) ("DESCRIPTION" . 1049872) ("DOCUMENT_NAME" . 1049881) ("DOT_RANGE" . 1049890) ("FLOAT" . 945539) ("GEOTIFF" . 945456) ("GREEN" . 960346) ("ICC_PROFILE" . 1049899) ("LONG" . 945853) ("ORIENTATION" . 972561) ("PHOTOSHOP" . 1049908) ("PLANARCONFIG" . 896473) ("RED" . 960346) ("SHORT" . 945559) ("UNITS" . 960431) ("VERBOSE" . 972627) ("XPOSITION" . 1063829) ("XRESOL" . 896478) ("YPOSITION" . 1063850) ("YRESOL" . 917320)))
+    ("WRITE_WAV" pro nil (system) "%s, Filename, Data, Rate" ("W41.html"))
+    ("WRITE_WAVE" pro nil (system) "%s, File, Array" ("W42.html" ("BIN" . 756580) ("DATANAME" . 756583) ("MESHNAME" . 756586) ("NOMESHDEF" . 756589) ("VECTOR" . 756592)))
+    ("WRITEU" pro nil (system) "%s, Unit, Expr1 ..., Exprn" ("W43.html" ("TRANSFER_COUNT" . 680669)))
+    ("WSET" pro nil (system) "%s [, Window_Index]" ("W44.html"))
+    ("WSHOW" pro nil (system) "%s [, Window_Index [, Show]]" ("W45.html" ("ICONIC" . 680709)))
+    ("WV_APPLET" pro nil (system) "%s [, Input]" ("ref4.html" ("ARRAY" . 1004583) ("GROUP_LEADER" . 1004841) ("NO_SPLASH" . 1004848) ("TOOLS" . 1004856) ("WAVELETS" . 1005269)))
+    ("WV_IMPORT_DATA" pro nil (system) "%s, Data" ("ref16.html" ("MESSAGE_OUT" . 1006957) ("PARENT" . 1008033)))
+    ("WV_IMPORT_WAVELET" pro nil (system) "%s [, Wavelet]" ("ref17.html" ("RESET" . 1007019)))
+    ("XBM_EDIT" pro nil (system) "%s" ("X.html" ("BLOCK" . 937479) ("FILENAME" . 762711) ("GROUP" . 762714) ("XSIZE" . 762717) ("YSIZE" . 762720)))
+    ("XDISPLAYFILE" pro nil (system) "%s, Filename" ("X2.html" ("BLOCK" . 937490) ("DONE_BUTTON" . 960338) ("EDITABLE" . 960341) ("FONT" . 960336) ("GROUP" . 762749) ("HEIGHT" . 762752) ("MODAL" . 933305) ("TEXT" . 762755) ("TITLE" . 762758) ("WIDTH" . 762761) ("WTEXT" . 960359)))
+    ("XDXF" pro nil (system) "%s [, Filename]" ("X3.html" ("BLOCK" . 976345) ("GROUP" . 976354) ("SCALE" . 976358) ("TEST" . 976360)))
+    ("XINTERANIMATE" pro nil (system) "%s [, Rate]" ("X5.html" ("BLOCK" . 964691) ("CLOSE" . 894369) ("CYCLE" . 894339) ("FRAME" . 894353) ("GROUP" . 964285) ("IMAGE" . 894356) ("KEEP_PIXMAPS" . 894375) ("MODAL" . 964292) ("MPEG_BITRATE" . 964699) ("MPEG_CLOSE" . 941497) ("MPEG_FILENAME" . 934000) ("MPEG_IFRAME_GAP" . 964723) ("MPEG_MOTION_VEC_LENGTH" . 964730) ("MPEG_OPEN" . 934051) ("MPEG_QUALITY" . 964762) ("ORDER" . 894359) ("SET" . 894336) ("SHOWLOAD" . 894342) ("TITLE" . 894348) ("TRACK" . 894345) ("WINDOW" . 894362) ("XOFFSET" . 894378) ("YOFFSET" . 894381)))
+    ("XLOADCT" pro nil (system) "%s" ("X6.html" ("BLOCK" . 937520) ("BOTTOM" . 937526) ("FILE" . 937512) ("GROUP" . 959363) ("MODAL" . 930516) ("NCOLORS" . 930518) ("SILENT" . 761913) ("UPDATECALLBACK" . 950093) ("UPDATECBDATA" . 950095) ("USE_CURRENT" . 761916)))
+    ("XMANAGER" pro nil (system) "%s [, Name, ID]" ("X7.html" ("CATCH" . 919187) ("CLEANUP" . 762794) ("EVENT_HANDLER" . 762797) ("GROUP_LEADER" . 762800) ("JUST_REG" . 762804) ("NO_BLOCK" . 921241)))
+    ("XMNG_TMPL" pro nil (system) "%s" ("X8.html" ("BLOCK" . 937533) ("GROUP" . 762854)))
+    ("XMTOOL" pro nil (system) "%s" ("X9.html" ("BLOCK" . 937544) ("GROUP" . 762874)))
+    ("XOBJVIEW" pro nil (system) "%s, Obj" ("X10.html" ("BACKGROUND" . 956927) ("BLOCK" . 964889) ("DOUBLE_VIEW" . 956930) ("GROUP" . 960389) ("JUST_REG" . 959168) ("MODAL" . 988927) ("REFRESH" . 959524) ("RENDERER" . 980622) ("SCALE" . 969430) ("STATIONARY" . 959520) ("TEST" . 959458) ("TITLE" . 959454) ("TLB" . 1013972) ("XOFFSET" . 959432) ("XSIZE" . 1000024) ("YOFFSET" . 973883) ("YSIZE" . 1000026)))
+    ("XOBJVIEW_ROTATE" pro nil (system) "%s, Axis, Angle" ("X11.html" ("PREMULTIPLY" . 984371)))
+    ("XOBJVIEW_WRITE_IMAGE" pro nil (system) "%s, Filename, Format" ("X12.html" ("DIMENSIONS" . 984402)))
+    ("XPALETTE" pro nil (system) "%s" ("X13.html" ("BLOCK" . 937555) ("GROUP" . 761941) ("UPDATECALLBACK" . 949914) ("UPDATECBDATA" . 949916)))
+    ("XPCOLOR" pro nil (system) "%s" ("X14.html" ("GROUP" . 976510)))
+    ("XPLOT3D" pro nil (system) "%s, X, Y, Z" ("X15.html" ("BLOCK" . 976543) ("COLOR" . 976552) ("DOUBLE_VIEW" . 976554) ("GROUP" . 976556) ("LINESTYLE" . 976558) ("MODAL" . 976571) ("NAME" . 976577) ("OVERPLOT" . 976579) ("SYMBOL" . 976581) ("TEST" . 976583) ("THICK" . 976585) ("TITLE" . 976587) ("XRANGE" . 976589) ("XTITLE" . 1014240) ("YRANGE" . 976591) ("YTITLE" . 1014248) ("ZRANGE" . 976593) ("ZTITLE" . 976599)))
+    ("XROI" pro nil (system) "%s [, ImageData] [, R] [, G] [, B]" ("X17.html" ("BLOCK" . 984509) ("FLOATING" . 984515) ("GROUP" . 984518) ("MODAL" . 984520) ("REGIONS_IN" . 984522) ("REGIONS_OUT" . 984530) ("REJECTED" . 984535) ("RENDERER" . 984540) ("ROI_COLOR" . 984544) ("ROI_GEOMETRY" . 984546) ("ROI_SELECT_COLOR" . 984572) ("STATISTICS" . 984574) ("TITLE" . 984608) ("TOOLS" . 984610) ("X_SCROLL_SIZE" . 999474) ("Y_SCROLL_SIZE" . 999479)))
+    ("XSURFACE" pro nil (system) "%s, Data" ("X19.html" ("BLOCK" . 937566) ("GROUP" . 787853)))
+    ("XVAREDIT" pro nil (system) "%s, Var" ("X20.html" ("GROUP" . 759115) ("NAME" . 917618) ("X_SCROLL_SIZE" . 917623) ("Y_SCROLL_SIZE" . 917633)))
+    ("XVOLUME" pro nil (system) "%s, Vol" ("X21.html" ("BLOCK" . 977093) ("GROUP" . 977102) ("INTERPOLATE" . 977104) ("MODAL" . 977106) ("RENDERER" . 977112) ("REPLACE" . 977116) ("SCALE" . 977121) ("TEST" . 977123) ("XSIZE" . 977128) ("YSIZE" . 977130)))
+    ("XVOLUME_ROTATE" pro nil (system) "%s, Axis, Angle" ("X22.html" ("PREMULTIPLY" . 977322)))
+    ("XVOLUME_WRITE_IMAGE" pro nil (system) "%s, Filename, Format" ("X23.html" ("DIMENSIONS" . 977402)))
+    ("XYOUTS" pro nil (system) "%s, [X, Y,] String" ("X24.html" ("ALIGNMENT" . 680731) ("CHARSIZE" . 680733) ("CHARTHICK" . 680735) ("TEXT_AXES" . 680737) ("WIDTH" . 680739)) ("graphkeyw2.html" ("CLIP" . 315949) ("COLOR" . 315952) ("DATA" . 315961) ("DEVICE" . 315977) ("FONT" . 331795) ("NOCLIP" . 323508) ("NORMAL" . 315963) ("ORIENTATION" . 315964) ("T3D" . 315956) ("Z" . 332658)))
+    ("ZOOM" pro nil (system) "%s" ("Z.html" ("CONTINUOUS" . 787879) ("FACT" . 787882) ("INTERP" . 787885) ("KEEP" . 787888) ("NEW_WINDOW" . 787891) ("XSIZE" . 787894) ("YSIZE" . 787897) ("ZOOM_WINDOW" . 787900)))
+    ("ZOOM_24" pro nil (system) "%s" ("Z2.html" ("FACT" . 787920) ("RIGHT" . 787923) ("XSIZE" . 787926) ("YSIZE" . 787929)))
+    ("A_CORRELATE" fun nil (system) "Result = %s(X, Lag)" ("A2.html" ("COVARIANCE" . 54405) ("DOUBLE" . 826748)))
+    ("ABS" fun nil (system) "Result = %s(X)" ("A3.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ACOS" fun nil (system) "Result = %s(X)" ("A4.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ADAPT_HIST_EQUAL" fun nil (system) "Result = %s (Image)" ("A5.html" ("CLIP" . 985045) ("FCN" . 987804) ("NREGIONS" . 985047) ("TOP" . 985049)))
+    ("ALOG" fun nil (system) "Result = %s(X)" ("A6.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ALOG10" fun nil (system) "Result = %s(X)" ("A7.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("AMOEBA" fun nil (system) "Result = %s( Ftol)" ("A8.html" ("FUNCTION_NAME" . 864079) ("FUNCTION_VALUE" . 864085) ("NCALLS" . 864089) ("NMAX" . 864091) ("P0" . 864094) ("SCALE" . 864103) ("SIMPLEX" . 864424)))
+    ("APP_USER_DIR" fun nil (system) "Result = %s(AuthorDirname, AuthorDesc, AppDirname, AppDesc, AppReadmeText, AppReadmeVersion)" ("A10.html" ("AUTHOR_README_TEXT" . 1011596) ("AUTHOR_README_VERSION" . 1011600) ("RESTRICT_APPVERSION" . 1011616) ("RESTRICT_ARCH" . 1011619) ("RESTRICT_FAMILY" . 1011624) ("RESTRICT_FILE_OFFSET_BITS" . 1011630) ("RESTRICT_IDL_RELEASE" . 1011635) ("RESTRICT_MEMORY_BITS" . 1011640) ("RESTRICT_OS" . 1011645)))
+    ("APP_USER_DIR_QUERY" fun nil (system) "Result = %s(AuthorDirname, AppDirname)" ("A11.html" ("COUNT" . 1011749) ("EXCLUDE_CURRENT" . 1011751) ("QUERY_APPVERSION" . 1011762) ("QUERY_ARCH" . 1011764) ("QUERY_FAMILY" . 1011766) ("QUERY_FILE_OFFSET_BITS" . 1011768) ("QUERY_IDL_RELEASE" . 1011770) ("QUERY_MEMORY_BITS" . 1011772) ("QUERY_OS" . 1011774)))
+    ("ARG_PRESENT" fun nil (system) "Result = %s(Variable)" ("A12.html"))
+    ("ARRAY_EQUAL" fun nil (system) "Result = %s( Op1 , Op2)" ("A13.html" ("NO_TYPECONV" . 987069)))
+    ("ARRAY_INDICES" fun nil (system) "Result = %s(Array, Index)" ("A14.html"))
+    ("ASCII_TEMPLATE" fun nil (system) "Result = %s( [Filename])" ("A16.html" ("BROWSE_LINES" . 871007) ("CANCEL" . 871139) ("GROUP" . 884032)))
+    ("ASIN" fun nil (system) "Result = %s(X)" ("A17.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ASSOC" fun nil (system) "Result = %s( Unit, Array_Structure [, Offset])" ("A18.html" ("PACKED" . 906241)))
+    ("ATAN" fun nil (system) "Result = %s([Y,] X)" ("A19.html" ("PHASE" . 995606)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("BESELI" fun nil (system) "Result = %s(X, N)" ("B3.html" ("DOUBLE" . 998579) ("ITER" . 998584)))
+    ("BESELJ" fun nil (system) "Result = %s(X, N)" ("B4.html" ("DOUBLE" . 998704) ("ITER" . 998706)))
+    ("BESELK" fun nil (system) "Result = %s( X, N)" ("B5.html" ("DOUBLE" . 998712) ("ITER" . 998714)))
+    ("BESELY" fun nil (system) "Result = %s(X, N)" ("B6.html" ("DOUBLE" . 998720) ("ITER" . 998722)))
+    ("BETA" fun nil (system) "Result = %s( Z, W)" ("B7.html" ("DOUBLE" . 50234)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("BILINEAR" fun nil (system) "Result = %s(P, IX, JY)" ("B8.html" ("MISSING" . 996637)))
+    ("BIN_DATE" fun nil (system) "Result = %s(Ascii_Time)" ("B9.html"))
+    ("BINARY_TEMPLATE" fun nil (system) "Result = %s ( [Filename])" ("B10.html" ("CANCEL" . 985257) ("GROUP" . 985259) ("N_ROWS" . 985261) ("TEMPLATE" . 988405)))
+    ("BINDGEN" fun nil (system) "Result = %s(D1 [, ...,D8])" ("B11.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("BINOMIAL" fun nil (system) "Result = %s(V, N, P)" ("B12.html" ("DOUBLE" . 988094) ("GAUSSIAN" . 988097)))
+    ("BLK_CON" fun nil (system) "Result = %s( Filter, Signal)" ("B14.html" ("B_LENGTH" . 749505) ("DOUBLE" . 987871)))
+    ("BROYDEN" fun nil (system) "Result = %s( X, Vecfunc)" ("B18.html" ("CHECK" . 50283) ("DOUBLE" . 50286) ("EPS" . 50289) ("ITMAX" . 989330) ("STEPMAX" . 50292) ("TOLF" . 50295) ("TOLMIN" . 50298) ("TOLX" . 50301)))
+    ("BYTARR" fun nil (system) "Result = %s( D1[, ..., D8])" ("B19.html" ("NOZERO" . 675878)))
+    ("BYTE" fun nil (system) "Result = %s( Expression[, Offset [, D1[, ..., D8]]] )" ("B20.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("BYTSCL" fun nil (system) "Result = %s( Array)" ("B22.html" ("MAX" . 675964) ("MIN" . 675966) ("NAN" . 47179) ("TOP" . 675968)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("C_CORRELATE" fun nil (system) "Result = %s( X, Y, Lag)" ("C.html" ("COVARIANCE" . 54458) ("DOUBLE" . 826756)))
+    ("CALL_EXTERNAL" fun nil (system) "Result = %s(Image, Entry [, P0, ..., PN-1])" ("C4.html" ("ALL_VALUE" . 905908) ("AUTO_GLUE" . 1025677) ("B_VALUE" . 951311) ("CC" . 1012394) ("CDECL" . 905911) ("COMPILE_DIRECTORY" . 1012398) ("D_VALUE" . 905920) ("EXTRA_CFLAGS" . 1012436) ("EXTRA_LFLAGS" . 1012440) ("F_VALUE" . 905923) ("I_VALUE" . 905926) ("IGNORE_EXISTING_GLUE" . 1012444) ("L64_VALUE" . 951332) ("LD" . 1012449) ("NOCLEANUP" . 1012453) ("RETURN_TYPE" . 1029187) ("S_VALUE" . 951354) ("SHOW_ALL_OUTPUT" . 1012458) ("UI_VALUE" . 951320) ("UL64_VALUE" . 965882) ("UL_VALUE" . 965879) ("UNLOAD" . 993357) ("VALUE" . 905936) ("VERBOSE" . 1012497) ("WRITE_WRAPPER" . 1029198)))
+    ("CALL_FUNCTION" fun nil (system) "Result = %s(Name [, P1, ..., Pn])" ("C5.html"))
+    ("CALL_METHOD" fun nil (system) "Result = %s, Name, ObjRef, [, P1, ..., Pn]" ("C6.html"))
+    ("CDF_ATTCREATE" fun nil (system) "Result = %s( Id, Attribute_Name)" ("CDF-routines8.html" ("GLOBAL_SCOPE" . 996934) ("VARIABLE_SCOPE" . 996937)))
+    ("CDF_ATTEXISTS" fun nil (system) "Result = %s( Id, Attribute [, EntryNum])" ("CDF-routines10.html" ("ZVARIABLE" . 1002462)))
+    ("CDF_ATTNUM" fun nil (system) "Result = %s(Id, Attribute_Name)" ("CDF-routines13.html"))
+    ("CDF_CREATE" fun nil (system) "Result = %s( Filename, [Dimensions])" ("CDF-routines19.html" ("ALPHAOSF1_DECODING" . 1017799) ("ALPHAOSF1_ENCODING" . 997337) ("ALPHAVMSD_DECODING" . 1017802) ("ALPHAVMSD_ENCODING" . 997340) ("ALPHAVMSG_DECODING" . 1017805) ("ALPHAVMSG_ENCODING" . 997343) ("CLOBBER" . 1017643) ("COL_MAJOR" . 1017646) ("DECSTATION_DECODING" . 1017808) ("DECSTATION_ENCODING" . 1017778) ("HOST_DECODING" . 1017811) ("HOST_ENCODING" . 997349) ("HP_DECODING" . 1017814) ("HP_ENCODING" . 997352) ("IBMPC_DECODING" . 1017817) ("IBMPC_ENCODING" . 1017767) ("IBMRS_DECODING" . 1017820) ("IBMRS_ENCODING" . 997355) ("MAC_DECODING" . 1017823) ("MAC_ENCODING" . 997367) ("MULTI_FILE" . 1017715) ("NETWORK_DECODING" . 1017826) ("NETWORK_ENCODING" . 997378) ("NEXT_DECODING" . 1017829) ("NEXT_ENCODING" . 997381) ("ROW_MAJOR" . 1017746) ("SGI_DECODING" . 1017832) ("SGI_ENCODING" . 1017789) ("SINGLE_FILE" . 1017749) ("SUN_DECODING" . 1017835) ("SUN_ENCODING" . 997390)))
+    ("CDF_ENCODE_EPOCH" fun nil (system) "Result = %s(Epoch)" ("CDF-routines22.html" ("EPOCH" . 997448)))
+    ("CDF_ERROR" fun nil (system) "Result = %s(Status)" ("CDF-routines24.html"))
+    ("CDF_EXISTS" fun nil (system) "Result = %s( )" ("CDF-routines25.html"))
+    ("CDF_INQUIRE" fun nil (system) "Result = %s(Id)" ("CDF-routines26.html"))
+    ("CDF_OPEN" fun nil (system) "Result = %s(Filename)" ("CDF-routines28.html"))
+    ("CDF_PARSE_EPOCH" fun nil (system) "Result = %s(Epoch_string)" ("CDF-routines29.html"))
+    ("CDF_VARCREATE" fun nil (system) "Result = %s( Id, Name [, DimVary])" ("CDF-routines30.html" ("ALLOCATERECS" . 997736) ("DIMENSIONS" . 997739) ("NUMELEM" . 997744) ("REC_NOVARY" . 997747) ("REC_VARY" . 997750) ("VARIABLETYPE" . 1027601) ("ZVARIABLE" . 997753)))
+    ("CDF_VARINQ" fun nil (system) "Result = %s( Id, Variable)" ("CDF-routines34.html" ("ZVARIABLE" . 997944)))
+    ("CDF_VARNUM" fun nil (system) "Result = %s( Id, VarName [, IsZVar] )" ("CDF-routines35.html"))
+    ("CEIL" fun nil (system) "Result = %s(X)" ("C12.html" ("L64" . 1015251)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("CHEBYSHEV" fun nil (system) "Result = %s(D, N)" ("C13.html"))
+    ("CHECK_MATH" fun nil (system) "Result = %s()" ("C14.html" ("MASK" . 993110) ("NOCLEAR" . 993190) ("PRINT" . 993188)))
+    ("CHISQR_CVF" fun nil (system) "Result = %s(P, Df)" ("C15.html"))
+    ("CHISQR_PDF" fun nil (system) "Result = %s(V, Df)" ("C16.html"))
+    ("CHOLSOL" fun nil (system) "Result = %s( A, P, B)" ("C18.html" ("DOUBLE" . 50387)))
+    ("CINDGEN" fun nil (system) "Result = %s(D1[, ..., D8])" ("C19.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("CLUST_WTS" fun nil (system) "Result = %s( Array)" ("C22.html" ("DOUBLE" . 862498) ("N_CLUSTERS" . 862487) ("N_ITERATIONS" . 862488) ("VARIABLE_WTS" . 862545)))
+    ("CLUSTER" fun nil (system) "Result = %s( Array, Weights)" ("C23.html" ("DOUBLE" . 862580) ("N_CLUSTERS" . 862583)))
+    ("CLUSTER_TREE" fun nil (system) "Result = %s( Pairdistance, Linkdistance)" ("C24.html" ("DATA" . 1196682) ("LINKAGE" . 1196686) ("MEASURE" . 1196715) ("POWER_MEASURE" . 1196749)))
+    ("COLOR_QUAN" fun nil (system) "Result = %s( Image_R, Image_G, Image_B, R, G, B) or Result = %s( Image, Dim, R, G, B )" ("C26.html" ("COLORS" . 676177) ("CUBE" . 676179) ("DITHER" . 676181) ("ERROR" . 676183) ("GET_TRANSLATION" . 676185) ("MAP_ALL" . 676187) ("TRANSLATION" . 676189)))
+    ("COLORMAP_APPLICABLE" fun nil (system) "Result = %s( redrawRequired )" ("C27.html"))
+    ("COMFIT" fun nil (system) "Result = %s( X, Y, A)" ("C28.html" ("EXPONENTIAL" . 53208) ("GEOMETRIC" . 838932) ("GOMPERTZ" . 838937) ("HYPERBOLIC" . 838944) ("LOGISTIC" . 838961) ("LOGSQUARE" . 838970) ("SIGMA" . 838980) ("WEIGHTS" . 53265) ("YFIT" . 53268)))
+    ("COMPLEX" fun nil (system) "Result = %s( Real [, Imaginary])" ("C31.html" ("DOUBLE" . 1041956)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("COMPLEXARR" fun nil (system) "Result = %s( D1[, ..., D8])" ("C32.html" ("NOZERO" . 676236)))
+    ("COMPLEXROUND" fun nil (system) "Result = %s(Input)" ("C33.html"))
+    ("COMPUTE_MESH_NORMALS" fun nil (system) "Result = %s( fVerts[, iConn] )" ("C34.html"))
+    ("COND" fun nil (system) "Result = %s( A)" ("C35.html" ("DOUBLE" . 749542) ("LNORM" . 1042001)))
+    ("CONGRID" fun nil (system) "Result = %s( Array, X, Y, Z)" ("C36.html" ("CENTER" . 757848) ("CUBIC" . 1042041) ("INTERP" . 757851) ("MINUS_ONE" . 757854)))
+    ("CONJ" fun nil (system) "Result = %s(X)" ("C37.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("CONVERT_COORD" fun nil (system) "Result = %s( X [, Y [, Z]])" ("C41.html" ("DATA" . 676377) ("DEVICE" . 676379) ("DOUBLE" . 1015017) ("NORMAL" . 676381) ("T3D" . 676383) ("TO_DATA" . 676385) ("TO_DEVICE" . 676387) ("TO_NORMAL" . 676389)))
+    ("CONVOL" fun nil (system) "Result = %s( Array, Kernel [, Scale_Factor])" ("C42.html" ("CENTER" . 676409) ("EDGE_TRUNCATE" . 746326) ("EDGE_WRAP" . 228821) ("MISSING" . 1028668) ("NAN" . 1028683)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("COORD2TO3" fun nil (system) "Result = %s( Mx, My, Dim, D0 [, PTI] )" ("C43.html"))
+    ("CORRELATE" fun nil (system) "Result = %s( X [, Y])" ("C45.html" ("COVARIANCE" . 53307) ("DOUBLE" . 868819)))
+    ("COS" fun nil (system) "Result = %s(X)" ("C46.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("COSH" fun nil (system) "Result = %s(X)" ("C47.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("CRAMER" fun nil (system) "Result = %s( A, B)" ("C49.html" ("DOUBLE" . 749607) ("ZERO" . 749609)))
+    ("CREATE_CURSOR" fun nil (system) "Result = %s( StringArray)" ("C50.html" ("HOTSPOT" . 1192516) ("MASK" . 1222423)))
+    ("CREATE_STRUCT" fun nil (system) "Result = %s( [Tag1, Values1, ..., Tagn, Valuesn] [, Structuresn])" ("C51.html" ("NAME" . 279439)))
+    ("CROSSP" fun nil (system) "Result = %s(V1, V2)" ("C53.html"))
+    ("CRVLENGTH" fun nil (system) "Result = %s( X, Y)" ("C54.html" ("DOUBLE" . 862840)))
+    ("CT_LUMINANCE" fun nil (system) "Result = %s( [R, G, B])" ("C55.html" ("BRIGHT" . 759145) ("DARK" . 759148) ("READ_TABLES" . 759151)))
+    ("CTI_TEST" fun nil (system) "Result = %s( Obfreq)" ("C56.html" ("COEFF" . 53357) ("CORRECTED" . 53360) ("CRAMV" . 53363) ("DF" . 53366) ("EXFREQ" . 53369) ("RESIDUAL" . 53372)))
+    ("CURVEFIT" fun nil (system) "Result = %s( X, Y, Weights, A [, Sigma])" ("C58.html" ("CHISQ" . 1024958) ("DOUBLE" . 1024093) ("FITA" . 148399) ("FUNCTION_NAME" . 1118305) ("ITER" . 150209) ("ITMAX" . 150211) ("NODERIVATIVE" . 150222) ("STATUS" . 1107869) ("TOL" . 1108021) ("YERROR" . 1053331)))
+    ("CV_COORD" fun nil (system) "Result = %s()" ("C59.html" ("DEGREES" . 756965) ("DOUBLE" . 1025482) ("FROM_CYLIN" . 756968) ("FROM_POLAR" . 756971) ("FROM_RECT" . 756974) ("FROM_SPHERE" . 756977) ("TO_CYLIN" . 1109055) ("TO_POLAR" . 756983) ("TO_RECT" . 756986) ("TO_SPHERE" . 756989)))
+    ("CVTTOBM" fun nil (system) "Result = %s( Array)" ("C60.html" ("THRESHOLD" . 871509)))
+    ("CW_ANIMATE" fun nil (system) "Result = %s( Parent, Sizex, Sizey, Nframes)" ("C61.html" ("NO_KILL" . 853861) ("OPEN_FUNC" . 853864) ("PIXMAPS" . 853868) ("TAB_MODE" . 1189372) ("TRACK" . 853871) ("UNAME" . 996617) ("UVALUE" . 853874)))
+    ("CW_ARCBALL" fun nil (system) "Result = %s( Parent)" ("C65.html" ("COLORS" . 755064) ("FRAME" . 755074) ("LABEL" . 755077) ("RETAIN" . 755080) ("SIZE" . 755108) ("TAB_MODE" . 1189488) ("UNAME" . 996624) ("UPDATE" . 1189483) ("UVALUE" . 755114) ("VALUE" . 755117)))
+    ("CW_BGROUP" fun nil (system) "Result = %s( Parent, Names)" ("C66.html" ("BUTTON_UVALUE" . 755175) ("COLUMN" . 755178) ("EVENT_FUNC" . 755181) ("EXCLUSIVE" . 755184) ("FONT" . 755187) ("FRAME" . 755190) ("IDS" . 755193) ("LABEL_LEFT" . 755196) ("LABEL_TOP" . 755199) ("MAP" . 755202) ("NO_RELEASE" . 755208) ("NONEXCLUSIVE" . 755205) ("RETURN_ID" . 755211) ("RETURN_INDEX" . 755214) ("RETURN_NAME" . 755217) ("ROW" . 755220) ("SCROLL" . 755223) ("SET_VALUE" . 755226) ("SPACE" . 755230) ("TAB_MODE" . 1189560) ("UNAME" . 996707) ("UVALUE" . 755233) ("X_SCROLL_SIZE" . 755245) ("XOFFSET" . 755236) ("XPAD" . 755239) ("XSIZE" . 755242) ("Y_SCROLL_SIZE" . 755257) ("YOFFSET" . 755248) ("YPAD" . 755251) ("YSIZE" . 755254)))
+    ("CW_CLR_INDEX" fun nil (system) "Result = %s( Parent)" ("C67.html" ("COLOR_VALUES" . 854099) ("EVENT_FUNC" . 854102) ("FRAME" . 854105) ("LABEL" . 854108) ("NCOLORS" . 854111) ("START_COLOR" . 854114) ("TAB_MODE" . 1189650) ("UNAME" . 996631) ("UVALUE" . 854117) ("VALUE" . 854120) ("XSIZE" . 1025090) ("YSIZE" . 854123)))
+    ("CW_COLORSEL" fun nil (system) "Result = %s( Parent)" ("C68.html" ("FRAME" . 854194) ("TAB_MODE" . 1189739) ("UNAME" . 996638) ("UVALUE" . 1233223) ("XOFFSET" . 854200) ("YOFFSET" . 854203)))
+    ("CW_DEFROI" fun nil (system) "Result = %s( Draw)" ("C69.html" ("IMAGE_SIZE" . 755439) ("OFFSET" . 755442) ("ORDER" . 755445) ("RESTORE" . 755448) ("TAB_MODE" . 1189809) ("ZOOM" . 755451)))
+    ("CW_FIELD" fun nil (system) "Result = %s( Parent)" ("C70.html" ("ALL_EVENTS" . 755508) ("COLUMN" . 755511) ("FIELDFONT" . 755514) ("FLOATING" . 755517) ("FONT" . 755520) ("FRAME" . 755523) ("INTEGER" . 755526) ("LONG" . 755529) ("NOEDIT" . 755532) ("RETURN_EVENTS" . 755535) ("ROW" . 755540) ("STRING" . 755543) ("TAB_MODE" . 1189883) ("TEXT_FRAME" . 755546) ("TITLE" . 1029040) ("UNAME" . 996600) ("UVALUE" . 755549) ("VALUE" . 755552) ("XSIZE" . 755555) ("YSIZE" . 755558)))
+    ("CW_FILESEL" fun nil (system) "Result = %s ( Parent)" ("C71.html" ("FILENAME" . 1001063) ("FILTER" . 1001065) ("FIX_FILTER" . 1001072) ("FRAME" . 1001074) ("IMAGE_FILTER" . 1001076) ("MULTIPLE" . 1001078) ("PATH" . 1001080) ("SAVE" . 1024908) ("TAB_MODE" . 1189963) ("UNAME" . 1001082) ("UVALUE" . 1001085) ("WARN_EXIST" . 1024611)))
+    ("CW_FORM" fun nil (system) "Result = %s( [Parent,] Desc)" ("C72.html" ("COLUMN" . 141396) ("IDS" . 141399) ("TAB_MODE" . 1190037) ("TITLE" . 141402) ("UNAME" . 996652) ("UVALUE" . 141405)))
+    ("CW_FSLIDER" fun nil (system) "Result = %s( Parent)" ("C73.html" ("DOUBLE" . 755581) ("DRAG" . 1028998) ("EDIT" . 755584) ("FORMAT" . 755587) ("FRAME" . 755590) ("MAXIMUM" . 755593) ("MINIMUM" . 755596) ("SCROLL" . 218849) ("SUPPRESS_VALUE" . 755599) ("TAB_MODE" . 1190109) ("TITLE" . 755602) ("UNAME" . 996664) ("UVALUE" . 755605) ("VALUE" . 755608) ("VERTICAL" . 755611) ("XSIZE" . 755614) ("YSIZE" . 755617)))
+    ("CW_ITMENU" fun nil (system) "Result = %s(Parent, UI, Target)" ("fw_cw_ref4.html" ("CONTEXT_MENU" . 999147) ("UNAME" . 999150) ("UVALUE" . 999153)))
+    ("CW_ITPANEL" fun nil (system) "Result = %s(Parent, UI)" ("fw_cw_ref5.html" ("ORIENTATION" . 999520) ("UNAME" . 999524) ("UVALUE" . 999527)))
+    ("CW_ITSTATUSBAR" fun nil (system) "Result = %s(Parent, UI)" ("fw_cw_ref6.html" ("UNAME" . 999554) ("UVALUE" . 999557) ("XSIZE" . 999560)))
+    ("CW_ITTOOLBAR" fun nil (system) "Result = %s(Parent, UI, Target)" ("fw_cw_ref7.html" ("EXCLUSIVE" . 999187) ("ROW" . 999190) ("UNAME" . 1001835) ("UVALUE" . 999196)))
+    ("CW_ITWINDOW" fun nil (system) "Result = %s(Parent, UI)" ("fw_cw_ref8.html" ("DIMENSIONS" . 999225) ("UNAME" . 999229) ("UVALUE" . 999232) ("VIRTUAL_DIMENSIONS" . 1002122)))
+    ("CW_LIGHT_EDITOR" fun nil (system) "Result = %s (Parent)" ("C74.html" ("DIRECTION_DISABLED" . 1001420) ("DRAG_EVENTS" . 1001422) ("FRAME" . 1001426) ("HIDE_DISABLED" . 1001428) ("LIGHT" . 1001430) ("LOCATION_DISABLED" . 1001432) ("TAB_MODE" . 1239092) ("TYPE_DISABLED" . 1001434) ("UNAME" . 1001436) ("UVALUE" . 1001439) ("XRANGE" . 1001441) ("XSIZE" . 1001443) ("YRANGE" . 1001445) ("YSIZE" . 1001447) ("ZRANGE" . 1001449)))
+    ("CW_ORIENT" fun nil (system) "Result = %s( Parent)" ("C77.html" ("AX" . 755637) ("AZ" . 755640) ("FRAME" . 755643) ("TAB_MODE" . 1190182) ("TITLE" . 755646) ("UNAME" . 996671) ("UVALUE" . 755649) ("XSIZE" . 755652) ("YSIZE" . 755655)))
+    ("CW_PALETTE_EDITOR" fun nil (system) "Result = %s (Parent)" ("C78.html" ("DATA" . 1001627) ("FRAME" . 1001629) ("HISTOGRAM" . 1001631) ("HORIZONTAL" . 1001633) ("SELECTION" . 1001635) ("TAB_MODE" . 1190256) ("UNAME" . 1001637) ("UVALUE" . 1001640) ("XSIZE" . 1001642) ("YSIZE" . 1001644)))
+    ("CW_PDMENU" fun nil (system) "Result = %s( Parent, Desc)" ("C81.html" ("COLUMN" . 755708) ("CONTEXT_MENU" . 1025506) ("DELIMITER" . 1042113) ("FONT" . 67046) ("HELP" . 855550) ("IDS" . 860166) ("MBAR" . 1188103) ("RETURN_FULL_NAME" . 755726) ("RETURN_ID" . 1188112) ("RETURN_INDEX" . 755720) ("RETURN_NAME" . 755723) ("TAB_MODE" . 1190329) ("UNAME" . 996678) ("UVALUE" . 755731) ("XOFFSET" . 755734) ("YOFFSET" . 755737)))
+    ("CW_RGBSLIDER" fun nil (system) "Result = %s( Parent)" ("C82.html" ("CMY" . 755795) ("COLOR_INDEX" . 755798) ("DRAG" . 755801) ("FRAME" . 755804) ("GRAPHICS_LEVEL" . 755807) ("HLS" . 755810) ("HSV" . 1025517) ("LENGTH" . 755813) ("RGB" . 755816) ("TAB_MODE" . 1190402) ("UNAME" . 996685) ("UVALUE" . 755819) ("VALUE" . 755822) ("VERTICAL" . 1025592)))
+    ("CW_TMPL" fun nil (system) "Result = %s( Parent)" ("C83.html" ("TAB_MODE" . 1239165) ("UNAME" . 996692) ("UVALUE" . 137507)))
+    ("CW_ZOOM" fun nil (system) "Result = %s( Parent)" ("C84.html" ("FRAME" . 755848) ("MAX" . 755851) ("MIN" . 755854) ("RETAIN" . 755857) ("SAMPLE" . 755885) ("SCALE" . 755888) ("TAB_MODE" . 1190480) ("TRACK" . 755891) ("UNAME" . 996700) ("UVALUE" . 755894) ("X_SCROLL_SIZE" . 755900) ("X_ZSIZE" . 755903) ("XSIZE" . 755897) ("Y_SCROLL_SIZE" . 755909) ("Y_ZSIZE" . 755912) ("YSIZE" . 755906)))
+    ("DB_EXISTS" fun nil (system) "status = %s()" ("api5.html"))
+    ("DBLARR" fun nil (system) "Result = %s( D1[, ..., D8])" ("D.html" ("NOZERO" . 676487)))
+    ("DCINDGEN" fun nil (system) "Result = %s( D1 [, ..., D8 ])" ("D2.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("DCOMPLEX" fun nil (system) "Result = %s( Real [, Imaginary] ) or Result = %s( Expression, Offset [, D1 [, ..., D8]] )" ("D3.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("DCOMPLEXARR" fun nil (system) "Result = %s( D1 [, ..., D8])" ("D4.html" ("NOZERO" . 37699)))
+    ("DEFROI" fun nil (system) "Result = %s( Sx, Sy [, Xverts, Yverts])" ("D8.html" ("NOFILL" . 757032) ("NOREGION" . 757029) ("RESTORE" . 757035) ("X0" . 757039) ("Y0" . 757039) ("ZOOM" . 757042)))
+    ("DERIV" fun nil (system) "Result = %s([X,] Y)" ("D13.html"))
+    ("DERIVSIG" fun nil (system) "Result = %s( [X, Y, Sigx,] Sigy )" ("D14.html"))
+    ("DETERM" fun nil (system) "Result = %s( A)" ("D15.html" ("CHECK" . 749767) ("DOUBLE" . 37196) ("ZERO" . 749769)))
+    ("DIAG_MATRIX" fun nil (system) "Result = %s(A [, Diag] )" ("D18.html"))
+    ("DIALOG_DBCONNECT" fun nil (system) "status = %s(DBobj)" ("api4.html" ("DATASOURCE" . 1007548) ("DIALOG_PARENT" . 1007555) ("PASSWORD" . 1007553) ("USER_ID" . 1007551)))
+    ("DIALOG_MESSAGE" fun nil (system) "Result = %s( Message_Text)" ("D19.html" ("CANCEL" . 863012) ("DEFAULT_CANCEL" . 863015) ("DEFAULT_NO" . 863018) ("DIALOG_PARENT" . 863021) ("DISPLAY_NAME" . 871724) ("ERROR" . 863025) ("INFORMATION" . 863028) ("QUESTION" . 863031) ("RESOURCE_NAME" . 863035) ("TITLE" . 863041)))
+    ("DIALOG_PICKFILE" fun nil (system) "Result = %s()" ("D20.html" ("DEFAULT_EXTENSION" . 1010269) ("DIALOG_PARENT" . 907482) ("DIRECTORY" . 951270) ("DISPLAY_NAME" . 907484) ("FILE" . 862313) ("FILTER" . 907329) ("FIX_FILTER" . 907334) ("GET_PATH" . 862316) ("GROUP" . 862319) ("MULTIPLE_FILES" . 907351) ("MUST_EXIST" . 1009929) ("OVERWRITE_PROMPT" . 1009949) ("PATH" . 1009942) ("READ" . 862322) ("RESOURCE_NAME" . 1006308) ("TITLE" . 907359) ("WRITE" . 862325)))
+    ("DIALOG_PRINTERSETUP" fun nil (system) "Result = %s( [PrintDestination])" ("D21.html" ("DIALOG_PARENT" . 984460) ("DISPLAY_NAME" . 984463) ("RESOURCE_NAME" . 984466) ("TITLE" . 984469)))
+    ("DIALOG_PRINTJOB" fun nil (system) "Result = %s( [PrintDestination])" ("D22.html" ("DIALOG_PARENT" . 863760) ("DISPLAY_NAME" . 870902) ("RESOURCE_NAME" . 870904) ("TITLE" . 870915)))
+    ("DIALOG_READ_IMAGE" fun nil (system) "Result = %s ( [Filename])" ("D23.html" ("BLUE" . 986778) ("DIALOG_PARENT" . 986218) ("FILE" . 986220) ("FILTER_TYPE" . 986222) ("FIX_FILTER" . 986226) ("GET_PATH" . 986785) ("GREEN" . 990353) ("IMAGE" . 986228) ("PATH" . 986230) ("QUERY" . 986232) ("RED" . 986234) ("TITLE" . 986240)))
+    ("DIALOG_WRITE_IMAGE" fun nil (system) "Result = %s ( Image [, R, G, B])" ("D24.html" ("DIALOG_PARENT" . 986258) ("FILE" . 986260) ("FIX_TYPE" . 986262) ("NOWRITE" . 986264) ("OPTIONS" . 986266) ("PATH" . 986268) ("TITLE" . 986270) ("TYPE" . 986272) ("WARN_EXIST" . 990326)))
+    ("DIGITAL_FILTER" fun nil (system) "Result = %s( Flow, Fhigh, A, Nterms)" ("D25.html" ("DOUBLE" . 1002899)))
+    ("DILATE" fun nil (system) "Result = %s( Image, Structure [, X0 [, Y0 [, Z0]]])" ("D26.html" ("BACKGROUND" . 984751) ("CONSTRAINED" . 984770) ("GRAY" . 984614) ("PRESERVE_TYPE" . 984778) ("UINT" . 984780) ("ULONG" . 984782) ("VALUES" . 984617)))
+    ("DINDGEN" fun nil (system) "Result = %s(D1 [, ..., D8])" ("D27.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("DIST" fun nil (system) "Result = %s(N [, M])" ("D29.html"))
+    ("DISTANCE_MEASURE" fun nil (system) "Result = %s( Array)" ("D30.html" ("DOUBLE" . 1033017) ("MATRIX" . 1033020) ("MEASURE" . 1033023) ("POWER_MEASURE" . 1033069)))
+    ("DOUBLE" fun nil (system) "Result = %s(Expression[, Offset [, D1 [, ..., D8]]])" ("D34.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("EIGENQL" fun nil (system) "Result = %s( A)" ("E2.html" ("ABSOLUTE" . 870576) ("ASCENDING" . 862897) ("DOUBLE" . 862899) ("EIGENVECTORS" . 870583) ("OVERWRITE" . 862901) ("RESIDUAL" . 862903)))
+    ("EIGENVEC" fun nil (system) "Result = %s( A, Eval)" ("E3.html" ("DOUBLE" . 47356) ("ITMAX" . 47358) ("RESIDUAL" . 47286)))
+    ("ELMHES" fun nil (system) "Result = %s( A)" ("E4.html" ("COLUMN" . 983389) ("DOUBLE" . 50601) ("NO_BALANCE" . 50604)))
+    ("EOF" fun nil (system) "Result = %s(Unit)" ("E7.html"))
+    ("EOS_EH_CONVANG" fun nil (system) "Result = %s(inAngle, code)" ("EOS-routines8.html"))
+    ("EOS_EH_GETVERSION" fun nil (system) "Result = %s(fid, version)" ("EOS-routines9.html"))
+    ("EOS_EH_IDINFO" fun nil (system) "Result = %s(fid, HDFfid, sdInterfaceID)" ("EOS-routines10.html"))
+    ("EOS_EXISTS" fun nil (system) "Result = %s( )" ("EOS-routines11.html"))
+    ("EOS_GD_ATTACH" fun nil (system) "Result = %s(fid, gridname)" ("EOS-routines12.html"))
+    ("EOS_GD_ATTRINFO" fun nil (system) "Result = %s(gridID, attrname, numbertype, count)" ("EOS-routines13.html"))
+    ("EOS_GD_BLKSOMOFFSET" fun nil (system) "Result = %s(gridID, offset, code)" ("EOS-routines14.html"))
+    ("EOS_GD_CLOSE" fun nil (system) "Result = %s(fid)" ("EOS-routines15.html"))
+    ("EOS_GD_COMPINFO" fun nil (system) "Result = %s(gridID, fieldname, compcode, compparm)" ("EOS-routines16.html"))
+    ("EOS_GD_CREATE" fun nil (system) "Result = %s(fid, gridname, xdimsize, ydimsize, upleftpt, lowrightpt)" ("EOS-routines17.html"))
+    ("EOS_GD_DEFBOXREGION" fun nil (system) "Result = %s(gridID, cornerlon, cornerlat)" ("EOS-routines18.html"))
+    ("EOS_GD_DEFCOMP" fun nil (system) "Result = %s(gridID, compcode [, compparm] )" ("EOS-routines19.html"))
+    ("EOS_GD_DEFDIM" fun nil (system) "Result = %s(gridID, dimname, dim)" ("EOS-routines20.html"))
+    ("EOS_GD_DEFFIELD" fun nil (system) "Result = %s(gridID, fieldname, dimlist, numbertype)" ("EOS-routines21.html" ("MERGE" . 1030256)))
+    ("EOS_GD_DEFORIGIN" fun nil (system) "Result = %s(gridID, origincode)" ("EOS-routines22.html"))
+    ("EOS_GD_DEFPIXREG" fun nil (system) "Result = %s(gridID, pixreg)" ("EOS-routines23.html"))
+    ("EOS_GD_DEFPROJ" fun nil (system) "Result = %s(gridID, projcode, zonecode, spherecode, projparm)" ("EOS-routines24.html"))
+    ("EOS_GD_DEFTILE" fun nil (system) "Result = %s( gridID, tilecode [, tilerank, tiledims] )" ("EOS-routines25.html"))
+    ("EOS_GD_DEFVRTREGION" fun nil (system) "Result = %s(gridID, regionID, vertObj, range)" ("EOS-routines26.html"))
+    ("EOS_GD_DETACH" fun nil (system) "Result = %s(gridID)" ("EOS-routines27.html"))
+    ("EOS_GD_DIMINFO" fun nil (system) "Result = %s(gridID, dimname)" ("EOS-routines28.html"))
+    ("EOS_GD_DUPREGION" fun nil (system) "Result = %s(regionID)" ("EOS-routines29.html"))
+    ("EOS_GD_EXTRACTREGION" fun nil (system) "Result = %s(gridID, regionID, fieldname, buffer)" ("EOS-routines30.html"))
+    ("EOS_GD_FIELDINFO" fun nil (system) "Result = %s(gridID, fieldname, rank, dims, numbertype, dimlist)" ("EOS-routines31.html"))
+    ("EOS_GD_GETFILLVALUE" fun nil (system) "Result = %s(gridID, fieldname, fillvalue)" ("EOS-routines32.html"))
+    ("EOS_GD_GETPIXELS" fun nil (system) "Result = %s(gridID, nLonLat, lonVal, latVal, pixRow, pixCol)" ("EOS-routines33.html"))
+    ("EOS_GD_GETPIXVALUES" fun nil (system) "Result = %s(gridID, nPixels, pixCol, pixRow, fieldname, buffer)" ("EOS-routines34.html"))
+    ("EOS_GD_GRIDINFO" fun nil (system) "Result = %s(gridID, xdimsize, ydimsize, upleft, lowright)" ("EOS-routines35.html"))
+    ("EOS_GD_INQATTRS" fun nil (system) "Result = %s( gridID, attrlist)" ("EOS-routines36.html" ("LENGTH" . 1030732)))
+    ("EOS_GD_INQDIMS" fun nil (system) "Result = %s(gridID, dimname, dims)" ("EOS-routines37.html"))
+    ("EOS_GD_INQFIELDS" fun nil (system) "Result = %s(gridID, fieldlist, rank, numbertype)" ("EOS-routines38.html"))
+    ("EOS_GD_INQGRID" fun nil (system) "Result = %s( filename, gridlist)" ("EOS-routines39.html" ("LENGTH" . 1030811)))
+    ("EOS_GD_INTERPOLATE" fun nil (system) "Result = %s(gridID, Interp, lonVal, latVal, fieldname, interpVal)" ("EOS-routines40.html"))
+    ("EOS_GD_NENTRIES" fun nil (system) "Result = %s( gridID, entrycode)" ("EOS-routines41.html" ("LENGTH" . 1030866)))
+    ("EOS_GD_OPEN" fun nil (system) "Result = %s( filename, access)" ("EOS-routines42.html" ("CREATE" . 1030919) ("RDWR" . 1030921) ("READ" . 1030923)))
+    ("EOS_GD_ORIGININFO" fun nil (system) "Result = %s(gridID, origincode)" ("EOS-routines43.html"))
+    ("EOS_GD_PIXREGINFO" fun nil (system) "Result = %s(gridID, pixregcode)" ("EOS-routines44.html"))
+    ("EOS_GD_PROJINFO" fun nil (system) "Result = %s(gridID, projcode, zonecode, spherecode, projparm)" ("EOS-routines45.html"))
+    ("EOS_GD_QUERY" fun nil (system) "Result = %s( Filename, GridName, [Info])" ("EOS-routines46.html"))
+    ("EOS_GD_READATTR" fun nil (system) "Result = %s(gridID, attrname, datbuf)" ("EOS-routines47.html"))
+    ("EOS_GD_READFIELD" fun nil (system) "Result = %s( gridID, fieldname, buffer)" ("EOS-routines48.html" ("EDGE" . 1031035) ("START" . 1031037) ("STRIDE" . 1031039)))
+    ("EOS_GD_READTILE" fun nil (system) "Result = %s(gridID, fieldname, tilecoords, buffer)" ("EOS-routines49.html"))
+    ("EOS_GD_REGIONINFO" fun nil (system) "Result = %s(gridID, regionID, fieldname, ntype, rank, dims, size, upleftpt, lowrightpt)" ("EOS-routines50.html"))
+    ("EOS_GD_SETFILLVALUE" fun nil (system) "Result = %s(gridID, fieldname, fillvalue)" ("EOS-routines51.html"))
+    ("EOS_GD_SETTILECACHE" fun nil (system) "Result = %s(gridID, fieldname, maxcache, cachecode)" ("EOS-routines52.html"))
+    ("EOS_GD_TILEINFO" fun nil (system) "Result = %s(gridID, fieldname, tilecode, tilerank, tiledims)" ("EOS-routines53.html"))
+    ("EOS_GD_WRITEATTR" fun nil (system) "Result = %s( gridID, attrname, datbuf)" ("EOS-routines54.html" ("COUNT" . 1031201) ("HDF_TYPE" . 1031203)))
+    ("EOS_GD_WRITEFIELD" fun nil (system) "Result = %s( gridID, fieldname, data)" ("EOS-routines55.html" ("EDGE" . 1031230) ("START" . 1031232) ("STRIDE" . 1031234)))
+    ("EOS_GD_WRITEFIELDMETA" fun nil (system) "Result = %s(gridID, fieldname, dimlist, numbertype)" ("EOS-routines56.html"))
+    ("EOS_GD_WRITETILE" fun nil (system) "Result = %s(gridID, fieldname, tilecoords, data)" ("EOS-routines57.html"))
+    ("EOS_PT_ATTACH" fun nil (system) "Result = %s(fid, pointname)" ("EOS-routines58.html"))
+    ("EOS_PT_ATTRINFO" fun nil (system) "Result = %s( pointID, attrname, numbertype, count)" ("EOS-routines59.html"))
+    ("EOS_PT_BCKLINKINFO" fun nil (system) "Result = %s(pointID, level, linkfield)" ("EOS-routines60.html"))
+    ("EOS_PT_CLOSE" fun nil (system) "Result = %s(fid)" ("EOS-routines61.html"))
+    ("EOS_PT_CREATE" fun nil (system) "Result = %s(fid, pointname)" ("EOS-routines62.html"))
+    ("EOS_PT_DEFBOXREGION" fun nil (system) "Result = %s(pointID, cornerlon, cornerlat)" ("EOS-routines63.html"))
+    ("EOS_PT_DEFLEVEL" fun nil (system) "Result = %s(pointID, levelname, fieldlist, fieldtype, fieldorder)" ("EOS-routines64.html"))
+    ("EOS_PT_DEFLINKAGE" fun nil (system) "Result = %s(pointID, parent, child, linkfield)" ("EOS-routines65.html"))
+    ("EOS_PT_DEFTIMEPERIOD" fun nil (system) "Result = %s(pointID, starttime, stoptime)" ("EOS-routines66.html"))
+    ("EOS_PT_DEFVRTREGION" fun nil (system) "Result = %s( pointID, regionID, vertObj, range)" ("EOS-routines67.html"))
+    ("EOS_PT_DETACH" fun nil (system) "Result = %s(pointID)" ("EOS-routines68.html"))
+    ("EOS_PT_EXTRACTPERIOD" fun nil (system) "Result = %s(pointID, periodID, level, fieldlist, buffer)" ("EOS-routines69.html"))
+    ("EOS_PT_EXTRACTREGION" fun nil (system) "Result = %s( pointID, regionID, level, fieldlist, buffer)" ("EOS-routines70.html"))
+    ("EOS_PT_FWDLINKINFO" fun nil (system) "Result = %s(pointID, level, linkfield)" ("EOS-routines71.html"))
+    ("EOS_PT_GETLEVELNAME" fun nil (system) "Result = %s( pointID, level, levelname)" ("EOS-routines72.html" ("LENGTH" . 1017099)))
+    ("EOS_PT_GETRECNUMS" fun nil (system) "Result = %s( pointID, inlevel, outlevel, inNrec, inRecs, outNrec, outRecs)" ("EOS-routines73.html"))
+    ("EOS_PT_INQATTRS" fun nil (system) "Result = %s( pointID, attrlist)" ("EOS-routines74.html" ("LENGTH" . 1017172)))
+    ("EOS_PT_INQPOINT" fun nil (system) "Result = %s( filename, pointlist)" ("EOS-routines75.html" ("LENGTH" . 1017203)))
+    ("EOS_PT_LEVELINDX" fun nil (system) "Result = %s( pointID, levelname)" ("EOS-routines76.html"))
+    ("EOS_PT_LEVELINFO" fun nil (system) "Result = %s(pointID, level, fieldlist, fldtype, fldorder)" ("EOS-routines77.html"))
+    ("EOS_PT_NFIELDS" fun nil (system) "Result = %s( pointID, level)" ("EOS-routines78.html" ("LENGTH" . 1017295)))
+    ("EOS_PT_NLEVELS" fun nil (system) "Result = %s(pointID)" ("EOS-routines79.html"))
+    ("EOS_PT_NRECS" fun nil (system) "Result = %s( pointID, level)" ("EOS-routines80.html"))
+    ("EOS_PT_OPEN" fun nil (system) "Result = %s( fieldname)" ("EOS-routines81.html" ("CREATE" . 1017375) ("RDWR" . 1024341) ("READ" . 1024343)))
+    ("EOS_PT_PERIODINFO" fun nil (system) "Result = %s(pointID, periodID, level, fieldlist, size)" ("EOS-routines82.html"))
+    ("EOS_PT_PERIODRECS" fun nil (system) "Result = %s(pointID, periodID, level, nrec, recs)" ("EOS-routines83.html"))
+    ("EOS_PT_QUERY" fun nil (system) "Result = %s( Filename, PointName, [Info] )" ("EOS-routines84.html"))
+    ("EOS_PT_READATTR" fun nil (system) "Result = %s(pointID, attrname, datbuf)" ("EOS-routines85.html"))
+    ("EOS_PT_READLEVEL" fun nil (system) "Result = %s(pointID, level, fieldlist, nrec, recs, buffer)" ("EOS-routines86.html"))
+    ("EOS_PT_REGIONINFO" fun nil (system) "Result = %s(pointID, regionID, level, fieldlist, size)" ("EOS-routines87.html"))
+    ("EOS_PT_REGIONRECS" fun nil (system) "Result = %s(pointID, regionID, level, nrec, recs)" ("EOS-routines88.html"))
+    ("EOS_PT_SIZEOF" fun nil (system) "Result = %s(pointID, fieldlist, fldlevel)" ("EOS-routines89.html"))
+    ("EOS_PT_UPDATELEVEL" fun nil (system) "Result = %s(pointID, level, field, list, nrec, recs, data)" ("EOS-routines90.html"))
+    ("EOS_PT_WRITEATTR" fun nil (system) "Result = %s( pointID, attrname, datbuf)" ("EOS-routines91.html" ("COUNT" . 1017685) ("HDF_TYPE" . 1024378)))
+    ("EOS_PT_WRITELEVEL" fun nil (system) "Result = %s(pointID, level, nrec, data)" ("EOS-routines92.html"))
+    ("EOS_QUERY" fun nil (system) "Result = %s( Filename, [Info] )" ("EOS-routines93.html"))
+    ("EOS_SW_ATTACH" fun nil (system) "Result = %s(fid, swathname)" ("EOS-routines94.html"))
+    ("EOS_SW_ATTRINFO" fun nil (system) "Result = %s(swathID, attrname, numbertype, count)" ("EOS-routines95.html"))
+    ("EOS_SW_CLOSE" fun nil (system) "Result = %s(fid)" ("EOS-routines96.html"))
+    ("EOS_SW_COMPINFO" fun nil (system) "Result = %s(swathID, fieldname, compcode, compparm)" ("EOS-routines97.html"))
+    ("EOS_SW_CREATE" fun nil (system) "Result = %s(fid, swathname)" ("EOS-routines98.html"))
+    ("EOS_SW_DEFBOXREGION" fun nil (system) "Result = %s(swathID, cornerlon, cornerlat, mode)" ("EOS-routines99.html"))
+    ("EOS_SW_DEFCOMP" fun nil (system) "Result = %s( swathID, compcode, [, compparm] )" ("EOS-routines100.html"))
+    ("EOS_SW_DEFDATAFIELD" fun nil (system) "Result = %s( swathID, fieldname, dimlist, numbertype)" ("EOS-routines101.html" ("MERGE" . 1017975)))
+    ("EOS_SW_DEFDIM" fun nil (system) "Result = %s(swathID, fieldname, dim)" ("EOS-routines102.html"))
+    ("EOS_SW_DEFDIMMAP" fun nil (system) "Result = %s(swathID, geodim, datadim, offset, increment)" ("EOS-routines103.html"))
+    ("EOS_SW_DEFGEOFIELD" fun nil (system) "Result = %s( swathID, fieldname, dimlist, numbertype)" ("EOS-routines104.html" ("MERGE" . 1022830)))
+    ("EOS_SW_DEFIDXMAP" fun nil (system) "Result = %s(swathID, geodim, datadim, index)" ("EOS-routines105.html"))
+    ("EOS_SW_DEFTIMEPERIOD" fun nil (system) "Result = %s(swathID, starttime , stoptime, mode)" ("EOS-routines106.html"))
+    ("EOS_SW_DEFVRTREGION" fun nil (system) "Result = %s(swathID, regionID, vertObj, range)" ("EOS-routines107.html"))
+    ("EOS_SW_DETACH" fun nil (system) "Result = %s(swathID)" ("EOS-routines108.html"))
+    ("EOS_SW_DIMINFO" fun nil (system) "Result = %s(swathID, dimname)" ("EOS-routines109.html"))
+    ("EOS_SW_DUPREGION" fun nil (system) "Result = %s(regionID)" ("EOS-routines110.html"))
+    ("EOS_SW_EXTRACTPERIOD" fun nil (system) "Result = %s(swathID, periodID, fieldname, external_mode, buffer)" ("EOS-routines111.html"))
+    ("EOS_SW_EXTRACTREGION" fun nil (system) "Result = %s(swathID, regionID, fieldname, external_mode, buffer)" ("EOS-routines112.html"))
+    ("EOS_SW_FIELDINFO" fun nil (system) "Result = %s(swathID, fieldname, rank, dims, numbertype, dimlist)" ("EOS-routines113.html"))
+    ("EOS_SW_GETFILLVALUE" fun nil (system) "Result = %s(swathID, fieldname, fillvalue)" ("EOS-routines114.html"))
+    ("EOS_SW_IDXMAPINFO" fun nil (system) "Result = %s(swathID, geodim, datadim, index)" ("EOS-routines115.html"))
+    ("EOS_SW_INQATTRS" fun nil (system) "Result = %s( swathID, attrlist)" ("EOS-routines116.html" ("LENGTH" . 1018488)))
+    ("EOS_SW_INQDATAFIELDS" fun nil (system) "Result = %s(swathID, fieldlist, rank, numbertype)" ("EOS-routines117.html"))
+    ("EOS_SW_INQDIMS" fun nil (system) "Result = %s(swathID, dimname, dim)" ("EOS-routines118.html"))
+    ("EOS_SW_INQGEOFIELDS" fun nil (system) "Result = %s(swathID, fieldlist, rank, numbertype)" ("EOS-routines119.html"))
+    ("EOS_SW_INQIDXMAPS" fun nil (system) "Result = %s(swathID, idxmap, idxsizes)" ("EOS-routines120.html"))
+    ("EOS_SW_INQMAPS" fun nil (system) "Result = %s(swathID, dimmap, offset, increment)" ("EOS-routines121.html"))
+    ("EOS_SW_INQSWATH" fun nil (system) "Result = %s( filename, swathlist)" ("EOS-routines122.html" ("LENGTH" . 1018674)))
+    ("EOS_SW_MAPINFO" fun nil (system) "Result = %s(swathID, geodim, datadim, offset, increment)" ("EOS-routines123.html"))
+    ("EOS_SW_NENTRIES" fun nil (system) "Result = %s( swathID, entrycode)" ("EOS-routines124.html" ("LENGTH" . 1018745)))
+    ("EOS_SW_OPEN" fun nil (system) "Result = %s( filename)" ("EOS-routines125.html" ("CREATE" . 1018776) ("RDWR" . 1024156) ("READ" . 1024157)))
+    ("EOS_SW_PERIODINFO" fun nil (system) "Result = %s(swathID, periodID, fieldname, ntype, rank, dims, size)" ("EOS-routines126.html"))
+    ("EOS_SW_QUERY" fun nil (system) "Result=%s(Filename, SwathName, [Info])" ("EOS-routines127.html"))
+    ("EOS_SW_READATTR" fun nil (system) "Result = %s(swathID, attrname, datbuf)" ("EOS-routines128.html"))
+    ("EOS_SW_READFIELD" fun nil (system) "Result = %s( swathID, fieldname, buffer)" ("EOS-routines129.html" ("EDGE" . 1018883) ("START" . 1024163) ("STRIDE" . 1024164)))
+    ("EOS_SW_REGIONINFO" fun nil (system) "Result = %s(swathID, regionID, fieldname, ntype, rank, dims, size)" ("EOS-routines130.html"))
+    ("EOS_SW_SETFILLVALUE" fun nil (system) "Result = %s(swathID, fieldname, fillvalue)" ("EOS-routines131.html"))
+    ("EOS_SW_WRITEATTR" fun nil (system) "Result = %s( swathID, attrname, datbuf)" ("EOS-routines132.html" ("COUNT" . 1019002) ("HDF_TYPE" . 1024170)))
+    ("EOS_SW_WRITEDATAMETA" fun nil (system) "Result = %s(swathID, fieldname, dimlist, numbertype)" ("EOS-routines133.html"))
+    ("EOS_SW_WRITEFIELD" fun nil (system) "Result = %s( swathID, fieldname, data)" ("EOS-routines134.html" ("EDGE" . 1026788) ("START" . 1026786) ("STRIDE" . 1025378)))
+    ("EOS_SW_WRITEGEOMETA" fun nil (system) "Result = %s(swathID, fieldname, dimlist, numbertype)" ("EOS-routines135.html"))
+    ("ERF" fun nil (system) "Result = %s(Z)" ("E10.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ERFC" fun nil (system) "Result = %s(Z)" ("E11.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ERFCX" fun nil (system) "Result = %s(Z)" ("E12.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ERODE" fun nil (system) "Result = %s( Image, Structure [, X0 [, Y0 [, Z0]]])" ("E13.html" ("GRAY" . 989437) ("PRESERVE_TYPE" . 989439) ("UINT" . 989441) ("ULONG" . 989443) ("VALUES" . 989445)))
+    ("EXECUTE" fun nil (system) "Result = %s(String [, QuietCompile] [, QuietExecution])" ("E15.html"))
+    ("EXP" fun nil (system) "Result = %s(Expression)" ("E17.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("EXPAND_PATH" fun nil (system) "Result = %s( String)" ("E19.html" ("ALL_DIRS" . 987744) ("ARRAY" . 987739) ("COUNT" . 676819) ("DLM" . 987893) ("HELP" . 987895)))
+    ("EXPINT" fun nil (system) "Result = %s( N, X)" ("E20.html" ("DOUBLE" . 50644) ("EPS" . 997966) ("ITER" . 997968) ("ITMAX" . 997920)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("EXTRAC" fun nil (system) "Result = %s( Array, C1, C2, ..., Cn, S1, S2, ..., Sn )" ("E21.html"))
+    ("EXTRACT_SLICE" fun nil (system) "Result = %s( Vol, Xsize, Ysize, Xcenter, Ycenter, Zcenter, Xrot, Yrot, Zrot)" ("E22.html" ("ANISOTROPY" . 985393) ("OUT_VAL" . 988206) ("RADIANS" . 758834) ("SAMPLE" . 758840) ("VERTICES" . 985402)))
+    ("F_CVF" fun nil (system) "Result = %s(P, Dfn, Dfd)" ("F.html"))
+    ("F_PDF" fun nil (system) "Result = %s(V, Dfn, Dfd)" ("F2.html"))
+    ("FACTORIAL" fun nil (system) "Result = %s( N)" ("F3.html" ("STIRLING" . 54500) ("UL64" . 880257)))
+    ("FFT" fun nil (system) "Result = %s( Array [, Direction])" ("F4.html" ("DIMENSION" . 37862) ("DOUBLE" . 882851) ("INVERSE" . 37868) ("OVERWRITE" . 676843)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("FILE_BASENAME" fun nil (system) "Result = %s(Path [, RemoveSuffix])" ("F5.html" ("FOLD_CASE" . 922324)))
+    ("FILE_DIRNAME" fun nil (system) "Result = %s(Path)" ("F9.html" ("MARK_DIRECTORY" . 922462)))
+    ("FILE_EXPAND_PATH" fun nil (system) "Result = %s (Path)" ("F10.html"))
+    ("FILE_INFO" fun nil (system) "Result = %s(Path)" ("F11.html" ("NOEXPAND_PATH" . 883815)))
+    ("FILE_LINES" fun nil (system) "Result = %s(Path)" ("F12.html" ("COMPRESS" . 910561) ("NOEXPAND_PATH" . 910559)))
+    ("FILE_READLINK" fun nil (system) "Result = %s(Path)" ("F16.html" ("ALLOW_NONEXISTENT" . 906651) ("ALLOW_NONSYMLINK" . 906653) ("NOEXPAND_PATH" . 906655)))
+    ("FILE_SAME" fun nil (system) "Result = %s(Path1, Path2)" ("F17.html" ("NOEXPAND_PATH" . 906717)))
+    ("FILE_SEARCH" fun nil (system) "Result = %s(Path_Specification) or Result = %s(Dir_Specification, Recur_Pattern)" ("F18.html" ("COUNT" . 883932) ("EXPAND_ENVIRONMENT" . 883934) ("EXPAND_TILDE" . 883941) ("FOLD_CASE" . 883947) ("FULLY_QUALIFY_PATH" . 883949) ("ISSUE_ACCESS_ERROR" . 883957) ("MARK_DIRECTORY" . 883959) ("MATCH_ALL_INITIAL_DOT" . 883965) ("MATCH_INITIAL_DOT" . 883967) ("NOSORT" . 883969) ("QUOTE" . 883975) ("TEST_BLOCK_SPECIAL" . 900969) ("TEST_CHARACTER_SPECIAL" . 900971) ("TEST_DANGLING_SYMLINK" . 900973) ("TEST_DIRECTORY" . 883984) ("TEST_EXECUTABLE" . 883986) ("TEST_GROUP" . 900983) ("TEST_NAMED_PIPE" . 900993) ("TEST_READ" . 883991) ("TEST_REGULAR" . 883994) ("TEST_SETGID" . 901003) ("TEST_SETUID" . 901005) ("TEST_SOCKET" . 901015) ("TEST_STICKY_BIT" . 901017) ("TEST_SYMLINK" . 901019) ("TEST_USER" . 901021) ("TEST_WRITE" . 883996) ("TEST_ZERO_LENGTH" . 883999) ("WINDOWS_SHORT_NAMES" . 932747)))
+    ("FILE_TEST" fun nil (system) "Result = %s( File)" ("F19.html" ("BLOCK_SPECIAL" . 901098) ("CHARACTER_SPECIAL" . 901108) ("DANGLING_SYMLINK" . 901110) ("DIRECTORY" . 882375) ("EXECUTABLE" . 882377) ("GET_MODE" . 882382) ("GROUP" . 901120) ("NAMED_PIPE" . 901122) ("NOEXPAND_PATH" . 883024) ("READ" . 882391) ("REGULAR" . 882393) ("SETGID" . 901132) ("SETUID" . 901134) ("SOCKET" . 901136) ("STICKY_BIT" . 901143) ("SYMLINK" . 901145) ("USER" . 901152) ("WRITE" . 882395) ("ZERO_LENGTH" . 882397)))
+    ("FILE_WHICH" fun nil (system) "Result = %s( [Path, ] File)" ("F20.html" ("INCLUDE_CURRENT_DIR" . 882459)))
+    ("FILEPATH" fun nil (system) "Result = %s( Filename)" ("F21.html" ("ROOT_DIR" . 762284) ("SUBDIRECTORY" . 762286) ("TERMINAL" . 762290) ("TMP" . 762292)))
+    ("FINDGEN" fun nil (system) "Result = %s(D1 [, ..., D8])" ("F22.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("FINITE" fun nil (system) "Result = %s( X)" ("F23.html" ("INFINITY" . 862771) ("NAN" . 862772) ("SIGN" . 887616)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("FIX" fun nil (system) "Result = %s( Expression [, Offset [, D1 [, ..., D8]]])" ("F24.html" ("PRINT" . 871518) ("TYPE" . 871524)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("FLOAT" fun nil (system) "Result = %s( Expression [, Offset [, D1 [, ..., D8]]] )" ("F26.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("FLOOR" fun nil (system) "Result = %s(X)" ("F27.html" ("L64" . 875894)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("FLTARR" fun nil (system) "Result = %s( D1 [, ..., D8])" ("F29.html" ("NOZERO" . 676947)))
+    ("FORMAT_AXIS_VALUES" fun nil (system) "Result = %s( Values )" ("F32.html"))
+    ("FSTAT" fun nil (system) "Result = %s(Unit)" ("F35.html"))
+    ("FULSTR" fun nil (system) "Result = %s(A)" ("F36.html"))
+    ("FV_TEST" fun nil (system) "Result = %s(X, Y)" ("F39.html"))
+    ("FX_ROOT" fun nil (system) "Result = %s(X, Func)" ("F40.html" ("DOUBLE" . 749893) ("ITMAX" . 749897) ("STOP" . 749899) ("TOL" . 749901)))
+    ("FZ_ROOTS" fun nil (system) "Result = %s(C)" ("F41.html" ("DOUBLE" . 52525) ("EPS" . 902541) ("NO_POLISH" . 902543)))
+    ("GAMMA" fun nil (system) "Result = %s(Z)" ("G.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("GAUSS2DFIT" fun nil (system) "Result = %s( Z, A [, X, Y])" ("G5.html" ("NEGATIVE" . 199709) ("TILT" . 199711)))
+    ("GAUSS_CVF" fun nil (system) "Result = %s(P)" ("G3.html"))
+    ("GAUSS_PDF" fun nil (system) "Result = %s(V)" ("G4.html"))
+    ("GAUSSFIT" fun nil (system) "Result = %s( X, Y [, A])" ("G6.html" ("CHISQ" . 881490) ("ESTIMATES" . 841704) ("MEASURE_ERRORS" . 841712) ("NTERMS" . 889863) ("SIGMA" . 881498) ("YERROR" . 881500)))
+    ("GAUSSINT" fun nil (system) "Result = %s(X)" ("G7.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("GET_DRIVE_LIST" fun nil (system) "Result = %s()" ("G8.html" ("CDROM" . 884482) ("COUNT" . 876351) ("FIXED" . 876358) ("REMOTE" . 878573) ("REMOVABLE" . 878575)))
+    ("GET_KBRD" fun nil (system) "Result = %s(Wait)" ("G9.html"))
+    ("GET_SCREEN_SIZE" fun nil (system) "Result = %s( [Display_name])" ("G11.html" ("DISPLAY_NAME" . 841676) ("RESOLUTION" . 853571)))
+    ("GETENV" fun nil (system) "Result = %s( Name)" ("G12.html" ("ENVIRONMENT" . 887078)))
+    ("GRID3" fun nil (system) "Result = %s( X, Y, Z, F, Gx, Gy, Gz)" ("G16.html" ("DELTA" . 677098) ("DTOL" . 168207) ("GRID" . 677100) ("NGRID" . 677102) ("START" . 677104)))
+    ("GRID_TPS" fun nil (system) "Result = %s (Xp, Yp, Values)" ("G15.html" ("COEFFICIENTS" . 871830) ("DELTA" . 871832) ("NGRID" . 871834) ("START" . 871836)))
+    ("GRIDDATA" fun nil (system) "Result = %s( X, F ) or Result = %s( X, Y, F ) or Result = %s( X, Y, Z, F)" ("G17.html" ("ANISOTROPY" . 877568) ("DEGREES" . 877573) ("DELTA" . 877575) ("DIMENSION" . 877578) ("EMPTY_SECTORS" . 877581) ("FAULT_POLYGONS" . 877584) ("FAULT_XY" . 877588) ("FUNCTION_TYPE" . 877591) ("GRID" . 877652) ("INVERSE_DISTANCE" . 877655) ("KRIGING" . 877657) ("LINEAR" . 877659) ("MAX_PER_SECTOR" . 877661) ("METHOD" . 877664) ("MIN_CURVATURE" . 877713) ("MIN_POINTS" . 877715) ("MISSING" . 877719) ("NATURAL_NEIGHBOR" . 877723) ("NEAREST_NEIGHBOR" . 877726) ("NEIGHBORHOOD" . 877729) ("POLYNOMIAL_REGRESSION" . 877733) ("POWER" . 877749) ("QUINTIC" . 877752) ("RADIAL_BASIS_FUNCTION" . 877755) ("SEARCH_ELLIPSE" . 877757) ("SECTORS" . 877761) ("SHEPARDS" . 877763) ("SMOOTHING" . 877766) ("SPHERE" . 877769) ("START" . 877771) ("TRIANGLES" . 877774) ("VARIOGRAM" . 877778) ("XOUT" . 877781) ("YOUT" . 877784)))
+    ("GS_ITER" fun nil (system) "Result = %s( A, B)" ("G18.html" ("CHECK" . 750095) ("DOUBLE" . 875451) ("LAMBDA" . 750097) ("MAX_ITER" . 750102) ("TOL" . 872926) ("X_0" . 750104)))
+    ("H5_BROWSER" fun nil (system) "Result = %s([Files])" ("H4.html" ("DIALOG_READ" . 885865)))
+    ("H5_GET_LIBVERSION" fun nil (system) "Result = %s( )" ("HDF5-routines11.html"))
+    ("H5_PARSE" fun nil (system) "Result = %s (File)" ("HDF5-routines13.html" ("FILE" . 1148311) ("PATH" . 1148313) ("READ_DATA" . 1148315)))
+    ("H5A_GET_NAME" fun nil (system) "Result = %s(Attribute_id)" ("HDF5-routines15.html"))
+    ("H5A_GET_NUM_ATTRS" fun nil (system) "Result = %s(Loc_id)" ("HDF5-routines16.html"))
+    ("H5A_GET_SPACE" fun nil (system) "Result = %s(Attribute_id)" ("HDF5-routines17.html"))
+    ("H5A_GET_TYPE" fun nil (system) "Result = %s(Attribute_id)" ("HDF5-routines18.html"))
+    ("H5A_OPEN_IDX" fun nil (system) "Result = %s(Loc_id, Index)" ("HDF5-routines19.html"))
+    ("H5A_OPEN_NAME" fun nil (system) "Result = %s(Loc_id, Name)" ("HDF5-routines20.html"))
+    ("H5A_READ" fun nil (system) "Result = %s(Attribute_id)" ("HDF5-routines21.html"))
+    ("H5D_GET_SPACE" fun nil (system) "Result = %s(Dataset_id)" ("HDF5-routines23.html"))
+    ("H5D_GET_STORAGE_SIZE" fun nil (system) "Result = %s(Dataset_id)" ("HDF5-routines24.html"))
+    ("H5D_GET_TYPE" fun nil (system) "Result = %s(Dataset_id)" ("HDF5-routines25.html"))
+    ("H5D_OPEN" fun nil (system) "Result = %s(Loc_id, Name)" ("HDF5-routines26.html"))
+    ("H5D_READ" fun nil (system) "Result = %s(Dataset_id)" ("HDF5-routines27.html" ("FILE_SPACE" . 1148824) ("MEMORY_SPACE" . 1148826)))
+    ("H5F_IS_HDF5" fun nil (system) "Result = %s(Filename)" ("HDF5-routines29.html"))
+    ("H5F_OPEN" fun nil (system) "Result = %s(Filename)" ("HDF5-routines30.html"))
+    ("H5G_GET_COMMENT" fun nil (system) "Result = %s(Loc_id, Name)" ("HDF5-routines32.html"))
+    ("H5G_GET_LINKVAL" fun nil (system) "Result = %s(Loc_id, Name)" ("HDF5-routines33.html"))
+    ("H5G_GET_MEMBER_NAME" fun nil (system) "Result = %s(Loc_id, Name, Index)" ("HDF5-routines34.html"))
+    ("H5G_GET_NMEMBERS" fun nil (system) "Result = %s(Loc_id, Name)" ("HDF5-routines35.html"))
+    ("H5G_GET_OBJINFO" fun nil (system) "Result = %s(Loc_id, Name)" ("HDF5-routines36.html" ("FOLLOW_LINK" . 1149214)))
+    ("H5G_OPEN" fun nil (system) "Result = %s(Loc_id, Name)" ("HDF5-routines37.html"))
+    ("H5I_GET_TYPE" fun nil (system) "Result = %s(Obj_id)" ("HDF5-routines38.html"))
+    ("H5R_DEREFERENCE" fun nil (system) "Result = %s(Loc_id, Reference)" ("HDF5-routines39.html"))
+    ("H5R_GET_OBJECT_TYPE" fun nil (system) "Result = %s(Loc_id, Reference)" ("HDF5-routines40.html"))
+    ("H5S_COPY" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines42.html"))
+    ("H5S_CREATE_SIMPLE" fun nil (system) "Result = %s(Dimensions)" ("HDF5-routines43.html" ("MAX_DIMENSIONS" . 1149414)))
+    ("H5S_GET_SELECT_BOUNDS" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines44.html"))
+    ("H5S_GET_SELECT_ELEM_NPOINTS" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines45.html"))
+    ("H5S_GET_SELECT_ELEM_POINTLIST" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines46.html" ("NUMBER" . 1149508) ("START" . 1149506)))
+    ("H5S_GET_SELECT_HYPER_BLOCKLIST" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines47.html" ("NUMBER" . 1149544) ("START" . 1149542)))
+    ("H5S_GET_SELECT_HYPER_NBLOCKS" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines48.html"))
+    ("H5S_GET_SELECT_NPOINTS" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines49.html"))
+    ("H5S_GET_SIMPLE_EXTENT_DIMS" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines50.html" ("MAX_DIMENSIONS" . 1149642)))
+    ("H5S_GET_SIMPLE_EXTENT_NDIMS" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines51.html"))
+    ("H5S_GET_SIMPLE_EXTENT_NPOINTS" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines52.html"))
+    ("H5S_GET_SIMPLE_EXTENT_TYPE" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines53.html"))
+    ("H5S_IS_SIMPLE" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines54.html"))
+    ("H5S_SELECT_VALID" fun nil (system) "Result = %s(Dataspace_id)" ("HDF5-routines60.html"))
+    ("H5T_COMMITTED" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines62.html"))
+    ("H5T_COPY" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines63.html"))
+    ("H5T_EQUAL" fun nil (system) "Result = %s(Datatype_id1, Datatype_id2)" ("HDF5-routines64.html"))
+    ("H5T_GET_ARRAY_DIMS" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines65.html" ("PERMUTATIONS" . 1150077)))
+    ("H5T_GET_ARRAY_NDIMS" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines66.html"))
+    ("H5T_GET_CLASS" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines67.html"))
+    ("H5T_GET_CSET" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines68.html"))
+    ("H5T_GET_EBIAS" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines69.html"))
+    ("H5T_GET_FIELDS" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines70.html"))
+    ("H5T_GET_INPAD" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines71.html"))
+    ("H5T_GET_MEMBER_CLASS" fun nil (system) "Result = %s(Datatype_id, Member)" ("HDF5-routines72.html"))
+    ("H5T_GET_MEMBER_NAME" fun nil (system) "Result = %s(Datatype_id, Member)" ("HDF5-routines73.html"))
+    ("H5T_GET_MEMBER_OFFSET" fun nil (system) "Result = %s(Datatype_id, Member)" ("HDF5-routines74.html"))
+    ("H5T_GET_MEMBER_TYPE" fun nil (system) "Result = %s(Datatype_id, Member)" ("HDF5-routines75.html"))
+    ("H5T_GET_NMEMBERS" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines76.html"))
+    ("H5T_GET_NORM" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines77.html"))
+    ("H5T_GET_OFFSET" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines78.html"))
+    ("H5T_GET_ORDER" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines79.html"))
+    ("H5T_GET_PAD" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines80.html"))
+    ("H5T_GET_PRECISION" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines81.html"))
+    ("H5T_GET_SIGN" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines82.html"))
+    ("H5T_GET_SIZE" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines83.html"))
+    ("H5T_GET_STRPAD" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines84.html"))
+    ("H5T_GET_SUPER" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines85.html"))
+    ("H5T_IDLTYPE" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines86.html" ("ARRAY_DIMENSIONS" . 1150764) ("STRUCTURE" . 1150766)))
+    ("H5T_MEMTYPE" fun nil (system) "Result = %s(Datatype_id)" ("HDF5-routines87.html"))
+    ("H5T_OPEN" fun nil (system) "Result = %s(Loc_id, Name)" ("HDF5-routines88.html"))
+    ("HANNING" fun nil (system) "Result = %s( N1 [, N2])" ("H5.html" ("ALPHA" . 758100) ("DOUBLE" . 874103)))
+    ("HDF_AN_ANNLEN" fun nil (system) "Result = %s(Annotation_id)" ("HDF-routines8.html"))
+    ("HDF_AN_ANNLIST" fun nil (system) "Result = %s(Annotation_id, Annotation_type, Object_tag, Object_ref, Annotation_list)" ("HDF-routines9.html"))
+    ("HDF_AN_ATYPE2TAG" fun nil (system) "Result = %s(Annotation_type)" ("HDF-routines10.html"))
+    ("HDF_AN_CREATE" fun nil (system) "Result = %s(Annotation_id, Object_tag, Object_ref, Annotation_type)" ("HDF-routines11.html"))
+    ("HDF_AN_CREATEF" fun nil (system) "Result = %s(Annotation_id, Annotation_type)" ("HDF-routines12.html"))
+    ("HDF_AN_FILEINFO" fun nil (system) "Result = %s(Annotation_id, n_file_labels, n_file_descs, n_data_labels, n_data_descs)" ("HDF-routines15.html"))
+    ("HDF_AN_GET_TAGREF" fun nil (system) "Result = %s(Annotation_id, index, Annotation_type, Annotation_tag, Annotation_ref)" ("HDF-routines16.html"))
+    ("HDF_AN_NUMANN" fun nil (system) "Result = %s(Annotation_id, Annotation_type, Object_tag, Object_ref)" ("HDF-routines18.html"))
+    ("HDF_AN_READANN" fun nil (system) "Result = %s( Annotation_id, annotation)" ("HDF-routines19.html" ("LENGTH" . 1056839)))
+    ("HDF_AN_SELECT" fun nil (system) "Result = %s(Annotation_id, index, Annotation_type)" ("HDF-routines20.html"))
+    ("HDF_AN_START" fun nil (system) "Result = %s(file_id)" ("HDF-routines21.html"))
+    ("HDF_AN_WRITEANN" fun nil (system) "Result = %s( Annotation_id, annotation)" ("HDF-routines24.html" ("LENGTH" . 1056941)))
+    ("HDF_ANNOTATION_ID2TAGREF" fun nil (system) "Result = %s(Annotation_id, Annotation_tag, Annotation_ref)" ("HDF-routines17.html"))
+    ("HDF_ANNOTATION_TAG2ATYPE" fun nil (system) "Result = %s(Annotation_tag)" ("HDF-routines22.html"))
+    ("HDF_ANNOTATION_TAGREF2ID" fun nil (system) "Result = %s(Annotation_id, Annotation_tag, Annotation_ref)" ("HDF-routines23.html"))
+    ("HDF_BROWSER" fun nil (system) "Template = %s([Filename])" ("H7.html" ("CANCEL" . 852206) ("GROUP" . 870963) ("PREFIX" . 852209)))
+    ("HDF_DF24_LASTREF" fun nil (system) "Result = %s( )" ("HDF-routines30.html"))
+    ("HDF_DF24_NIMAGES" fun nil (system) "Result = %s(Filename)" ("HDF-routines31.html"))
+    ("HDF_DFAN_LABLIST" fun nil (system) "Result = %s( Filename, Tag, Reflist, Labellist)" ("HDF-routines40.html" ("LISTSIZE" . 997374) ("MAXLABEL" . 997377) ("STARTPOS" . 997380) ("STRING" . 997383)))
+    ("HDF_DFAN_LASTREF" fun nil (system) "Result = %s( )" ("HDF-routines41.html"))
+    ("HDF_DFP_LASTREF" fun nil (system) "Result = %s( )" ("HDF-routines46.html"))
+    ("HDF_DFP_NPALS" fun nil (system) "Result = %s(Filename)" ("HDF-routines47.html"))
+    ("HDF_DFR8_LASTREF" fun nil (system) "Result = %s( )" ("HDF-routines55.html"))
+    ("HDF_DFR8_NIMAGES" fun nil (system) "Result = %s(Filename)" ("HDF-routines56.html"))
+    ("HDF_EXISTS" fun nil (system) "Result = %s( )" ("HDF-routines62.html"))
+    ("HDF_GR_ATTRINFO" fun nil (system) "Result = %s(obj_id, attr_index, name, data_type, count)" ("HDF-routines63.html"))
+    ("HDF_GR_CREATE" fun nil (system) "Result = %s(gr_id, name, ncomp, data_type, interlace_mode, dim_sizes)" ("HDF-routines64.html"))
+    ("HDF_GR_FILEINFO" fun nil (system) "Result = %s(gr_id, n_images, n_file_attrs)" ("HDF-routines67.html"))
+    ("HDF_GR_FINDATTR" fun nil (system) "Result = %s(obj_id, attr_name)" ("HDF-routines68.html"))
+    ("HDF_GR_GETATTR" fun nil (system) "Result = %s(obj_id, attr_index, values)" ("HDF-routines69.html"))
+    ("HDF_GR_GETCHUNKINFO" fun nil (system) "Result = %s(ri_id, dim_length, flag)" ("HDF-routines70.html"))
+    ("HDF_GR_GETIMINFO" fun nil (system) "Result = %s(ri_id, gr_name, ncomp, data_type, interlace_mode, dim_sizes, num_attrs)" ("HDF-routines71.html"))
+    ("HDF_GR_GETLUTID" fun nil (system) "Result = %s(ri_id, pal_index)" ("HDF-routines72.html"))
+    ("HDF_GR_GETLUTINFO" fun nil (system) "Result = %s(pal_id, ncomp, data_type, interlace_mode, num_entries)" ("HDF-routines73.html"))
+    ("HDF_GR_IDTOREF" fun nil (system) "Result = %s(ri_id)" ("HDF-routines74.html"))
+    ("HDF_GR_LUTTOREF" fun nil (system) "Result = %s(pal_id)" ("HDF-routines75.html"))
+    ("HDF_GR_NAMETOINDEX" fun nil (system) "Result = %s(gr_id, gr_name)" ("HDF-routines76.html"))
+    ("HDF_GR_READIMAGE" fun nil (system) "Result = %s( ri_id, data)" ("HDF-routines77.html" ("EDGE" . 1057619) ("INTERLACE" . 1057617) ("START" . 1057607) ("STRIDE" . 1057609)))
+    ("HDF_GR_READLUT" fun nil (system) "Result = %s( pal_id, pal_data)" ("HDF-routines78.html" ("INTERLACE" . 1057387)))
+    ("HDF_GR_REFTOINDEX" fun nil (system) "Result = %s(gr_id, gr_ref)" ("HDF-routines79.html"))
+    ("HDF_GR_SELECT" fun nil (system) "Result = %s(gr_id, index)" ("HDF-routines80.html"))
+    ("HDF_GR_SETATTR" fun nil (system) "Result = %s(obj_id, attr_name, data_type, count, values)" ("HDF-routines81.html"))
+    ("HDF_GR_SETCHUNK" fun nil (system) "Result = %s(ri_id, dim_length, comp_type, comp_prm)" ("HDF-routines82.html"))
+    ("HDF_GR_SETCHUNKCACHE" fun nil (system) "Result = %s(ri_id, maxcache, flags)" ("HDF-routines83.html"))
+    ("HDF_GR_SETCOMPRESS" fun nil (system) "Result = %s(ri_id, comp_type, comp_prm)" ("HDF-routines84.html"))
+    ("HDF_GR_SETEXTERNALFILE" fun nil (system) "Result = %s(ri_id, filename, offset)" ("HDF-routines85.html"))
+    ("HDF_GR_START" fun nil (system) "Result = %s(file_id)" ("HDF-routines86.html"))
+    ("HDF_GR_WRITEIMAGE" fun nil (system) "Result = %s( ri_id, data)" ("HDF-routines87.html" ("EDGE" . 1057693) ("INTERLACE" . 1057699) ("START" . 1057691) ("STRIDE" . 1057681)))
+    ("HDF_GR_WRITELUT" fun nil (system) "Result = %s( pal_id, pal_data )" ("HDF-routines88.html"))
+    ("HDF_HDF2IDLTYPE" fun nil (system) "Result = %s( hdftypecode )" ("HDF-routines89.html"))
+    ("HDF_IDL2HDFTYPE" fun nil (system) "Result = %s( idltypecode )" ("HDF-routines90.html"))
+    ("HDF_ISHDF" fun nil (system) "Result = %s(Filename)" ("HDF-routines91.html"))
+    ("HDF_NEWREF" fun nil (system) "Result = %s(FileHandle)" ("HDF-routines93.html"))
+    ("HDF_NUMBER" fun nil (system) "Result = %s( FileHandle)" ("HDF-routines94.html" ("TAG" . 998362)))
+    ("HDF_OPEN" fun nil (system) "Result = %s( Filename)" ("HDF-routines95.html" ("ALL" . 998379) ("CREATE" . 998383) ("NUM_DD" . 998386) ("RDWR" . 998390) ("READ" . 998394) ("WRITE" . 998397)))
+    ("HDF_PACKDATA" fun nil (system) "Result = %s( data1 [, data2 [, data3 [, data4 [, data5 [, data6 [, data7 [, data8]]]]]]])" ("HDF-routines96.html" ("HDF_ORDER" . 1042936) ("HDF_TYPE" . 1042939) ("NREC" . 1042942)))
+    ("HDF_READ" fun nil (system) "Result = %s( [Filename])" ("H8.html" ("DF24" . 852278) ("DFR8" . 852275) ("PREFIX" . 871657) ("TEMPLATE" . 852281)))
+    ("HDF_SD_ATTRFIND" fun nil (system) "Result = %s(SD_id, Name)" ("HDF-routines98.html"))
+    ("HDF_SD_CREATE" fun nil (system) "Result = %s( SDinterface_id, Name, Dims)" ("HDF-routines101.html" ("BYTE" . 1053869) ("DFNT_CHAR88" . 1053872) ("DFNT_FLOAT32" . 1053875) ("DFNT_FLOAT64" . 1053878) ("DFNT_INT16" . 1053884) ("DFNT_INT32" . 1053887) ("DFNT_INT8" . 1053881) ("DFNT_UINT16" . 1053893) ("DFNT_UINT32" . 1053896) ("DFNT_UINT8" . 1053890) ("DOUBLE" . 1053899) ("FLOAT" . 1053902) ("HDF_TYPE" . 1106175) ("INT" . 1106171) ("LONG" . 1053908) ("SHORT" . 1053911) ("STRING" . 1053914)))
+    ("HDF_SD_DIMGETID" fun nil (system) "Result = %s(SDdataset_id, Dimension_Number)" ("HDF-routines103.html"))
+    ("HDF_SD_ISCOORDVAR" fun nil (system) "Result = %s(SDdataset_id)" ("HDF-routines111.html"))
+    ("HDF_SD_NAMETOINDEX" fun nil (system) "Result = %s(SDinterface_id, SDS_Name)" ("HDF-routines112.html"))
+    ("HDF_SD_REFTOINDEX" fun nil (system) "Result = %s(SDinterface_id, Reference_number)" ("HDF-routines113.html"))
+    ("HDF_SD_SELECT" fun nil (system) "Result = %s(SDinterface_id, Number)" ("HDF-routines114.html"))
+    ("HDF_SD_START" fun nil (system) "Result = %s( Filename)" ("HDF-routines118.html" ("CREATE" . 1054663) ("RDWR" . 1054661) ("READ" . 1054659)))
+    ("HDF_SDINTERFACE_IDTOREF" fun nil (system) "Result = %s(SDdataset_id)" ("HDF-routines110.html"))
+    ("HDF_VD_ATTACH" fun nil (system) "Result = %s( FileHandle, VData_id)" ("HDF-routines120.html" ("READ" . 999503) ("WRITE" . 999506)))
+    ("HDF_VD_ATTRFIND" fun nil (system) "Result = %s(VData, FieldID, Name)" ("HDF-routines121.html"))
+    ("HDF_VD_FEXIST" fun nil (system) "Result = %s(VData, Fieldnames)" ("HDF-routines126.html"))
+    ("HDF_VD_FIND" fun nil (system) "Result = %s(FileHandle, Name)" ("HDF-routines127.html"))
+    ("HDF_VD_GETID" fun nil (system) "Result = %s(FileHandle, VData_id)" ("HDF-routines129.html"))
+    ("HDF_VD_ISATTR" fun nil (system) "Result = %s(VData)" ("HDF-routines132.html"))
+    ("HDF_VD_ISVD" fun nil (system) "Result = %s(VGroup, Id)" ("HDF-routines133.html"))
+    ("HDF_VD_LONE" fun nil (system) "Result = %s( FileHandle)" ("HDF-routines135.html" ("MAXSIZE" . 999761)))
+    ("HDF_VD_NATTRS" fun nil (system) "Result = %s( VData, FieldID )" ("HDF-routines136.html"))
+    ("HDF_VD_READ" fun nil (system) "Result = %s( VData, Data)" ("HDF-routines137.html" ("FIELDS" . 999788) ("FULL_INTERLACE" . 999791) ("NO_INTERLACE" . 999794) ("NRECORDS" . 999797)))
+    ("HDF_VG_ATTACH" fun nil (system) "Result = %s( FileHandle, VGroup_id)" ("HDF-routines142.html" ("READ" . 999942) ("WRITE" . 999945)))
+    ("HDF_VG_GETID" fun nil (system) "Result = %s(FileHandle, VGroup_id)" ("HDF-routines144.html"))
+    ("HDF_VG_GETNEXT" fun nil (system) "Result = %s(VGroup, Id)" ("HDF-routines146.html"))
+    ("HDF_VG_INQTR" fun nil (system) "Result = %s(VGroup, Tag, Ref)" ("HDF-routines149.html"))
+    ("HDF_VG_ISVD" fun nil (system) "Result = %s(VGroup, Id)" ("HDF-routines151.html"))
+    ("HDF_VG_ISVG" fun nil (system) "Result = %s(VGroup, Id)" ("HDF-routines152.html"))
+    ("HDF_VG_LONE" fun nil (system) "Result = %s( FileHandle)" ("HDF-routines153.html" ("MAXSIZE" . 1000150)))
+    ("HDF_VG_NUMBER" fun nil (system) "Result = %s(VGroup)" ("HDF-routines154.html"))
+    ("HILBERT" fun nil (system) "Result = %s(X [, D])" ("H12.html"))
+    ("HIST_2D" fun nil (system) "Result = %s( V1, V2)" ("H13.html" ("BIN1" . 832830) ("BIN2" . 832832) ("MAX1" . 832284) ("MAX2" . 832345) ("MIN1" . 832837) ("MIN2" . 832839)))
+    ("HIST_EQUAL" fun nil (system) "Result = %s( A)" ("H14.html" ("BINSIZE" . 871698) ("FCN" . 876498) ("HISTOGRAM_ONLY" . 874403) ("MAXV" . 874687) ("MINV" . 758160) ("OMAX" . 875087) ("OMIN" . 875100) ("PERCENT" . 874600) ("TOP" . 874602)))
+    ("HISTOGRAM" fun nil (system) "Result = %s( Array)" ("H15.html" ("BINSIZE" . 677175) ("INPUT" . 677177) ("L64" . 677180) ("LOCATIONS" . 886107) ("MAX" . 886113) ("MIN" . 677182) ("NAN" . 197674) ("NBINS" . 677184) ("OMAX" . 873903) ("OMIN" . 677186) ("REVERSE_INDICES" . 677188)))
+    ("HOUGH" fun nil (system) "Result = %s( Array)" ("H17.html" ("BACKPROJECT" . 875957) ("DOUBLE" . 875960) ("DRHO" . 875962) ("DX" . 875964) ("DY" . 875966) ("GRAY" . 875968) ("NRHO" . 875970) ("NTHETA" . 875972) ("NX" . 875974) ("NY" . 875976) ("RHO" . 875978) ("RMIN" . 875980) ("THETA" . 875982) ("XMIN" . 875984) ("YMIN" . 875986)))
+    ("HQR" fun nil (system) "Result = %s( A)" ("H18.html" ("COLUMN" . 871729) ("DOUBLE" . 50748)))
+    ("IBETA" fun nil (system) "Result = %s( A, B, Z)" ("I.html" ("DOUBLE" . 875616) ("EPS" . 875618) ("ITER" . 875967) ("ITMAX" . 875622)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("IDENTITY" fun nil (system) "Result = %s( N)" ("I3.html" ("DOUBLE" . 832664)))
+    ("IDL_VALIDNAME" fun nil (system) "Result = %s(String)" ("I4.html" ("CONVERT_ALL" . 937159) ("CONVERT_SPACES" . 937166)))
+    ("IDLITSYS_CREATETOOL" fun nil (system) "Result = %s(StrTool)" ("I5.html" ("DIMENSIONS" . 984612) ("IDENTIFIER" . 984573) ("INITIAL_DATA" . 939956) ("LOCATION" . 984462) ("MACRO_NAMES" . 964508) ("NO_SAVEPROMPT" . 982826) ("OVERPLOT" . 939958) ("STYLE_NAME" . 984522) ("USER_INTERFACE" . 983497) ("VIEW_GRID" . 939979) ("VIEW_NEXT" . 939981) ("VIEW_NUMBER" . 939984) ("VISUALIZATION_TYPE" . 939987)))
+    ("IGAMMA" fun nil (system) "Result = %s( A, Z)" ("I7.html" ("DOUBLE" . 875550) ("EPS" . 875548) ("ITER" . 875581) ("ITMAX" . 875579) ("METHOD" . 875520)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("IMAGINARY" fun nil (system) "Result = %s(Complex_Expression)" ("I11.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("INDGEN" fun nil (system) "Result = %s(D1 [, ..., D8])" ("I13.html" ("BYTE" . 862684) ("COMPLEX" . 862699) ("DCOMPLEX" . 862701) ("DOUBLE" . 862705) ("FLOAT" . 862707) ("L64" . 862711) ("LONG" . 862927) ("STRING" . 862930) ("TYPE" . 862752) ("UINT" . 862746) ("UL64" . 862748) ("ULONG" . 862750)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("INT_2D" fun nil (system) "Result = %s( Fxy, AB_Limits, PQ_Limits, Pts)" ("I14.html" ("DOUBLE" . 832191) ("ORDER" . 813280)))
+    ("INT_3D" fun nil (system) "Result = %s( Fxyz, AB_Limits, PQ_Limits, UV_Limits, Pts)" ("I15.html" ("DOUBLE" . 813293)))
+    ("INT_TABULATED" fun nil (system) "Result = %s( X, F)" ("I16.html" ("DOUBLE" . 875649) ("SORT" . 750310)))
+    ("INTARR" fun nil (system) "Result = %s( D1 [, ..., D8])" ("I17.html" ("NOZERO" . 677253)))
+    ("INTERPOL" fun nil (system) "Result = %s( V, N)" ("I18.html" ("LSQUADRATIC" . 872067) ("QUADRATIC" . 872072) ("SPLINE" . 872076)))
+    ("INTERPOLATE" fun nil (system) "Result = %s( P, X [, Y [, Z]])" ("I19.html" ("CUBIC" . 680782) ("GRID" . 680781) ("MISSING" . 677276)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("INVERT" fun nil (system) "Result = %s( Array [, Status])" ("I21.html" ("DOUBLE" . 50809)))
+    ("IOCTL" fun nil (system) "Result = %s( File_Unit [, Request, Arg])" ("I22.html" ("BY_VALUE" . 677325) ("MT_OFFLINE" . 677327) ("MT_REWIND" . 677329) ("MT_SKIP_FILE" . 677331) ("MT_SKIP_RECORD" . 677333) ("MT_WEOF" . 677335) ("SUPPRESS_ERROR" . 677337)))
+    ("ISHFT" fun nil (system) "Result = %s(P1, P2)" ("I24.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ITGETCURRENT" fun nil (system) "Result = %s()" ("I30.html" ("TOOL" . 941481)))
+    ("JULDAY" fun nil (system) "Result = %s(Month, Day, Year, Hour, Minute, Second)" ("J2.html"))
+    ("KEYWORD_SET" fun nil (system) "Result = %s(Expression)" ("K.html"))
+    ("KRIG2D" fun nil (system) "Result = %s( Z [, X, Y])" ("K2.html" ("BOUNDS" . 750620) ("EXPONENTIAL" . 750596) ("GS" . 930292) ("NX" . 750622) ("NY" . 750624) ("REGULAR" . 750607) ("SPHERICAL" . 750598) ("XGRID" . 750609) ("XVALUES" . 750611) ("YGRID" . 750613) ("YVALUES" . 750615)))
+    ("KURTOSIS" fun nil (system) "Result = %s(X)" ("K3.html" ("DOUBLE" . 859078) ("NAN" . 860892)))
+    ("KW_TEST" fun nil (system) "Result = %s( X)" ("K4.html" ("DF" . 53675) ("MISSING" . 53678)))
+    ("L64INDGEN" fun nil (system) "Result = %s(D1 [, ..., D8])" ("L.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("LA_CHOLMPROVE" fun nil (system) "Result = %s( Array, Achol, B, X)" ("L3.html" ("BACKWARD_ERROR" . 969194) ("DOUBLE" . 969196) ("FORWARD_ERROR" . 969198) ("UPPER" . 969200)))
+    ("LA_CHOLSOL" fun nil (system) "Result = %s( A, B)" ("L4.html" ("DOUBLE" . 969317) ("UPPER" . 969319)))
+    ("LA_DETERM" fun nil (system) "Result = %s( A)" ("L5.html" ("CHECK" . 969400) ("DOUBLE" . 969402) ("ZERO" . 969404)))
+    ("LA_EIGENPROBLEM" fun nil (system) "Result = %s( A [, B])" ("L6.html" ("ALPHA" . 969502) ("BALANCE" . 969505) ("BETA" . 969512) ("DOUBLE" . 969515) ("EIGENVECTORS" . 969517) ("LEFT_EIGENVECTORS" . 969520) ("NORM_BALANCE" . 969523) ("PERMUTE_RESULT" . 969525) ("RCOND_VALUE" . 969527) ("RCOND_VECTOR" . 969529) ("SCALE_RESULT" . 969531) ("STATUS" . 969533)))
+    ("LA_EIGENQL" fun nil (system) "Result = %s( A [, B])" ("L7.html" ("DOUBLE" . 969688) ("EIGENVECTORS" . 969690) ("FAILED" . 969692) ("GENERALIZED" . 969695) ("METHOD" . 969701) ("RANGE" . 969707) ("SEARCH_RANGE" . 969709) ("STATUS" . 969712) ("TOLERANCE" . 969723)))
+    ("LA_EIGENVEC" fun nil (system) "Result = %s( T, QZ)" ("L8.html" ("BALANCE" . 969898) ("DOUBLE" . 969901) ("EIGENINDEX" . 969903) ("LEFT_EIGENVECTORS" . 969906) ("PERMUTE_RESULT" . 969908) ("RCOND_VALUE" . 969910) ("RCOND_VECTOR" . 969912) ("SCALE_RESULT" . 969914) ("SELECT" . 969916)))
+    ("LA_ELMHES" fun nil (system) "Result = %s( Array [, Q])" ("L9.html" ("BALANCE" . 970060) ("DOUBLE" . 970067) ("NORM_BALANCE" . 970069) ("PERMUTE_RESULT" . 970071) ("SCALE_RESULT" . 970073)))
+    ("LA_GM_LINEAR_MODEL" fun nil (system) "Result = %s( A, B, D, Y)" ("L10.html" ("DOUBLE" . 970161)))
+    ("LA_HQR" fun nil (system) "Result = %s(H [, Q])" ("L11.html" ("DOUBLE" . 970266) ("PERMUTE_RESULT" . 970268) ("STATUS" . 970270)))
+    ("LA_INVERT" fun nil (system) "Result = %s( A)" ("L12.html" ("DOUBLE" . 970351) ("STATUS" . 970353)))
+    ("LA_LEAST_SQUARE_EQUALITY" fun nil (system) "Result = %s( A, B, C, D)" ("L13.html" ("DOUBLE" . 970448) ("RESIDUAL" . 970450)))
+    ("LA_LEAST_SQUARES" fun nil (system) "Result = %s( A, B)" ("L14.html" ("DOUBLE" . 970563) ("METHOD" . 970565) ("RANK" . 970571) ("RCONDITION" . 970573) ("RESIDUAL" . 970575) ("STATUS" . 970577)))
+    ("LA_LINEAR_EQUATION" fun nil (system) "Result = %s( Array, B)" ("L15.html" ("BACKWARD_ERROR" . 970657) ("DOUBLE" . 970659) ("FORWARD_ERROR" . 970661) ("STATUS" . 970663)))
+    ("LA_LUMPROVE" fun nil (system) "Result = %s( Array, Aludc, Index, B, X)" ("L17.html" ("BACKWARD_ERROR" . 970892) ("DOUBLE" . 970894) ("FORWARD_ERROR" . 970896)))
+    ("LA_LUSOL" fun nil (system) "Result = %s( A, Index, B)" ("L18.html" ("DOUBLE" . 971007)))
+    ("LA_TRIMPROVE" fun nil (system) "Result = %s( AL, A, AU, DAL, DA, DAU, DU2, Index, B, X)" ("L21.html" ("BACKWARD_ERROR" . 971423) ("DOUBLE" . 971425) ("FORWARD_ERROR" . 971427)))
+    ("LA_TRISOL" fun nil (system) "Result = %s( AL, A, AU, U2, Index, B)" ("L24.html" ("DOUBLE" . 971725)))
+    ("LABEL_DATE" fun nil (system) "Result = %s()" ("L25.html" ("AM_PM" . 939222) ("DATE_FORMAT" . 939215) ("DAYS_OF_WEEK" . 939285) ("MONTHS" . 939288) ("OFFSET" . 939291) ("ROUND_UP" . 940951)))
+    ("LABEL_REGION" fun nil (system) "Result = %s( Data)" ("L26.html" ("ALL_NEIGHBORS" . 930484) ("EIGHT" . 828027) ("ULONG" . 677395)))
+    ("LADFIT" fun nil (system) "Result = %s( X, Y)" ("L27.html" ("ABSDEV" . 53730) ("DOUBLE" . 837069)))
+    ("LAGUERRE" fun nil (system) "Result = %s( X, N [, K])" ("L28.html" ("COEFFICIENTS" . 942495) ("DOUBLE" . 942497)))
+    ("LEEFILT" fun nil (system) "Result = %s( A [, N [, Sig]])" ("L29.html" ("DOUBLE" . 939800) ("EXACT" . 833703)))
+    ("LEGENDRE" fun nil (system) "Result = %s( X, L [, M])" ("L30.html" ("DOUBLE" . 942590)))
+    ("LINBCG" fun nil (system) "Result = %s( A, B, X)" ("L31.html" ("DOUBLE" . 50883) ("ITER" . 50896) ("ITMAX" . 50899) ("ITOL" . 50886) ("TOL" . 50893)))
+    ("LINDGEN" fun nil (system) "Result = %s(D1 [, ..., D8])" ("L32.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("LINFIT" fun nil (system) "Result = %s( X, Y)" ("L33.html" ("CHISQ" . 53778) ("COVAR" . 940616) ("DOUBLE" . 837073) ("MEASURE_ERRORS" . 53781) ("PROB" . 941301) ("SDEV" . 941420) ("SIGMA" . 941423) ("YFIT" . 941298)))
+    ("LL_ARC_DISTANCE" fun nil (system) "Result = %s( Lon_lat0, Arc_Dist, Az)" ("L35.html" ("DEGREES" . 758227)))
+    ("LMFIT" fun nil (system) "Result = %s( X, Y, A)" ("L36.html" ("ALPHA" . 849263) ("CHISQ" . 831462) ("CONVERGENCE" . 831464) ("COVAR" . 831689) ("DOUBLE" . 831466) ("FITA" . 831077) ("FUNCTION_NAME" . 831083) ("ITER" . 831471) ("ITMAX" . 831092) ("ITMIN" . 831094) ("MEASURE_ERRORS" . 941497) ("SIGMA" . 940586) ("TOL" . 940573) ("WEIGHTS" . 940578)))
+    ("LMGR" fun nil (system) "Result = %s()" ("L37.html" ("CLIENTSERVER" . 879327) ("DEMO" . 856060) ("EMBEDDED" . 856064) ("EXPIRE_DATE" . 932522) ("FORCE_DEMO" . 856072) ("INSTALL_NUM" . 932505) ("LMHOSTID" . 856081) ("RUNTIME" . 856085) ("SITE_NOTICE" . 932539) ("STUDENT" . 856089) ("TRIAL" . 856094) ("VM" . 996553)))
+    ("LNGAMMA" fun nil (system) "Result = %s(Z)" ("L38.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("LNP_TEST" fun nil (system) "Result = %s( X, Y)" ("L39.html" ("DOUBLE" . 54544) ("HIFAC" . 941916) ("JMAX" . 54547) ("OFAC" . 54550) ("WK1" . 54553) ("WK2" . 54556)))
+    ("LOCALE_GET" fun nil (system) "Result = %s( )" ("L41.html"))
+    ("LOGICAL_AND" fun nil (system) "Result = %s(Arg1, Arg2)" ("L42.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("LOGICAL_OR" fun nil (system) "Result = %s(Arg1, Arg2)" ("L43.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("LOGICAL_TRUE" fun nil (system) "Result = %s(Arg)" ("L44.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("LON64ARR" fun nil (system) "Result = %s( D1 [, ..., D8])" ("L45.html" ("NOZERO" . 918880)))
+    ("LONARR" fun nil (system) "Result = %s( D1 [, ..., D8])" ("L46.html" ("NOZERO" . 916558)))
+    ("LONG" fun nil (system) "Result = %s( Expression[, Offset [, D1 [, ..., D8]]] )" ("L47.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("LONG64" fun nil (system) "Result = %s( Expression[, Offset [, D1 [, ..., D8]]] )" ("L48.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("LSODE" fun nil (system) "Result = %s( Y, X, H, Derivs[, Status])" ("L49.html" ("ATOL" . 904984) ("QUIET" . 1014877) ("RTOL" . 905036)))
+    ("LU_COMPLEX" fun nil (system) "Result = %s( A, B)" ("L50.html" ("DOUBLE" . 750791) ("INVERSE" . 48859) ("SPARSE" . 37275)))
+    ("LUMPROVE" fun nil (system) "Result = %s( A, Alud, Index, B, X)" ("L52.html" ("COLUMN" . 58736) ("DOUBLE" . 51323)))
+    ("LUSOL" fun nil (system) "Result = %s(A, Index, B)" ("L53.html" ("COLUMN" . 58727) ("DOUBLE" . 50997)))
+    ("M_CORRELATE" fun nil (system) "Result = %s( X, Y)" ("M.html" ("DOUBLE" . 956112)))
+    ("MACHAR" fun nil (system) "Result = %s()" ("M2.html" ("DOUBLE" . 928847)))
+    ("MAKE_ARRAY" fun nil (system) "Result = %s ( [D1 [, ..., D8]])" ("M3.html" ("BYTE" . 887432) ("COMPLEX" . 887435) ("DCOMPLEX" . 887438) ("DIMENSION" . 887441) ("DOUBLE" . 887444) ("FLOAT" . 887447) ("INDEX" . 887450) ("INTEGER" . 887453) ("L64" . 916074) ("LONG" . 887456) ("NOZERO" . 887459) ("OBJ" . 887462) ("PTR" . 887465) ("SIZE" . 887468) ("STRING" . 887471) ("TYPE" . 887474) ("UINT" . 918501) ("UL64" . 918504) ("ULONG" . 916082) ("VALUE" . 887480)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("MAP_2POINTS" fun nil (system) "Result = %s( lon0, lat0, lon1, lat1)" ("M5.html" ("DPATH" . 960572) ("METERS" . 960574) ("MILES" . 960576) ("NPATH" . 960578) ("PARAMETERS" . 960581) ("RADIANS" . 960583) ("RADIUS" . 960585) ("RHUMB" . 960587)))
+    ("MAP_IMAGE" fun nil (system) "Result = %s( Image [, Startx, Starty [, Xsize, Ysize]])" ("M8.html" ("BILINEAR" . 903532) ("COMPRESS" . 887760) ("LATMAX" . 887748) ("LATMIN" . 887745) ("LONMAX" . 887754) ("LONMIN" . 887751) ("MAP_STRUCTURE" . 1060029) ("MASK" . 1061279) ("MAX_VALUE" . 887766) ("MIN_VALUE" . 887770) ("MISSING" . 887774) ("SCALE" . 887763)))
+    ("MAP_PATCH" fun nil (system) "Result = %s( Image_Orig [, Lons, Lats])" ("M9.html" ("LAT0" . 958167) ("LAT1" . 887838) ("LON0" . 887841) ("LON1" . 887844) ("MAX_VALUE" . 928019) ("MISSING" . 887847) ("TRIANGULATE" . 887853) ("XSIZE" . 887856) ("XSTART" . 887859) ("YSIZE" . 887862) ("YSTART" . 887865)))
+    ("MAP_PROJ_FORWARD" fun nil (system) "Result = %s(Longitude [, Latitude])" ("M10.html" ("CONNECTIVITY" . 999199) ("FILL" . 999209) ("MAP_STRUCTURE" . 1059849) ("POLYGONS" . 999214) ("POLYLINES" . 999218) ("RADIANS" . 999222)))
+    ("MAP_PROJ_IMAGE" fun nil (system) "Result = %s(Image [, Range])" ("M11.html" ("BILINEAR" . 1062551) ("DIMENSIONS" . 1062553) ("IMAGE_STRUCTURE" . 1062555) ("MAP_STRUCTURE" . 1062557) ("MASK" . 1062562) ("MAX_VALUE" . 1062565) ("MIN_VALUE" . 1062567) ("MISSING" . 1062569) ("UVRANGE" . 1062571)))
+    ("MAP_PROJ_INIT" fun nil (system) "Result = %s(Projection)" ("M13.html" ("CENTER_AZIMUTH" . 999986) ("CENTER_LATITUDE" . 999988) ("CENTER_LONGITUDE" . 999990) ("DATUM" . 999770) ("FALSE_EASTING" . 999992) ("FALSE_NORTHING" . 999994) ("GCTP" . 999952) ("HEIGHT" . 999996) ("HOM_AZIM_ANGLE" . 1000000) ("HOM_AZIM_LONGITUDE" . 999998) ("HOM_LATITUDE1" . 1000002) ("HOM_LATITUDE2" . 1000004) ("HOM_LONGITUDE1" . 1000006) ("HOM_LONGITUDE2" . 1000008) ("IS_JUSTIFY" . 1000012) ("IS_ZONES" . 1000010) ("LIMIT" . 999954) ("MERCATOR_SCALE" . 1000036) ("OEA_ANGLE" . 1000038) ("OEA_SHAPEM" . 1000040) ("OEA_SHAPEN" . 1000042) ("RADIANS" . 999959) ("RELAXED" . 999961) ("ROTATION" . 1000045) ("SAT_TILT" . 1000074) ("SEMIMAJOR_AXIS" . 1000048) ("SEMIMINOR_AXIS" . 1000050) ("SOM_FLAG" . 1000060) ("SOM_INCLINATION" . 1000052) ("SOM_LANDSAT_NUMBER" . 1000062) ("SOM_LANDSAT_PATH" . 1000064) ("SOM_LONGITUDE" . 1000054) ("SOM_PERIOD" . 1000056) ("SOM_RATIO" . 1000058) ("SPHERE_RADIUS" . 1000066) ("STANDARD_PAR1" . 1000070) ("STANDARD_PAR2" . 1000072) ("STANDARD_PARALLEL" . 1000068) ("TRUE_SCALE_LATITUDE" . 1000076) ("ZONE" . 1000078)))
+    ("MAP_PROJ_INVERSE" fun nil (system) "Result = %s (X [, Y])" ("M14.html" ("MAP_STRUCTURE" . 1000165) ("RADIANS" . 1000170)))
+    ("MATRIX_MULTIPLY" fun nil (system) "Result = %s( A, B)" ("M16.html" ("ATRANSPOSE" . 960661) ("BTRANSPOSE" . 960663)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("MATRIX_POWER" fun nil (system) "Result = %s(Array, N)" ("M17.html" ("DOUBLE" . 1000204) ("STATUS" . 1000207)))
+    ("MAX" fun nil (system) "Result = %s( Array [, Max_Subscript])" ("M18.html" ("ABSOLUTE" . 1047888) ("DIMENSION" . 888204) ("MIN" . 963501) ("NAN" . 888207) ("SUBSCRIPT_MIN" . 929038)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("MD_TEST" fun nil (system) "Result = %s( X)" ("M19.html" ("ABOVE" . 888251) ("BELOW" . 888254) ("MDC" . 888257)))
+    ("MEAN" fun nil (system) "Result = %s( X)" ("M20.html" ("DOUBLE" . 888313) ("NAN" . 888316)))
+    ("MEANABSDEV" fun nil (system) "Result = %s( X)" ("M21.html" ("DOUBLE" . 888362) ("MEDIAN" . 888365) ("NAN" . 888368)))
+    ("MEDIAN" fun nil (system) "Result = %s ( Array [, Width])" ("M22.html" ("DIMENSION" . 978207) ("DOUBLE" . 1047845) ("EVEN" . 978204)))
+    ("MEMORY" fun nil (system) "Result = %s()" ("M23.html" ("CURRENT" . 960747) ("HIGHWATER" . 960749) ("L64" . 960751) ("NUM_ALLOC" . 960754) ("NUM_FREE" . 960756) ("STRUCTURE" . 960758)))
+    ("MESH_CLIP" fun nil (system) "Result = %s (Plane, Vertsin, Connin, Vertsout, Connout)" ("M24.html" ("AUXDATA_IN" . 948402) ("AUXDATA_OUT" . 948404) ("CUT_VERTS" . 948406)))
+    ("MESH_DECIMATE" fun nil (system) "Result = %s (Verts, Conn, Connout)" ("M25.html" ("PERCENT_POLYGONS" . 948433) ("PERCENT_VERTICES" . 948431) ("PROGRESS_CALLBACK" . 1051741) ("PROGRESS_METHOD" . 1020618) ("PROGRESS_OBJECT" . 1020641) ("PROGRESS_PERCENT" . 1020654) ("PROGRESS_USERDATA" . 1020660) ("VERTICES" . 1020667)))
+    ("MESH_ISSOLID" fun nil (system) "Result = %s (Conn)" ("M26.html"))
+    ("MESH_MERGE" fun nil (system) "Result = %s (Verts, Conn, Verts1, Conn1)" ("M27.html" ("COMBINE_VERTICES" . 948474) ("TOLERANCE" . 948480)))
+    ("MESH_NUMTRIANGLES" fun nil (system) "Result = %s (Conn)" ("M28.html"))
+    ("MESH_SMOOTH" fun nil (system) "Result = %s (Verts, Conn)" ("M30.html" ("FIXED_EDGE_VERTICES" . 948537) ("FIXED_VERTICES" . 948535) ("ITERATIONS" . 948533) ("LAMBDA" . 948539)))
+    ("MESH_SURFACEAREA" fun nil (system) "Result = %s ( Verts, Conn)" ("M31.html" ("AUXDATA" . 948575) ("MOMENT" . 948577)))
+    ("MESH_VALIDATE" fun nil (system) "Result = %s ( Verts, Conn)" ("M32.html" ("COMBINE_VERTICES" . 948607) ("PACK_VERTICES" . 949513) ("REMOVE_NAN" . 948611) ("TOLERANCE" . 948613)))
+    ("MESH_VOLUME" fun nil (system) "Result = %s ( Verts, Conn)" ("M33.html" ("SIGNED" . 948632)))
+    ("MIN" fun nil (system) "Result = %s( Array [, Min_Subscript])" ("M35.html" ("ABSOLUTE" . 1047943) ("DIMENSION" . 965599) ("MAX" . 963567) ("NAN" . 888740) ("SUBSCRIPT_MAX" . 965815)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("MIN_CURVE_SURF" fun nil (system) "Result = %s(Z [, X, Y])" ("M36.html" ("BOUNDS" . 888798) ("CONST" . 956696) ("DOUBLE" . 929725) ("GS" . 888796) ("NX" . 888800) ("NY" . 888802) ("REGULAR" . 888785) ("SPHERE" . 956689) ("TPS" . 888782) ("XGRID" . 888787) ("XOUT" . 888804) ("XPOUT" . 888808) ("XVALUES" . 888789) ("YGRID" . 888791) ("YOUT" . 888806) ("YPOUT" . 888808) ("YVALUES" . 888793)))
+    ("MOMENT" fun nil (system) "Result = %s( X)" ("M39.html" ("DOUBLE" . 888958) ("MDEV" . 888961) ("NAN" . 888964) ("SDEV" . 888970)))
+    ("MORPH_CLOSE" fun nil (system) "Result = %s (Image, Structure)" ("M40.html" ("GRAY" . 948649) ("PRESERVE_TYPE" . 948651) ("UINT" . 948653) ("ULONG" . 948655) ("VALUES" . 948657)))
+    ("MORPH_DISTANCE" fun nil (system) "Result = %s (Data)" ("M41.html" ("BACKGROUND" . 948898) ("NEIGHBOR_SAMPLING" . 948900) ("NO_COPY" . 948943)))
+    ("MORPH_GRADIENT" fun nil (system) "Result = %s (Image, Structure)" ("M42.html" ("PRESERVE_TYPE" . 948983) ("UINT" . 948985) ("ULONG" . 948987) ("VALUES" . 948989)))
+    ("MORPH_HITORMISS" fun nil (system) "Result = %s (Image, HitStructure, MissStructure)" ("M43.html"))
+    ("MORPH_OPEN" fun nil (system) "Result = %s (Image, Structure)" ("M44.html" ("GRAY" . 949085) ("PRESERVE_TYPE" . 949087) ("UINT" . 949089) ("ULONG" . 949091) ("VALUES" . 949093)))
+    ("MORPH_THIN" fun nil (system) "Result = %s ( Image, HitStructure, MissStructure )" ("M45.html"))
+    ("MORPH_TOPHAT" fun nil (system) "Result = %s ( Image, Structure)" ("M46.html" ("PRESERVE_TYPE" . 949148) ("UINT" . 949150) ("ULONG" . 949152) ("VALUES" . 949154)))
+    ("MPEG_OPEN" fun nil (system) "mpegID = %s( Dimensions)" ("M48.html" ("BITRATE" . 958969) ("FILENAME" . 958930) ("IFRAME_GAP" . 958935) ("MOTION_VEC_LENGTH" . 958939) ("QUALITY" . 958887)))
+    ("N_ELEMENTS" fun nil (system) "Result = %s(Expression)" ("N.html"))
+    ("N_PARAMS" fun nil (system) "Result = %s()" ("N2.html"))
+    ("N_TAGS" fun nil (system) "Result = %s( Expression)" ("N3.html" ("DATA_LENGTH" . 889267) ("LENGTH" . 928988)))
+    ("NCDF_ATTCOPY" fun nil (system) "Result = %s( Incdf [, Invar])" ("NetCDF-routines11.html" ("IN_GLOBAL" . 996938) ("OUT_GLOBAL" . 996942)))
+    ("NCDF_ATTINQ" fun nil (system) "Result = %s( Cdfid [, Varid])" ("NetCDF-routines14.html" ("GLOBAL" . 997032)))
+    ("NCDF_ATTNAME" fun nil (system) "Result = %s( Cdfid [, Varid])" ("NetCDF-routines15.html" ("GLOBAL" . 997094)))
+    ("NCDF_CREATE" fun nil (system) "Result = %s( Filename)" ("NetCDF-routines20.html" ("CLOBBER" . 997292) ("NOCLOBBER" . 997295)))
+    ("NCDF_DIMDEF" fun nil (system) "Result = %s( Cdfid, DimName, Size)" ("NetCDF-routines21.html" ("UNLIMITED" . 997333)))
+    ("NCDF_DIMID" fun nil (system) "Result = %s( Cdfid, DimName )" ("NetCDF-routines22.html"))
+    ("NCDF_EXISTS" fun nil (system) "Result = %s( )" ("NetCDF-routines25.html"))
+    ("NCDF_INQUIRE" fun nil (system) "Result = %s(Cdfid)" ("NetCDF-routines26.html"))
+    ("NCDF_OPEN" fun nil (system) "Result = %s( Filename)" ("NetCDF-routines27.html" ("NOWRITE" . 997434) ("WRITE" . 997437)))
+    ("NCDF_VARDEF" fun nil (system) "Result = %s( Cdfid, Name [, Dim])" ("NetCDF-routines28.html" ("BYTE" . 997458) ("CHAR" . 997461) ("DOUBLE" . 997464) ("FLOAT" . 997467) ("LONG" . 997470) ("SHORT" . 997473)))
+    ("NCDF_VARID" fun nil (system) "Result = %s(Cdfid, Name)" ("NetCDF-routines31.html"))
+    ("NCDF_VARINQ" fun nil (system) "Result = %s(Cdfid, Varid)" ("NetCDF-routines32.html"))
+    ("NEWTON" fun nil (system) "Result = %s( X, Vecfunc)" ("N5.html" ("CHECK" . 889318) ("DOUBLE" . 889321) ("ITMAX" . 928608) ("STEPMAX" . 889327) ("TOLF" . 889330) ("TOLMIN" . 889334) ("TOLX" . 889337)))
+    ("NORM" fun nil (system) "Result = %s( A)" ("N6.html" ("DOUBLE" . 889381) ("LNORM" . 929047)))
+    ("OBJ" fun nil (system) "Result = %s->[IDLitManipulatorManager::][IDLitManipulatorManager::]->GetDefaultManipulator()" ("objects_it125.html" ("REFERENCE" . 1004397)))
+    ("OBJ_CLASS" fun nil (system) "Result = %s( [Arg])" ("O.html" ("COUNT" . 889415) ("SUPERCLASS" . 889418)))
+    ("OBJ_ISA" fun nil (system) "Result = %s(ObjectInstance, ClassName)" ("O3.html"))
+    ("OBJ_NEW" fun nil (system) "Result = %s( [ObjectClassName [, Arg1......Argn]] )" ("O4.html"))
+    ("OBJ_VALID" fun nil (system) "Result = %s( [Arg])" ("O5.html" ("CAST" . 889505) ("COUNT" . 889508)))
+    ("OBJARR" fun nil (system) "Result = %s( D1 [, ..., D8])" ("O6.html" ("NOZERO" . 889547)))
+    ("P_CORRELATE" fun nil (system) "Result = %s( X, Y, C)" ("P.html" ("DOUBLE" . 1073021)))
+    ("PATH_SEP" fun nil (system) "Result = %s()" ("P4.html" ("PARENT_DIRECTORY" . 1076856) ("SEARCH_PATH" . 1076858)))
+    ("PCOMP" fun nil (system) "Result = %s( A)" ("P5.html" ("COEFFICIENTS" . 844766) ("COVARIANCE" . 844768) ("DOUBLE" . 844770) ("EIGENVALUES" . 844772) ("NVARIABLES" . 844774) ("STANDARDIZE" . 844776) ("VARIANCES" . 844778)))
+    ("PNT_LINE" fun nil (system) "Result = %s( P0, L0, L1 [, Pl])" ("P11.html" ("INTERVAL" . 758337)))
+    ("POLAR_SURFACE" fun nil (system) "Result = %s( Z, R, Theta)" ("P14.html" ("BOUNDS" . 753641) ("GRID" . 753637) ("MISSING" . 753645) ("QUINTIC" . 753643) ("SPACING" . 753639)))
+    ("POLY" fun nil (system) "Result = %s(X, C)" ("P15.html"))
+    ("POLY_2D" fun nil (system) "Result = %s( Array, P, Q [, Interp [, Dimx, Dimy]])" ("P16.html" ("CUBIC" . 678217) ("MISSING" . 680892)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("POLY_AREA" fun nil (system) "Result = %s( X, Y)" ("P17.html" ("DOUBLE" . 1074988) ("SIGNED" . 1074986)))
+    ("POLY_FIT" fun nil (system) "Result = %s( X, Y, Degree)" ("P18.html" ("CHISQ" . 1073859) ("COVAR" . 1073862) ("DOUBLE" . 837040) ("MEASURE_ERRORS" . 1074498) ("SIGMA" . 1074050) ("STATUS" . 1073417) ("YBAND" . 1074058) ("YERROR" . 1074060) ("YFIT" . 1074062)))
+    ("POLYFILLV" fun nil (system) "Result = %s( X, Y, Sx, Sy [, Run_Length] )" ("P20.html"))
+    ("POLYSHADE" fun nil (system) "Result = %s( Vertices, Polygons) or Result = %s(X, Y, Z, Polygons)" ("P21.html" ("DATA" . 678323) ("NORMAL" . 678325) ("POLY_SHADES" . 678327) ("SHADES" . 678329) ("T3D" . 678331) ("TOP" . 678333) ("XSIZE" . 678335) ("YSIZE" . 678338)))
+    ("PRIMES" fun nil (system) "Result = %s(K)" ("P25.html"))
+    ("PRODUCT" fun nil (system) "Result = %s(Array [, Dimension])" ("P29.html" ("CUMULATIVE" . 1088999) ("INTEGER" . 1111663) ("NAN" . 1089001) ("PRESERVE_TYPE" . 1112722)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("PROFILE" fun nil (system) "Result = %s( Image [, XX, YY])" ("P30.html" ("NOMARK" . 757684) ("XSTART" . 757687) ("YSTART" . 757690)))
+    ("PROJECT_VOL" fun nil (system) "Result = %s( Vol, X_Sample, Y_Sample, Z_Sample)" ("P33.html" ("AVG_INTENSITY" . 786865) ("CUBIC" . 1105686) ("DEPTH_Q" . 1105735) ("OPAQUE" . 786868) ("TRANS" . 786871) ("XSIZE" . 1105761) ("YSIZE" . 1105822) ("Z_BUFFER" . 1105820)))
+    ("PTR_NEW" fun nil (system) "Result = %s( [InitExpr])" ("P38.html" ("ALLOCATE_HEAP" . 845063) ("NO_COPY" . 845065)))
+    ("PTR_VALID" fun nil (system) "Result = %s( [Arg])" ("P39.html" ("CAST" . 863586) ("COUNT" . 863622)))
+    ("PTRARR" fun nil (system) "Result = %s( D1, ... ..., D8)" ("P40.html" ("ALLOCATE_HEAP" . 845095) ("NOZERO" . 845097)))
+    ("QGRID3" fun nil (system) "Result = %s( XYZ, F, Tetrahedra)" ("Q.html" ("DELTA" . 1073303) ("DIMENSION" . 1073305) ("MISSING" . 1073307) ("START" . 1073309)))
+    ("QROMB" fun nil (system) "Result = %s( Func, A, B)" ("Q3.html" ("DOUBLE" . 51533) ("EPS" . 51536) ("JMAX" . 51539) ("K" . 51542)))
+    ("QROMO" fun nil (system) "Result = %s(Func, A [, B])" ("Q4.html" ("DOUBLE" . 51594) ("EPS" . 51597) ("JMAX" . 51600) ("K" . 51603) ("MIDEXP" . 51606) ("MIDINF" . 51609) ("MIDPNT" . 51612) ("MIDSQL" . 51615) ("MIDSQU" . 51618)))
+    ("QSIMP" fun nil (system) "Result = %s( Func, A, B)" ("Q5.html" ("DOUBLE" . 51671) ("EPS" . 51674) ("JMAX" . 51677)))
+    ("QUERY_BMP" fun nil (system) "Result = %s ( Filename [, Info] )" ("Q7.html"))
+    ("QUERY_DICOM" fun nil (system) "Result = %s( Filename [, Info])" ("Q8.html" ("IMAGE_INDEX" . 1045358)))
+    ("QUERY_GIF" fun nil (system) "Result = %s ( Filename [, Info] )" ("Q9.html"))
+    ("QUERY_IMAGE" fun nil (system) "Result = %s ( Filename[, Info])" ("Q10.html" ("CHANNELS" . 1070109) ("DIMENSIONS" . 1070111) ("HAS_PALETTE" . 1070113) ("IMAGE_INDEX" . 1070115) ("NUM_IMAGES" . 1070117) ("PIXEL_TYPE" . 1070119) ("SUPPORTED_READ" . 1070131) ("SUPPORTED_WRITE" . 1070133) ("TYPE" . 1104573)))
+    ("QUERY_JPEG" fun nil (system) "Result = %s ( Filename [, Info] )" ("Q11.html"))
+    ("QUERY_JPEG2000" fun nil (system) "Result = %s(Filename [, Info] )" ("Q12.html"))
+    ("QUERY_MRSID" fun nil (system) "Result = %s( Filename [, Info])" ("Q13.html" ("LEVEL" . 1073601)))
+    ("QUERY_PICT" fun nil (system) "Result = %s ( Filename [, Info] )" ("Q14.html"))
+    ("QUERY_PNG" fun nil (system) "Result = %s ( Filename [, Info] )" ("Q15.html"))
+    ("QUERY_PPM" fun nil (system) "Result = %s ( Filename [, Info])" ("Q16.html" ("MAXVAL" . 1045715)))
+    ("QUERY_SRF" fun nil (system) "Result = %s (Filename [, Info] )" ("Q17.html"))
+    ("QUERY_TIFF" fun nil (system) "Result = %s ( Filename [, Info])" ("Q18.html" ("GEOTIFF" . 1091493) ("IMAGE_INDEX" . 1045788)))
+    ("QUERY_WAV" fun nil (system) "Result = %s ( Filename[, Info] )" ("Q19.html"))
+    ("R_CORRELATE" fun nil (system) "Result = %s( X, Y)" ("R.html" ("D" . 54014) ("KENDALL" . 54017) ("PROBD" . 54020) ("ZD" . 54023)))
+    ("R_TEST" fun nil (system) "Result = %s( X)" ("R2.html" ("N0" . 54060) ("N1" . 54063) ("R" . 54066)))
+    ("RADON" fun nil (system) "Result = %s( Array)" ("R3.html" ("BACKPROJECT" . 1081929) ("DOUBLE" . 1081932) ("DRHO" . 1081934) ("DX" . 1081936) ("DY" . 1081938) ("GRAY" . 1081940) ("LINEAR" . 1081942) ("NRHO" . 1081944) ("NTHETA" . 1081946) ("NX" . 1081948) ("NY" . 1081950) ("RHO" . 1081952) ("RMIN" . 1081954) ("THETA" . 1081956) ("XMIN" . 1081958) ("YMIN" . 1081960)))
+    ("RANDOMN" fun nil (system) "Result = %s( Seed [, D1 [, ..., D8]])" ("R4.html" ("BINOMIAL" . 867947) ("DOUBLE" . 867736) ("GAMMA" . 1080709) ("LONG" . 1080819) ("NORMAL" . 867741) ("POISSON" . 867743) ("UNIFORM" . 867744)))
+    ("RANDOMU" fun nil (system) "Result = %s( Seed [, D1 [, ..., D8]])" ("R5.html" ("BINOMIAL" . 868252) ("DOUBLE" . 1080874) ("GAMMA" . 868213) ("LONG" . 1080854) ("NORMAL" . 868216) ("POISSON" . 868219) ("UNIFORM" . 868222)))
+    ("RANKS" fun nil (system) "Result = %s(X)" ("R6.html"))
+    ("READ_ASCII" fun nil (system) "Result = %s( [Filename])" ("R9.html" ("COMMENT_SYMBOL" . 864824) ("COUNT" . 864541) ("DATA_START" . 864606) ("DELIMITER" . 865250) ("HEADER" . 865253) ("MISSING_VALUE" . 864515) ("NUM_RECORDS" . 864373) ("RECORD_START" . 678426) ("TEMPLATE" . 863940) ("VERBOSE" . 863965)))
+    ("READ_BINARY" fun nil (system) "Result = %s ([Filename] | FileUnit)" ("R10.html" ("DATA_DIMS" . 1071927) ("DATA_START" . 1071929) ("DATA_TYPE" . 1071931) ("ENDIAN" . 1071933) ("TEMPLATE" . 1071937)))
+    ("READ_BMP" fun nil (system) "Result = %s( Filename, [, R, G, B] [, Ihdr])" ("R11.html" ("RGB" . 867600)))
+    ("READ_DICOM" fun nil (system) "Result = %s (Filename [, Red, Green, Blue])" ("R12.html" ("IMAGE_INDEX" . 1045423)))
+    ("READ_IMAGE" fun nil (system) "Result = %s (Filename [, Red, Green, Blue])" ("R14.html" ("IMAGE_INDEX" . 1071963)))
+    ("READ_JPEG2000" fun nil (system) "Result = %s(Filename [, Red, Green, Blue])" ("R17.html" ("DISCARD_LEVELS" . 1171494) ("MAX_LAYERS" . 1171497) ("ORDER" . 1171500) ("REGION" . 1171503)))
+    ("READ_MRSID" fun nil (system) "Result = %s ( Filename)" ("R18.html" ("LEVEL" . 1086317) ("SUB_RECT" . 1086319)))
+    ("READ_PNG" fun nil (system) "Result = %s ( Filename [, R, G, B])" ("R20.html" ("ORDER" . 1045842) ("TRANSPARENT" . 1045845) ("VERBOSE" . 1075225)))
+    ("READ_SPR" fun nil (system) "Result = %s(Filename)" ("R22.html"))
+    ("READ_SYLK" fun nil (system) "Result = %s( File)" ("R24.html" ("ARRAY" . 67837) ("COLMAJOR" . 67840) ("NCOLS" . 67844) ("NROWS" . 67847) ("STARTCOL" . 67850) ("STARTROW" . 67853) ("USEDOUBLES" . 67856) ("USELONGS" . 67859)))
+    ("READ_TIFF" fun nil (system) "Result = %s( Filename [, R, G, B])" ("R25.html" ("CHANNELS" . 1078044) ("DOT_RANGE" . 1134312) ("GEOTIFF" . 966463) ("ICC_PROFILE" . 1134317) ("IMAGE_INDEX" . 966504) ("INTERLEAVE" . 1077871) ("ORIENTATION" . 948922) ("PHOTOSHOP" . 1134329) ("PLANARCONFIG" . 1086578) ("SUB_RECT" . 966525) ("VERBOSE" . 966492)))
+    ("READ_WAV" fun nil (system) "Result = %s ( Filename [, Rate] )" ("R26.html"))
+    ("READ_XWD" fun nil (system) "Result = %s( Filename[, R, G, B] )" ("R29.html"))
+    ("REAL_PART" fun nil (system) "Result = %s(Z)" ("R32.html"))
+    ("REBIN" fun nil (system) "Result = %s( Array, D1 [, ..., D8])" ("R33.html" ("SAMPLE" . 678500)))
+    ("RECALL_COMMANDS" fun nil (system) "Result = %s()" ("R34.html"))
+    ("RECON3" fun nil (system) "Result = %s( Images, Obj_Rot, Obj_Pos, Focal, Dist,Vol_Pos, Img_Ref, Img_Mag, Vol_Size)" ("R35.html" ("CUBIC" . 1079063) ("MISSING" . 787003) ("MODE" . 787006) ("QUIET" . 1086709)))
+    ("REFORM" fun nil (system) "Result = %s( Array, D1 [, ..., D8])" ("R37.html" ("OVERWRITE" . 678529)))
+    ("REGION_GROW" fun nil (system) "Result = %s(Array, ROIPixels)" ("R38.html" ("ALL_NEIGHBORS" . 1086463) ("NAN" . 1168470) ("STDDEV_MULTIPLIER" . 1086465) ("THRESHOLD" . 1086469)))
+    ("REGRESS" fun nil (system) "Result = %s( X, Y)" ("R40.html" ("CHISQ" . 1078522) ("CONST" . 1078527) ("CORRELATION" . 1078530) ("DOUBLE" . 1078533) ("FTEST" . 1078535) ("MCORRELATION" . 1078538) ("MEASURE_ERRORS" . 1080427) ("RELATIVE_WEIGHT" . 1080465) ("SIGMA" . 1080460) ("STATUS" . 1078543) ("YFIT" . 1078803)))
+    ("REPLICATE" fun nil (system) "Result = %s( Value, D1 [, ..., D8] )" ("R42.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("REVERSE" fun nil (system) "Result = %s( Array [, Subscript_Index])" ("R49.html" ("OVERWRITE" . 1077839)))
+    ("RK4" fun nil (system) "Result = %s( Y, Dydx, X, H, Derivs)" ("R50.html" ("DOUBLE" . 51771)))
+    ("ROBERTS" fun nil (system) "Result = %s(Image)" ("R51.html"))
+    ("ROT" fun nil (system) "Result = %s( A, Angle, [Mag, X0, Y0])" ("R52.html" ("CUBIC" . 758912) ("INTERP" . 758909) ("MISSING" . 758915) ("PIVOT" . 758918)))
+    ("ROTATE" fun nil (system) "Result = %s(Array, Direction)" ("R53.html"))
+    ("ROUND" fun nil (system) "Result = %s(X)" ("R54.html" ("L64" . 1073244)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ROUTINE_INFO" fun nil (system) "Result = %s( [Routine])" ("R55.html" ("DISABLED" . 1068792) ("ENABLED" . 1068823) ("FUNCTIONS" . 1068790) ("PARAMETERS" . 845189) ("SOURCE" . 845200) ("SYSTEM" . 845207) ("UNRESOLVED" . 845209) ("VARIABLES" . 845211)))
+    ("RS_TEST" fun nil (system) "Result = %s( X, Y)" ("R56.html" ("UX" . 54144) ("UY" . 54147)))
+    ("S_TEST" fun nil (system) "Result = %s( X, Y)" ("S.html" ("ZDIFF" . 54194)))
+    ("SAVGOL" fun nil (system) "Result = %s( Nleft, Nright, Order, Degree)" ("S3.html" ("DOUBLE" . 1098051)))
+    ("SCOPE_LEVEL" fun nil (system) "Result = %s()" ("S6.html"))
+    ("SCOPE_VARFETCH" fun nil (system) "Result = %s(VarName)" ("S7.html" ("COMMON" . 1215122) ("ENTER" . 1215135) ("LEVEL" . 1215145) ("REF_EXTRA" . 1215173)))
+    ("SCOPE_VARNAME" fun nil (system) "Result = %s( [Var1[, ..., Varn]])" ("S8.html" ("COMMON" . 1215382) ("COUNT" . 1215393) ("LEVEL" . 1215399)))
+    ("SEARCH2D" fun nil (system) "Result = %s( Array, Xpos, Ypos, Min_Val, Max_Val)" ("S9.html" ("DECREASE" . 758963) ("DIAGONAL" . 758972) ("INCREASE" . 758966) ("LPF_BAND" . 758969)))
+    ("SEARCH3D" fun nil (system) "Result = %s( Array, Xpos, Ypos, Zpos, Min_Val, Max_Val)" ("S10.html" ("DECREASE" . 759017) ("DIAGONAL" . 759026) ("INCREASE" . 759020) ("LPF_BAND" . 759023)))
+    ("SFIT" fun nil (system) "Result = %s( Data, Degree)" ("S15.html" ("IRREGULAR" . 1198892) ("KX" . 1199079) ("MAX_DEGREE" . 1198955)))
+    ("SHIFT" fun nil (system) "Result = %s(Array, S1, ..., Sn)" ("S19.html"))
+    ("SHMDEBUG" fun nil (system) "Result = %s(Enable)" ("S20.html"))
+    ("SHMVAR" fun nil (system) "Result = %s(SegmentName [, D1, ..., D8])" ("S23.html" ("BYTE" . 1143650) ("COMPLEX" . 1143652) ("DCOMPLEX" . 1143654) ("DIMENSION" . 1143656) ("DOUBLE" . 1143658) ("FLOAT" . 1143660) ("INTEGER" . 1143662) ("L64" . 1143664) ("LONG" . 1143666) ("SIZE" . 1143668) ("TEMPLATE" . 1143673) ("TYPE" . 1143675) ("UINT" . 1143680) ("UL64" . 1143684) ("ULONG" . 1143682)))
+    ("SIMPLEX" fun nil (system) "Result = %s( Zequation, Constraints, M1, M2, M3 [, Tableau [, Izrov [, Iposv]]])" ("S26.html" ("DOUBLE" . 1103779) ("EPS" . 1103781) ("STATUS" . 1103783)))
+    ("SIN" fun nil (system) "Result = %s(X)" ("S27.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("SINDGEN" fun nil (system) "Result = %s(D1 [, ..., D8])" ("S28.html"))
+    ("SINH" fun nil (system) "Result = %s(X)" ("S29.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("SIZE" fun nil (system) "Result = %s( Expression)" ("S30.html" ("DIMENSIONS" . 901281) ("FILE_LUN" . 901288) ("FILE_OFFSET" . 1199822) ("L64" . 1082592) ("N_DIMENSIONS" . 1082662) ("N_ELEMENTS" . 901298) ("SNAME" . 1199867) ("STRUCTURE" . 901301) ("TNAME" . 901328) ("TYPE" . 901331)))
+    ("SKEWNESS" fun nil (system) "Result = %s( X)" ("S31.html" ("DOUBLE" . 901912) ("NAN" . 903224)))
+    ("SMOOTH" fun nil (system) "Result = %s( Array, Width)" ("S35.html" ("EDGE_TRUNCATE" . 113915) ("MISSING" . 1101098) ("NAN" . 1101095)))
+    ("SOBEL" fun nil (system) "Result = %s(Image)" ("S36.html"))
+    ("SORT" fun nil (system) "Result = %s(Array)" ("S38.html" ("L64" . 1082892)))
+    ("SPH_SCAT" fun nil (system) "Result = %s( Lon, Lat, F)" ("S41.html" ("BOUNDS" . 126851) ("BOUT" . 126868) ("GOUT" . 126871) ("GS" . 126862) ("NLAT" . 126875) ("NLON" . 126858)))
+    ("SPHER_HARM" fun nil (system) "Result = %s( Theta, Phi, L, M)" ("S42.html" ("DOUBLE" . 1098257)))
+    ("SPL_INIT" fun nil (system) "Result = %s( X, Y)" ("S43.html" ("DOUBLE" . 51818) ("YP0" . 51822) ("YPN_1" . 1095878)))
+    ("SPL_INTERP" fun nil (system) "Result = %s( X, Y, Y2, X2)" ("S44.html" ("DOUBLE" . 51859)))
+    ("SPLINE" fun nil (system) "Result = %s( X, Y, T [, Sigma])" ("S45.html" ("DOUBLE" . 1134574)))
+    ("SPRSAB" fun nil (system) "Result = %s( A, B)" ("S47.html" ("DOUBLE" . 51917) ("THRESHOLD" . 51920)))
+    ("SPRSAX" fun nil (system) "Result = %s( A, X)" ("S48.html" ("DOUBLE" . 51985)))
+    ("SPRSIN" fun nil (system) "Result = %s( A)" ("S49.html" ("COLUMN" . 58754) ("DOUBLE" . 52033) ("THRESHOLD" . 52036)))
+    ("SPRSTP" fun nil (system) "Result = %s(A)" ("S50.html"))
+    ("SQRT" fun nil (system) "Result = %s(X)" ("S51.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("STANDARDIZE" fun nil (system) "Result = %s( A)" ("S52.html" ("DOUBLE" . 844918)))
+    ("STDDEV" fun nil (system) "Result = %s( X)" ("S53.html" ("DOUBLE" . 901885) ("NAN" . 903234)))
+    ("STRARR" fun nil (system) "Result = %s(D1 [, ..., D8])" ("S55.html"))
+    ("STRCMP" fun nil (system) "Result = %s( String1, String2 [, N])" ("S56.html" ("FOLD_CASE" . 1069071)))
+    ("STRCOMPRESS" fun nil (system) "Result = %s( String)" ("S57.html" ("REMOVE_ALL" . 679044)))
+    ("STREGEX" fun nil (system) "Result = %s( StringExpression, RegularExpression)" ("S59.html" ("BOOLEAN" . 1069164) ("EXTRACT" . 1069170) ("FOLD_CASE" . 1069177) ("LENGTH" . 1069182) ("SUBEXPR" . 1069190)))
+    ("STRING" fun nil (system) "Result = %s( Expression1, ..., Expressionn)" ("S61.html" ("AM_PM" . 1015738) ("DAYS_OF_WEEK" . 1015740) ("FORMAT" . 1015736) ("MONTHS" . 1015759) ("PRINT" . 679063)))
+    ("STRJOIN" fun nil (system) "Result = %s( String [, Delimiter])" ("S62.html" ("SINGLE" . 1070986)))
+    ("STRLEN" fun nil (system) "Result = %s(Expression)" ("S63.html"))
+    ("STRLOWCASE" fun nil (system) "Result = %s(String)" ("S64.html"))
+    ("STRMATCH" fun nil (system) "Result = %s( String, SearchString)" ("S65.html" ("FOLD_CASE" . 1071246)))
+    ("STRMESSAGE" fun nil (system) "Result = %s( Err)" ("S66.html" ("BLOCK" . 923971) ("CODE" . 923974) ("NAME" . 923979)))
+    ("STRMID" fun nil (system) "Result = %s(Expression, First_Character [, Length])" ("S67.html" ("REVERSE_OFFSET" . 1074174)))
+    ("STRPOS" fun nil (system) "Result = %s( Expression, Search_String [, Pos])" ("S68.html" ("REVERSE_OFFSET" . 1074185) ("REVERSE_SEARCH" . 1074254)))
+    ("STRSPLIT" fun nil (system) "Result = %s( String [, Pattern])" ("S70.html" ("COUNT" . 1071730) ("ESCAPE" . 1153687) ("EXTRACT" . 1071749) ("FOLD_CASE" . 1071757) ("LENGTH" . 1071761) ("PRESERVE_NULL" . 1071767) ("REGEX" . 1071772)))
+    ("STRTRIM" fun nil (system) "Result = %s( String [, Flag] )" ("S71.html"))
+    ("STRUPCASE" fun nil (system) "Result = %s(String)" ("S74.html"))
+    ("SVDFIT" fun nil (system) "Result = %s( X, Y [, M])" ("S78.html" ("A" . 845481) ("CHISQ" . 845501) ("COVAR" . 845503) ("DOUBLE" . 845488) ("FUNCTION_NAME" . 754160) ("LEGENDRE" . 1093586) ("MEASURE_ERRORS" . 1094756) ("SIGMA" . 1093549) ("SING_VALUES" . 1144017) ("SINGULAR" . 845513) ("STATUS" . 1143910) ("TOL" . 1144024) ("VARIANCE" . 845515) ("WEIGHTS" . 1093555) ("YFIT" . 754165)))
+    ("SVSOL" fun nil (system) "Result = %s( U, W, V, B)" ("S79.html" ("COLUMN" . 58776) ("DOUBLE" . 52150)))
+    ("SWAP_ENDIAN" fun nil (system) "Result = %s(Variable)" ("S80.html" ("SWAP_IF_BIG_ENDIAN" . 1110629) ("SWAP_IF_LITTLE_ENDIAN" . 1110632)))
+    ("SYSTIME" fun nil (system) "String = %s( [0 [, ElaspedSeconds]])" ("S83.html" ("JULIAN" . 1015505) ("SECONDS" . 1015507) ("UTC" . 1083080)))
+    ("T_CVF" fun nil (system) "Result = %s(P, Df)" ("T.html"))
+    ("T_PDF" fun nil (system) "Result = %s(V, Df)" ("T2.html"))
+    ("TAG_NAMES" fun nil (system) "Result = %s( Expression)" ("T4.html" ("STRUCTURE_NAME" . 679363)))
+    ("TAN" fun nil (system) "Result = %s(X)" ("T5.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("TANH" fun nil (system) "Result = %s(X)" ("T6.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("TEMPORARY" fun nil (system) "Result = %s(Variable)" ("T8.html"))
+    ("TETRA_CLIP" fun nil (system) "Result = %s ( Plane, Vertsin, Connin, Vertsout, Connout)" ("T9.html" ("AUXDATA_IN" . 1071827) ("AUXDATA_OUT" . 1071829) ("CUT_VERTS" . 1071831)))
+    ("TETRA_SURFACE" fun nil (system) "Result = %s (Verts, Connin)" ("T10.html"))
+    ("TETRA_VOLUME" fun nil (system) "Result = %s ( Verts, Conn)" ("T11.html" ("AUXDATA" . 1071864) ("MOMENT" . 1071866)))
+    ("THIN" fun nil (system) "Result = %s( Image)" ("T12.html" ("NEIGHBOR_COUNT" . 1069698) ("PRUNE" . 1069716)))
+    ("TIMEGEN" fun nil (system) "Result = %s( [D1,...,D8])" ("T15.html" ("DAYS" . 1077148) ("FINAL" . 1077151) ("HOURS" . 1077154) ("MINUTES" . 1077156) ("MONTHS" . 1077158) ("SECONDS" . 1077160) ("START" . 1077162) ("STEP_SIZE" . 1077166) ("UNITS" . 1077168) ("YEAR" . 1077211)))
+    ("TM_TEST" fun nil (system) "Result = %s( X, Y)" ("T16.html" ("PAIRED" . 54299) ("UNEQUAL" . 54302)))
+    ("TOTAL" fun nil (system) "Result = %s( Array [, Dimension])" ("T17.html" ("CUMULATIVE" . 1070565) ("DOUBLE" . 1070569) ("INTEGER" . 1115757) ("NAN" . 47220) ("PRESERVE_TYPE" . 1116699)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("TRACE" fun nil (system) "Result = %s( A)" ("T18.html" ("DOUBLE" . 845005)))
+    ("TRANSPOSE" fun nil (system) "Result = %s( Array [, P] )" ("T19.html"))
+    ("TRI_SURF" fun nil (system) "Result = %s( Z [, X, Y])" ("T20.html" ("BOUNDS" . 758634) ("EXTRAPOLATE" . 758607) ("GS" . 758631) ("LINEAR" . 758610) ("MISSING" . 949473) ("NX" . 758637) ("NY" . 758640) ("REGULAR" . 851712) ("XGRID" . 758617) ("XVALUES" . 758620) ("YGRID" . 758623) ("YVALUES" . 758626)))
+    ("TRIGRID" fun nil (system) "Result = %s( X, Y, Z, Triangles [, GS, Limits] ) or Result = %s( F , GS, Limits)" ("T22.html" ("DEGREES" . 679620) ("EXTRAPOLATE" . 126730) ("INPUT" . 128106) ("MAX_VALUE" . 128088) ("MIN_VALUE" . 128089) ("MISSING" . 679622) ("NX" . 1076987) ("NY" . 1076989) ("QUINTIC" . 679624) ("SPHERE" . 126737) ("XGRID" . 837019) ("XOUT" . 1075935) ("YGRID" . 837021) ("YOUT" . 1075879)))
+    ("TRISOL" fun nil (system) "Result = %s( A, B, C, R)" ("T25.html" ("DOUBLE" . 52330)))
+    ("TS_COEF" fun nil (system) "Result = %s( X, P)" ("T27.html" ("DOUBLE" . 1076434) ("MSE" . 54734)))
+    ("TS_DIFF" fun nil (system) "Result = %s( X, K)" ("T28.html" ("DOUBLE" . 861958)))
+    ("TS_FCAST" fun nil (system) "Result = %s( X, P, Nvalues)" ("T29.html" ("BACKCAST" . 223046) ("DOUBLE" . 223055)))
+    ("TS_SMOOTH" fun nil (system) "Result = %s( X, Nvalues)" ("T30.html" ("BACKWARD" . 223123) ("DOUBLE" . 223168) ("FORWARD" . 223093) ("ORDER" . 223094)))
+    ("TVRD" fun nil (system) "Result = %s( [X0 [, Y0 [, Nx [, Ny [, Channel]]]]])" ("T34.html" ("CHANNEL" . 679790) ("ORDER" . 679793) ("TRUE" . 679795) ("WORDS" . 679797)))
+    ("UINDGEN" fun nil (system) "Result = %s(D1 [, ..., D8])" ("U.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("UINT" fun nil (system) "Result = %s( Expression[, Offset [, D1 [, ..., D8]]] )" ("U2.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("UINTARR" fun nil (system) "Result = %s( D1 [, ..., D8])" ("U3.html" ("NOZERO" . 950261)))
+    ("UL64INDGEN" fun nil (system) "Result = %s(D1 [, ..., D8])" ("U4.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ULINDGEN" fun nil (system) "Result = %s(D1 [, ..., D8])" ("U5.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ULON64ARR" fun nil (system) "Result = %s( D1 [, ..., D8])" ("U6.html" ("NOZERO" . 950420)))
+    ("ULONARR" fun nil (system) "Result = %s( D1 [, ..., D8])" ("U7.html" ("NOZERO" . 950477)))
+    ("ULONG" fun nil (system) "Result = %s( Expression[, Offset [, D1 [, ..., D8]]] )" ("U8.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("ULONG64" fun nil (system) "Result = %s( Expression[, Offset [, D1 [, ..., D8]]] )" ("U9.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("UNIQ" fun nil (system) "Result = %s( Array [, Index] )" ("U10.html"))
+    ("UNSHARP_MASK" fun nil (system) "Result = %s(Image)" ("U11.html" ("AMOUNT" . 968717) ("RADIUS" . 968720) ("THRESHOLD" . 968725) ("TRUE" . 968729)))
+    ("VALUE_LOCATE" fun nil (system) "Result = %s ( Vector, Value)" ("V.html" ("L64" . 957054)))
+    ("VARIANCE" fun nil (system) "Result = %s( X)" ("V2.html" ("DOUBLE" . 938748) ("NAN" . 938858)))
+    ("VERT_T3D" fun nil (system) "Result = %s( Vertex_List)" ("V6.html" ("DOUBLE" . 787625) ("MATRIX" . 957551) ("NO_COPY" . 787628) ("NO_DIVIDE" . 787631) ("SAVE_DIVIDE" . 787634)))
+    ("VOIGT" fun nil (system) "Result = %s(A, U)" ("V7.html") ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("VOXEL_PROJ" fun nil (system) "Result = %s( V [, RGBO])" ("V9.html" ("BACKGROUND" . 677308) ("CUTTING_PLANE" . 680823) ("INTERPOLATE" . 680824) ("MAXIMUM_INTENSITY" . 680825) ("STEP" . 680826) ("XSIZE" . 680827) ("YSIZE" . 680828) ("ZBUFFER" . 680829) ("ZPIXELS" . 680830)))
+    ("WARP_TRI" fun nil (system) "Result = %s( Xo, Yo, Xi, Yi, Image)" ("W2.html" ("EXTRAPOLATE" . 758734) ("OUTPUT_SIZE" . 758728) ("QUINTIC" . 758731) ("TPS" . 967342)))
+    ("WATERSHED" fun nil (system) "Result = %s ( Image)" ("W3.html" ("CONNECTIVITY" . 961172) ("LONG" . 1049951) ("NREGIONS" . 1049960)))
+    ("WHERE" fun nil (system) "Result = %s( Array_Expression [, Count])" ("W7.html" ("COMPLEMENT" . 964874) ("L64" . 964006) ("NCOMPLEMENT" . 964887)) ("tpoolkeyw2.html" ("TPOOL_MAX_ELTS" . 333417) ("TPOOL_MIN_ELTS" . 333286) ("TPOOL_NOTHREAD" . 333289)))
+    ("WIDGET_ACTIVEX" fun nil (system) "Result = %s( Parent, COM_ID)" ("W9.html" ("ALIGN_BOTTOM" . 970441) ("ALIGN_CENTER" . 970444) ("ALIGN_LEFT" . 970446) ("ALIGN_RIGHT" . 970448) ("ALIGN_TOP" . 970450) ("EVENT_FUNC" . 970453) ("EVENT_PRO" . 970455) ("FUNC_GET_VALUE" . 970458) ("ID_TYPE" . 970461) ("KILL_NOTIFY" . 970465) ("NO_COPY" . 970471) ("NOTIFY_REALIZE" . 970475) ("PRO_SET_VALUE" . 970479) ("SCR_XSIZE" . 970483) ("SCR_YSIZE" . 970486) ("SENSITIVE" . 970488) ("UNAME" . 1003671) ("UNITS" . 970503) ("UVALUE" . 970505) ("XOFFSET" . 970510) ("XSIZE" . 970513) ("YOFFSET" . 970515) ("YSIZE" . 970518)))
+    ("WIDGET_BASE" fun nil (system) "Result = %s( [Parent])" ("W10.html" ("ALIGN_BOTTOM" . 679920) ("ALIGN_CENTER" . 107036) ("ALIGN_LEFT" . 107030) ("ALIGN_RIGHT" . 107035) ("ALIGN_TOP" . 107037) ("BASE_ALIGN_BOTTOM" . 107046) ("BASE_ALIGN_CENTER" . 107047) ("BASE_ALIGN_LEFT" . 107048) ("BASE_ALIGN_RIGHT" . 107049) ("BASE_ALIGN_TOP" . 107050) ("COLUMN" . 107029) ("CONTEXT_EVENTS" . 917417) ("CONTEXT_MENU" . 970908) ("DISPLAY_NAME" . 970988) ("EVENT_FUNC" . 679923) ("EVENT_PRO" . 679925) ("EXCLUSIVE" . 679927) ("FLOATING" . 911154) ("FRAME" . 679931) ("FUNC_GET_VALUE" . 679933) ("GRID_LAYOUT" . 679935) ("GROUP_LEADER" . 895915) ("KBRD_FOCUS_EVENTS" . 912183) ("KILL_NOTIFY" . 679938) ("MAP" . 108526) ("MBAR" . 934563) ("MODAL" . 910174) ("NO_COPY" . 106818) ("NONEXCLUSIVE" . 679946) ("NOTIFY_REALIZE" . 67508) ("PRO_SET_VALUE" . 679949) ("RESOURCE_NAME" . 281150) ("RNAME_MBAR" . 72437) ("ROW" . 679951) ("SCR_XSIZE" . 948019) ("SCR_YSIZE" . 58070) ("SCROLL" . 679954) ("SENSITIVE" . 948204) ("SPACE" . 679957) ("TAB_MODE" . 1068884) ("TITLE" . 679959) ("TLB_FRAME_ATTR" . 977197) ("TLB_ICONIFY_EVENTS" . 984484) ("TLB_KILL_REQUEST_EVENTS" . 192742) ("TLB_MOVE_EVENTS" . 984511) ("TLB_SIZE_EVENTS" . 679965) ("TOOLBAR" . 978753) ("TRACKING_EVENTS" . 58059) ("UNAME" . 949220) ("UNITS" . 895507) ("UVALUE" . 679967) ("X_SCROLL_SIZE" . 679980) ("XOFFSET" . 679972) ("XPAD" . 679975) ("XSIZE" . 679977) ("Y_SCROLL_SIZE" . 679991) ("YOFFSET" . 679983) ("YPAD" . 679986) ("YSIZE" . 679988)))
+    ("WIDGET_BUTTON" fun nil (system) "Result = %s( Parent)" ("W11.html" ("ACCELERATOR" . 1069174) ("ALIGN_CENTER" . 680015) ("ALIGN_LEFT" . 57956) ("ALIGN_RIGHT" . 57957) ("BITMAP" . 192775) ("CHECKED_MENU" . 978512) ("DYNAMIC_RESIZE" . 978508) ("EVENT_FUNC" . 106419) ("EVENT_PRO" . 680017) ("FONT" . 680019) ("FRAME" . 680021) ("FUNC_GET_VALUE" . 108837) ("GROUP_LEADER" . 680025) ("HELP" . 57994) ("KILL_NOTIFY" . 680028) ("MENU" . 680031) ("NO_COPY" . 109087) ("NO_RELEASE" . 680036) ("NOTIFY_REALIZE" . 67569) ("PRO_SET_VALUE" . 680038) ("PUSHBUTTON_EVENTS" . 1019958) ("RESOURCE_NAME" . 724023) ("SCR_XSIZE" . 67277) ("SCR_YSIZE" . 67280) ("SENSITIVE" . 948118) ("SEPARATOR" . 58000) ("TAB_MODE" . 1069036) ("TOOLTIP" . 982062) ("TRACKING_EVENTS" . 982064) ("UNAME" . 949273) ("UNITS" . 895525) ("UVALUE" . 680040) ("VALUE" . 680044) ("X_BITMAP_EXTRA" . 680046) ("XOFFSET" . 680048) ("XSIZE" . 680051) ("YOFFSET" . 680054) ("YSIZE" . 680057)))
+    ("WIDGET_COMBOBOX" fun nil (system) "Result = %s( Parent)" ("W12.html" ("DYNAMIC_RESIZE" . 1011945) ("EDITABLE" . 1011949) ("EVENT_FUNC" . 1011951) ("EVENT_PRO" . 1011953) ("FONT" . 1011955) ("FRAME" . 1011964) ("FUNC_GET_VALUE" . 1011967) ("GROUP_LEADER" . 1011969) ("IGNORE_ACCELERATORS" . 1096967) ("KILL_NOTIFY" . 1011972) ("NO_COPY" . 1011975) ("NOTIFY_REALIZE" . 1011978) ("PRO_SET_VALUE" . 1011980) ("RESOURCE_NAME" . 1011983) ("SCR_XSIZE" . 1011991) ("SCR_YSIZE" . 1011993) ("SENSITIVE" . 1011995) ("TAB_MODE" . 1071311) ("TRACKING_EVENTS" . 1012005) ("UNAME" . 1012013) ("UNITS" . 1012019) ("UVALUE" . 1012021) ("VALUE" . 1012025) ("XOFFSET" . 1012027) ("XSIZE" . 1012030) ("YOFFSET" . 1012032) ("YSIZE" . 1012035)))
+    ("WIDGET_DRAW" fun nil (system) "Result = %s(Parent)" ("W15.html" ("APP_SCROLL" . 680227) ("BUTTON_EVENTS" . 941808) ("COLOR_MODEL" . 930114) ("COLORS" . 896380) ("EVENT_FUNC" . 680234) ("EVENT_PRO" . 680236) ("EXPOSE_EVENTS" . 907355) ("FRAME" . 680238) ("FUNC_GET_VALUE" . 680240) ("GRAPHICS_LEVEL" . 914743) ("GROUP_LEADER" . 680242) ("IGNORE_ACCELERATORS" . 1097640) ("KEYBOARD_EVENTS" . 1097628) ("KILL_NOTIFY" . 680245) ("MOTION_EVENTS" . 153791) ("NO_COPY" . 680251) ("NOTIFY_REALIZE" . 67601) ("PRO_SET_VALUE" . 680253) ("RENDERER" . 930656) ("RESOURCE_NAME" . 947866) ("RETAIN" . 680255) ("SCR_XSIZE" . 67289) ("SCR_YSIZE" . 67292) ("SCROLL" . 67286) ("SENSITIVE" . 948221) ("TOOLTIP" . 982084) ("TRACKING_EVENTS" . 67368) ("UNAME" . 949316) ("UNITS" . 895543) ("UVALUE" . 680259) ("VALUE" . 680263) ("VIEWPORT_EVENTS" . 279483) ("X_SCROLL_SIZE" . 680274) ("XOFFSET" . 680268) ("XSIZE" . 680271) ("Y_SCROLL_SIZE" . 680283) ("YOFFSET" . 680277) ("YSIZE" . 680280)))
+    ("WIDGET_DROPLIST" fun nil (system) "Result = %s( Parent)" ("W16.html" ("DYNAMIC_RESIZE" . 192790) ("EVENT_FUNC" . 192787) ("EVENT_PRO" . 58393) ("FONT" . 963245) ("FRAME" . 58399) ("FUNC_GET_VALUE" . 58404) ("GROUP_LEADER" . 58412) ("KILL_NOTIFY" . 58424) ("NO_COPY" . 67153) ("NOTIFY_REALIZE" . 67614) ("PRO_SET_VALUE" . 67133) ("RESOURCE_NAME" . 67140) ("SCR_XSIZE" . 67120) ("SCR_YSIZE" . 67123) ("SENSITIVE" . 948234) ("TAB_MODE" . 1071560) ("TITLE" . 888903) ("TRACKING_EVENTS" . 58334) ("UNAME" . 949326) ("UNITS" . 895561) ("UVALUE" . 67166) ("VALUE" . 67174) ("XOFFSET" . 67194) ("XSIZE" . 67198) ("YOFFSET" . 67201) ("YSIZE" . 67205)))
+    ("WIDGET_EVENT" fun nil (system) "Result = %s([Widget_ID])" ("W17.html" ("BAD_ID" . 680307) ("NOWAIT" . 680311) ("SAVE_HOURGLASS" . 680313) ("YIELD_TO_TTY" . 675439)))
+    ("WIDGET_INFO" fun nil (system) "Result = %s( [Widget_ID] )" ("W18.html" ("ACTIVE" . 680342) ("BUTTON_SET" . 978692) ("CHILD" . 978690) ("COLUMN_WIDTHS" . 895941) ("COMBOBOX_GETTEXT" . 981639) ("COMBOBOX_NUMBER" . 981602) ("COMPONENT" . 1018415) ("CONTEXT_EVENTS" . 1018413) ("DRAW_BUTTON_EVENTS" . 971032) ("DRAW_EXPOSE_EVENTS" . 909787) ("DRAW_KEYBOARD_EVENTS" . 985204) ("DRAW_MOTION_EVENTS" . 985200) ("DRAW_VIEWPORT_EVENTS" . 680350) ("DROPLIST_NUMBER" . 58164) ("DROPLIST_SELECT" . 58165) ("DYNAMIC_RESIZE" . 192872) ("EVENT_FUNC" . 680352) ("EVENT_PRO" . 680354) ("FIND_BY_UNAME" . 58144) ("FONTNAME" . 980336) ("GEOMETRY" . 980339) ("KBRD_FOCUS_EVENTS" . 1012790) ("LIST_MULTIPLE" . 934733) ("LIST_NUM_VISIBLE" . 680358) ("LIST_NUMBER" . 911616) ("LIST_SELECT" . 680360) ("LIST_TOP" . 680362) ("MANAGED" . 907337) ("MAP" . 982652) ("MODAL" . 910752) ("MULTIPLE_PROPERTIES" . 1100808) ("NAME" . 1100833) ("PARENT" . 680364) ("PROPERTY_VALID" . 1018429) ("PROPERTY_VALUE" . 1018452) ("PROPERTYSHEET_NSELECTED" . 1070799) ("PROPERTYSHEET_SELECTED" . 1082483) ("PUSHBUTTON_EVENTS" . 1020048) ("REALIZED" . 1018448) ("ROW_HEIGHTS" . 895972) ("SENSITIVE" . 982686) ("SIBLING" . 680368) ("SLIDER_MIN_MAX" . 680889) ("SYSTEM_COLORS" . 895977) ("TAB_CURRENT" . 976997) ("TAB_MODE" . 1069869) ("TAB_MULTILINE" . 977009) ("TAB_NUMBER" . 977045) ("TABLE_ALL_EVENTS" . 971069) ("TABLE_DISJOINT_SELECTION" . 987431) ("TABLE_EDIT_CELL" . 895981) ("TABLE_EDITABLE" . 895979) ("TABLE_SELECT" . 895983) ("TABLE_VIEW" . 895985) ("TEXT_ALL_EVENTS" . 680895) ("TEXT_EDITABLE" . 680899) ("TEXT_NUMBER" . 680370) ("TEXT_OFFSET_TO_XY" . 680903) ("TEXT_SELECT" . 680906) ("TEXT_TOP_LINE" . 680913) ("TEXT_XY_TO_OFFSET" . 899965) ("TLB_ICONIFY_EVENTS" . 984875) ("TLB_KILL_REQUEST_EVENTS" . 192881) ("TLB_MOVE_EVENTS" . 984854) ("TLB_SIZE_EVENTS" . 984889) ("TOOLTIP" . 982130) ("TRACKING_EVENTS" . 58086) ("TREE_EXPANDED" . 978324) ("TREE_ROOT" . 986723) ("TREE_SELECT" . 978331) ("TYPE" . 680072) ("UNAME" . 949465) ("UNITS" . 949467) ("UPDATE" . 680371) ("USE_TABLE_SELECT" . 896009) ("VALID_ID" . 891030) ("VERSION" . 680373) ("VISIBLE" . 984410)))
+    ("WIDGET_LABEL" fun nil (system) "Result = %s( Parent)" ("W19.html" ("ALIGN_CENTER" . 57967) ("ALIGN_LEFT" . 57970) ("ALIGN_RIGHT" . 57973) ("DYNAMIC_RESIZE" . 192801) ("FONT" . 680390) ("FRAME" . 680392) ("FUNC_GET_VALUE" . 680394) ("GROUP_LEADER" . 680396) ("KILL_NOTIFY" . 680399) ("NO_COPY" . 680402) ("NOTIFY_REALIZE" . 67628) ("PRO_SET_VALUE" . 680404) ("RESOURCE_NAME" . 724047) ("SCR_XSIZE" . 67301) ("SCR_YSIZE" . 67304) ("SENSITIVE" . 948248) ("SUNKEN_FRAME" . 978731) ("TRACKING_EVENTS" . 67390) ("UNAME" . 949494) ("UNITS" . 949487) ("UVALUE" . 680406) ("VALUE" . 680410) ("XOFFSET" . 680412) ("XSIZE" . 680415) ("YOFFSET" . 680418) ("YSIZE" . 680421)))
+    ("WIDGET_LIST" fun nil (system) "Result = %s( Parent)" ("W20.html" ("CONTEXT_EVENTS" . 970955) ("EVENT_FUNC" . 680433) ("EVENT_PRO" . 680435) ("FONT" . 680437) ("FRAME" . 680439) ("FUNC_GET_VALUE" . 680441) ("GROUP_LEADER" . 680443) ("KILL_NOTIFY" . 680446) ("MULTIPLE" . 934705) ("NO_COPY" . 680449) ("NOTIFY_REALIZE" . 67642) ("PRO_SET_VALUE" . 680451) ("RESOURCE_NAME" . 724057) ("SCR_XSIZE" . 67319) ("SCR_YSIZE" . 1001133) ("SENSITIVE" . 948262) ("TAB_MODE" . 1071684) ("TRACKING_EVENTS" . 1071674) ("UNAME" . 949504) ("UNITS" . 895619) ("UVALUE" . 680453) ("VALUE" . 680457) ("XOFFSET" . 680460) ("XSIZE" . 680463) ("YOFFSET" . 680466) ("YSIZE" . 58021)))
+    ("WIDGET_PROPERTYSHEET" fun nil (system) "Result = %s(Parent)" ("W21.html" ("ALIGN_BOTTOM" . 1036791) ("ALIGN_CENTER" . 1036794) ("ALIGN_LEFT" . 1036796) ("ALIGN_RIGHT" . 1036798) ("ALIGN_TOP" . 1036800) ("CONTEXT_EVENTS" . 1036802) ("EDITABLE" . 1078422) ("EVENT_FUNC" . 1036806) ("EVENT_PRO" . 1036808) ("FONT" . 1036810) ("FRAME" . 1070614) ("FUNC_GET_VALUE" . 1036813) ("IGNORE_ACCELERATORS" . 1097821) ("KILL_NOTIFY" . 1036815) ("MULTIPLE_PROPERTIES" . 1100848) ("NO_COPY" . 1036819) ("NOTIFY_REALIZE" . 1036822) ("PRO_SET_VALUE" . 1036824) ("SCR_XSIZE" . 1036826) ("SCR_YSIZE" . 1036828) ("SENSITIVE" . 1036830) ("SUNKEN_FRAME" . 1070660) ("TRACKING_EVENTS" . 1036836) ("UNAME" . 1036838) ("UNITS" . 1036841) ("UVALUE" . 1036843) ("VALUE" . 1036847) ("XOFFSET" . 1036853) ("XSIZE" . 1036856) ("YOFFSET" . 1036858) ("YSIZE" . 1036861)))
+    ("WIDGET_SLIDER" fun nil (system) "Result = %s( Parent)" ("W22.html" ("DRAG" . 680487) ("EVENT_FUNC" . 680490) ("EVENT_PRO" . 680492) ("FONT" . 680494) ("FRAME" . 680496) ("FUNC_GET_VALUE" . 680498) ("GROUP_LEADER" . 680500) ("KILL_NOTIFY" . 680503) ("MAXIMUM" . 680506) ("MINIMUM" . 680508) ("NO_COPY" . 680510) ("NOTIFY_REALIZE" . 67656) ("PRO_SET_VALUE" . 680512) ("RESOURCE_NAME" . 724067) ("SCR_XSIZE" . 67331) ("SCR_YSIZE" . 67334) ("SCROLL" . 680514) ("SENSITIVE" . 948276) ("SUPPRESS_VALUE" . 680516) ("TAB_MODE" . 1071832) ("TITLE" . 1071823) ("TRACKING_EVENTS" . 67418) ("UNAME" . 949514) ("UNITS" . 895638) ("UVALUE" . 680519) ("VALUE" . 680523) ("VERTICAL" . 680527) ("XOFFSET" . 680529) ("XSIZE" . 680532) ("YOFFSET" . 680535) ("YSIZE" . 680538)))
+    ("WIDGET_TAB" fun nil (system) "Result = %s( Parent)" ("W23.html" ("ALIGN_BOTTOM" . 1012200) ("ALIGN_CENTER" . 1012202) ("ALIGN_LEFT" . 1012204) ("ALIGN_RIGHT" . 1012206) ("ALIGN_TOP" . 1012208) ("EVENT_FUNC" . 1012210) ("EVENT_PRO" . 1012212) ("FUNC_GET_VALUE" . 1012214) ("GROUP_LEADER" . 1012216) ("KILL_NOTIFY" . 1012219) ("LOCATION" . 1012223) ("MULTILINE" . 1012253) ("NO_COPY" . 1012263) ("NOTIFY_REALIZE" . 1012266) ("PRO_SET_VALUE" . 1012268) ("SCR_XSIZE" . 1012270) ("SCR_YSIZE" . 1012272) ("SENSITIVE" . 1012274) ("TAB_MODE" . 1071955) ("TRACKING_EVENTS" . 1018541) ("UNAME" . 1012284) ("UNITS" . 1012290) ("UVALUE" . 1012292) ("XOFFSET" . 1012296) ("XSIZE" . 1012299) ("YOFFSET" . 1012301) ("YSIZE" . 1012304)))
+    ("WIDGET_TABLE" fun nil (system) "Result = %s( Parent)" ("W24.html" ("ALIGNMENT" . 896042) ("ALL_EVENTS" . 941688) ("AM_PM" . 1076926) ("COLUMN_LABELS" . 1076933) ("COLUMN_MAJOR" . 909845) ("COLUMN_WIDTHS" . 896114) ("CONTEXT_EVENTS" . 1074773) ("DAYS_OF_WEEK" . 949838) ("DISJOINT_SELECTION" . 987345) ("EDITABLE" . 987346) ("EVENT_FUNC" . 896120) ("EVENT_PRO" . 896123) ("FONT" . 896126) ("FORMAT" . 896130) ("FRAME" . 896133) ("FUNC_GET_VALUE" . 896136) ("GROUP_LEADER" . 896151) ("IGNORE_ACCELERATORS" . 1097865) ("KBRD_FOCUS_EVENTS" . 911525) ("KILL_NOTIFY" . 896155) ("MONTHS" . 949844) ("NO_COLUMN_HEADERS" . 1074713) ("NO_COPY" . 896163) ("NO_HEADERS" . 909873) ("NO_ROW_HEADERS" . 1074723) ("NOTIFY_REALIZE" . 896166) ("PRO_SET_VALUE" . 896169) ("RESIZEABLE_COLUMNS" . 896172) ("RESIZEABLE_ROWS" . 901244) ("RESOURCE_NAME" . 896175) ("ROW_HEIGHTS" . 909879) ("ROW_LABELS" . 896181) ("ROW_MAJOR" . 909886) ("SCR_XSIZE" . 896187) ("SCR_YSIZE" . 896190) ("SCROLL" . 896193) ("SENSITIVE" . 948291) ("TAB_MODE" . 1072083) ("TRACKING_EVENTS" . 896200) ("UNAME" . 949524) ("UNITS" . 896203) ("UVALUE" . 896207) ("VALUE" . 896212) ("X_SCROLL_SIZE" . 896223) ("XOFFSET" . 896215) ("XSIZE" . 896219) ("Y_SCROLL_SIZE" . 896235) ("YOFFSET" . 896227) ("YSIZE" . 896231)))
+    ("WIDGET_TEXT" fun nil (system) "Result = %s( Parent)" ("W25.html" ("ALL_EVENTS" . 680556) ("CONTEXT_EVENTS" . 970972) ("EDITABLE" . 886884) ("EVENT_FUNC" . 680561) ("EVENT_PRO" . 680563) ("FONT" . 680565) ("FRAME" . 680567) ("FUNC_GET_VALUE" . 680569) ("GROUP_LEADER" . 680571) ("IGNORE_ACCELERATORS" . 1097921) ("KBRD_FOCUS_EVENTS" . 911545) ("KILL_NOTIFY" . 680574) ("NO_COPY" . 680577) ("NO_NEWLINE" . 680579) ("NOTIFY_REALIZE" . 67670) ("PRO_SET_VALUE" . 680581) ("RESOURCE_NAME" . 724077) ("SCR_XSIZE" . 67343) ("SCR_YSIZE" . 67346) ("SCROLL" . 680583) ("SENSITIVE" . 948305) ("TAB_MODE" . 1072230) ("TRACKING_EVENTS" . 67432) ("UNAME" . 949534) ("UNITS" . 895656) ("UVALUE" . 680586) ("VALUE" . 680590) ("WRAP" . 58056) ("XOFFSET" . 680592) ("XSIZE" . 680595) ("YOFFSET" . 680598) ("YSIZE" . 680601)))
+    ("WIDGET_TREE" fun nil (system) "Result = %s( Parent)" ("W26.html" ("ALIGN_BOTTOM" . 1012440) ("ALIGN_CENTER" . 1012442) ("ALIGN_LEFT" . 1012444) ("ALIGN_RIGHT" . 1012446) ("ALIGN_TOP" . 1012448) ("BITMAP" . 1012450) ("CONTEXT_EVENTS" . 1012452) ("EVENT_FUNC" . 1012461) ("EVENT_PRO" . 1012463) ("EXPANDED" . 1012465) ("FOLDER" . 1012468) ("FUNC_GET_VALUE" . 1012472) ("GROUP_LEADER" . 1012474) ("KILL_NOTIFY" . 1012477) ("MULTIPLE" . 1012481) ("NO_COPY" . 1012484) ("NOTIFY_REALIZE" . 1012487) ("PRO_SET_VALUE" . 1012489) ("SCR_XSIZE" . 1012491) ("SCR_YSIZE" . 1012493) ("SENSITIVE" . 1012495) ("TAB_MODE" . 1072351) ("TOP" . 1012505) ("TRACKING_EVENTS" . 1018556) ("UNAME" . 1012508) ("UNITS" . 1012514) ("UVALUE" . 1012516) ("VALUE" . 1012520) ("XOFFSET" . 1012523) ("XSIZE" . 1012526) ("YOFFSET" . 1012528) ("YSIZE" . 1012531)))
+    ("WRITE_SYLK" fun nil (system) "Result = %s( File, Data)" ("W39.html" ("STARTCOL" . 67955) ("STARTROW" . 67958)))
+    ("WTN" fun nil (system) "Result = %s( A, Coef)" ("W46.html" ("COLUMN" . 58787) ("DOUBLE" . 52415) ("INVERSE" . 52418) ("OVERWRITE" . 52421)))
+    ("WV_CW_WAVELET" fun nil (system) "Result = %s( [Parent])" ("ref5.html" ("DISCRETE" . 1003928) ("NO_COLOR" . 1015397) ("NO_DRAW_WINDOW" . 1015435) ("TITLE" . 1015385) ("UNAME" . 1004532) ("UVALUE" . 1003932) ("VALUE" . 1015413) ("WAVELETS" . 1008397)))
+    ("WV_CWT" fun nil (system) "Result = %s(Array, Family, Order)" ("ref6.html" ("DOUBLE" . 1009356) ("DSCALE" . 1009358) ("NSCALE" . 1009484) ("PAD" . 1009489) ("SCALE" . 1009494) ("START_SCALE" . 1009568)))
+    ("WV_DENOISE" fun nil (system) "Result = %s(Array [, Family, Order])" ("ref7.html" ("COEFFICIENTS" . 1010533) ("CUTOFF" . 1010481) ("DENOISE_STATE" . 1010485) ("DOUBLE" . 1010505) ("DWT_FILTERED" . 1010508) ("PERCENT" . 1010511) ("THRESHOLD" . 1010517) ("WPS_FILTERED" . 1010522)))
+    ("WV_DWT" fun nil (system) "Result = %s(Array, Scaling, Wavelet, Ioff, Joff)" ("ref8.html" ("DOUBLE" . 1003349) ("INVERSE" . 1003353) ("N_LEVELS" . 1043639)))
+    ("WV_FN_COIFLET" fun nil (system) "Result = %s( [Order, Scaling, Wavelet, Ioff, Joff] )" ("ref9.html"))
+    ("WV_FN_DAUBECHIES" fun nil (system) "Result = %s( [Order, Scaling, Wavelet, Ioff, Joff] )" ("ref10.html"))
+    ("WV_FN_GAUSSIAN" fun nil (system) "Result = %s( [Order] [, Scale, N])" ("ref11.html" ("DOUBLE" . 1018338) ("FREQUENCY" . 1018340) ("SPATIAL" . 1018342) ("WAVELET" . 1018344)))
+    ("WV_FN_HAAR" fun nil (system) "Result = %s( [Order, Scaling, Wavelet, Ioff, Joff] )" ("ref12.html"))
+    ("WV_FN_MORLET" fun nil (system) "Result = %s( [Order] [, Scale, N])" ("ref13.html" ("DOUBLE" . 1009779) ("FREQUENCY" . 1015564) ("SPATIAL" . 1015558) ("WAVELET" . 1009789)))
+    ("WV_FN_PAUL" fun nil (system) "Result = %s( [Order] [, Scale, N])" ("ref14.html" ("DOUBLE" . 1010078) ("FREQUENCY" . 1015576) ("SPATIAL" . 1010080) ("WAVELET" . 1010082)))
+    ("WV_FN_SYMLET" fun nil (system) "Result = %s( [Order, Scaling, Wavelet, Ioff, Joff] )" ("ref15.html"))
+    ("WV_PLOT3D_WPS" fun nil (system) "Result = %s( Array [, X] [, Y])" ("ref18.html" ("GROUP_LEADER" . 1006236) ("SURFACE_STYLE" . 1015696) ("TITLE" . 1006239) ("UNITS" . 1006241) ("XTITLE" . 1006243) ("XUNITS" . 1006245) ("YTITLE" . 1006247) ("YUNITS" . 1006249)))
+    ("WV_PLOT_MULTIRES" fun nil (system) "Result = %s( Array [, X] [, Y])" ("ref19.html" ("GROUP_LEADER" . 1008291) ("TITLE" . 1008295) ("UNITS" . 1008298) ("XTITLE" . 1008301) ("XUNITS" . 1008304) ("YTITLE" . 1008307) ("YUNITS" . 1008310)))
+    ("WV_PWT" fun nil (system) "Result = %s( A, Scaling, Wavelet, Ioff, Joff)" ("ref20.html" ("DOUBLE" . 1006192) ("INVERSE" . 1006194)))
+    ("WV_TOOL_DENOISE" fun nil (system) "Result = %s( Array [, X] [, Y])" ("ref21.html" ("GROUP_LEADER" . 1008330) ("TITLE" . 1008334) ("UNITS" . 1008337) ("XTITLE" . 1008340) ("XUNITS" . 1008343) ("YTITLE" . 1008346) ("YUNITS" . 1008349)))
+    ("XFONT" fun nil (system) "Result = %s()" ("X4.html" ("GROUP" . 762100) ("PRESERVE_FONT_INFO" . 762103)))
+    ("XREGISTERED" fun nil (system) "Result = %s(Name)" ("X16.html" ("NOSHOW" . 762898)))
+    ("XSQ_TEST" fun nil (system) "Result = %s( Obfreq, Exfreq)" ("X18.html" ("EXCELL" . 137437) ("OBCELL" . 137440) ("RESIDUAL" . 137443)))
+    ("Add" pro "IDL_Container" (system) "Obj->[%s::]%s, Objects" ("objects_misc5.html" ("POSITION" . 1010605)))
+    ("Cleanup" pro "IDL_Container" (system) "Obj->[%s::]%s" ("objects_misc6.html"))
+    ("Move" pro "IDL_Container" (system) "Obj->[%s::]%s, Source, Destination" ("objects_misc11.html"))
+    ("Remove" pro "IDL_Container" (system) "Obj->[%s::]%s [, Child_object]" ("objects_misc12.html" ("ALL" . 1010855) ("POSITION" . 1010857)))
+    ("Count" fun "IDL_Container" (system) "Result = Obj->[%s::]%s()" ("objects_misc7.html"))
+    ("Get" fun "IDL_Container" (system) "Result = Obj->[%s::]%s ()" ("objects_misc8.html" ("ALL" . 1010708) ("COUNT" . 1010710) ("ISA" . 1010712) ("POSITION" . 1010715)))
+    ("Init" fun "IDL_Container" (system) "Result = Obj->[%s::]%s()" ("objects_misc9.html" ))
+    ("IsContained" fun "IDL_Container" (system) "Result = Obj->[%s::]%s( Object)" ("objects_misc10.html" ("POSITION" . 1010785)))
+    ("IDL" pro "IDL_Savefile" (system) "Obj->[IDL_Savefile::]IDL_Savefile::Cleanup" ("objects_misc15.html"))
+    ("Restore" pro "IDL_Savefile" (system) "Obj->[%s::]%s, SaveItem" ("objects_misc19.html" ("COMMON" . 1034877) ("FUNCTION" . 1034881) ("NEW_HEAPVAR" . 1034884) ("OBJECT_HEAPVAR" . 1034892) ("POINTER_HEAPVAR" . 1034898) ("PROCEDURE" . 1034904) ("RESTORED_OBJECTS" . 1034907) ("STRUCTURE_DEFINITION" . 1034910) ("VERBOSE" . 1034913)))
+    ("Contents" fun "IDL_Savefile" (system) "Result = Obj->[%s::]%s()" ("objects_misc16.html"))
+    ("IDL" fun "IDL_Savefile" (system) "Result = Obj->[IDL_Savefile::]IDL_Savefile::Init([, Filename])" ("objects_misc17.html" ("FILENAME" . 1034717) ("RELAXED_STRUCTURE_ASSIGNMENT" . 1034721)))
+    ("Names" fun "IDL_Savefile" (system) "Result = Obj->[%s::]%s()" ("objects_misc18.html" ("COMMON_BLOCK" . 1034777) ("COMMON_VARIABLE" . 1034780) ("COUNT" . 1034783) ("FUNCTION" . 1034786) ("OBJECT_HEAPVAR" . 1034789) ("POINTER_HEAPVAR" . 1034800) ("PROCEDURE" . 1034811) ("STRUCTURE_DEFINITION" . 1034814) ("SYSTEM_VARIABLE" . 1034817)))
+    ("Size" fun "IDL_Savefile" (system) "Result = Obj->[%s::]%s(SaveItem [, Keywords])" ("objects_misc20.html"))
+    ("AppendData" pro "IDLanROI" (system) "Obj->[%s::]%s, X [, Y] [, Z]" ("objects_an5.html" ("XRANGE" . 1003740) ("YRANGE" . 1003742) ("ZRANGE" . 1003744)))
+    ("Cleanup" pro "IDLanROI" (system) "Obj->[%s::]%s" ("objects_an6.html"))
+    ("GetProperty" pro "IDLanROI" (system) "Obj->[%s::]%s" ("objects_an10.html" ) ("objects_an4.html" ("ALL" . 1011351) ("BLOCK_SIZE" . 1011320) ("DATA" . 1011322) ("DOUBLE" . 1011324) ("INTERIOR" . 1011326) ("N_VERTS" . 1011660) ("ROI_XRANGE" . 1011699) ("ROI_YRANGE" . 1011726) ("ROI_ZRANGE" . 1011728) ("TYPE" . 1011328)))
+    ("RemoveData" pro "IDLanROI" (system) "Obj->[%s::]%s" ("objects_an12.html" ("COUNT" . 1004077) ("START" . 1004079) ("XRANGE" . 1004081) ("YRANGE" . 1004083) ("ZRANGE" . 1004085)))
+    ("ReplaceData" pro "IDLanROI" (system) "Obj->[%s::]%s, X[, Y[, Z]]" ("objects_an13.html" ("FINISH" . 1004123) ("START" . 1004130) ("XRANGE" . 1004136) ("YRANGE" . 1004138) ("ZRANGE" . 1004140)))
+    ("Rotate" pro "IDLanROI" (system) "Obj->[%s::]%s, Axis, Angle" ("objects_an14.html" ("CENTER" . 1004176)))
+    ("Scale" pro "IDLanROI" (system) "Obj->[%s::]%s, Sx[, Sy[, Sz]]" ("objects_an15.html"))
+    ("SetProperty" pro "IDLanROI" (system) "Obj->[%s::]%s" ("objects_an16.html" ) ("objects_an4.html" ("BLOCK_SIZE" . 1011320) ("DATA" . 1011322) ("DOUBLE" . 1011324) ("INTERIOR" . 1011326)))
+    ("Translate" pro "IDLanROI" (system) "Obj->[%s::]%s, Tx[, Ty[, Tz]]" ("objects_an17.html"))
+    ("ComputeGeometry" fun "IDLanROI" (system) "Result = Obj->[%s::]%s()" ("objects_an7.html" ("AREA" . 1003819) ("CENTROID" . 1003821) ("PERIMETER" . 1003823) ("SPATIAL_OFFSET" . 1003825) ("SPATIAL_SCALE" . 1003827)))
+    ("ComputeMask" fun "IDLanROI" (system) "Result = Obj->[%s::]%s()" ("objects_an8.html" ("DIMENSIONS" . 1003872) ("INITIALIZE" . 1003874) ("LOCATION" . 1003879) ("MASK_IN" . 1003881) ("MASK_RULE" . 1003883) ("PIXEL_CENTER" . 1003888) ("PLANE_NORMAL" . 1011165) ("PLANE_XAXIS" . 1003890) ("RUN_LENGTH" . 1003892)))
+    ("ContainsPoints" fun "IDLanROI" (system) "Result = Obj->[%s::]%s( X [, Y [, Z]] )" ("objects_an9.html"))
+    ("Init" fun "IDLanROI" (system) "Result = Obj->[%s::]%s([, X [, Y [, Z]]])" ("objects_an11.html" ) ("objects_an4.html" ("BLOCK_SIZE" . 1011320) ("DATA" . 1011322) ("DOUBLE" . 1011324) ("INTERIOR" . 1011326) ("TYPE" . 1011328)))
+    ("Add" pro "IDLanROIGroup" (system) "Obj->[%s::]%s, ROI" ("objects_an20.html"))
+    ("Cleanup" pro "IDLanROIGroup" (system) "Obj->[%s::]%s" ("objects_an21.html"))
+    ("GetProperty" pro "IDLanROIGroup" (system) "Obj->[%s::]%s" ("objects_an25.html" ) ("objects_an19.html" ("ALL" . 1011995) ("ROIGROUP_XRANGE " . 1011998) ("ROIGROUP_YRANGE " . 1012000) ("ROIGROUP_ZRANGE " . 1012002)))
+    ("Rotate" pro "IDLanROIGroup" (system) "Obj->[%s::]%s, Axis, Angle" ("objects_an27.html" ("CENTER" . 1004731)))
+    ("Scale" pro "IDLanROIGroup" (system) "Obj->[%s::]%s, Sx[, Sy[, Sz]]" ("objects_an28.html"))
+    ("Translate" pro "IDLanROIGroup" (system) "Obj->[%s::]%s, Tx[, Ty[, Tz]]" ("objects_an29.html"))
+    ("ComputeMask" fun "IDLanROIGroup" (system) "Result = Obj->[%s::]%s()" ("objects_an22.html" ("DIMENSIONS" . 1004482) ("INITIALIZE" . 1004484) ("LOCATION" . 1004489) ("MASK_IN" . 1004491) ("MASK_RULE" . 1004493) ("PLANE_NORMAL" . 1004498) ("PLANE_XAXIS" . 1004500) ("RUN_LENGTH" . 1004502)))
+    ("ComputeMesh" fun "IDLanROIGroup" (system) "Result = Obj->[%s::]%s( Vertices, Conn)" ("objects_an23.html" ("CAPPED" . 1004551) ("SURFACE_AREA" . 1004556)))
+    ("ContainsPoints" fun "IDLanROIGroup" (system) "Result = Obj->[%s::]%s( X[, Y[, Z]] )" ("objects_an24.html"))
+    ("Init" fun "IDLanROIGroup" (system) "Result = Obj->[%s::]%s()" ("objects_an26.html" ))
+    ("GetProperty" pro "IDLcomIDispatch" (system) "Obj->[%s::]%s" ("objects_misc25.html" ("KEYWORD")))
+    ("SetProperty" pro "IDLcomIDispatch" (system) "Obj->[%s::]%s" ("objects_misc27.html" ("KEYWORD")))
+    ("Init" fun "IDLcomIDispatchCLSID" (system) "Result = Obj -> [%s::]%s()" ("objects_misc26.html"))
+    ("Init" fun "IDLcomIDispatchPROGID" (system) "Result = Obj -> [%s::]%s()" ("objects_misc26.html"))
+    ("Connect" pro "IDLdbDatabase" (system) "DBobj -> [%s::]%s" ("api8.html" ("CONNECTION" . 998610) ("DATASOURCE" . 998682) ("PASSWORD" . 998786) ("USER_ID" . 998733)))
+    ("ExecuteSQL" pro "IDLdbDatabase" (system) "DBobj -> [%s::]%s, strSQL" ("api9.html"))
+    ("GetProperty" pro "IDLdbDatabase" (system) "DBobj -> [%s::]%s" ("api11.html" ) ("api7.html" ("CAN_GET_TABLES" . 1029718) ("DBMS_NAME" . 1029721) ("DBMS_VERSION" . 1029727) ("DRIVER_ODBC_LEVEL" . 1029724) ("DRIVER_VERSION" . 1029730) ("IS_CONNECTED" . 1029733) ("IS_READONLY" . 1029736) ("MAX_CONNECTIONS" . 1029739) ("MAX_RECORDSETS" . 1029742) ("ODBC_LEVEL" . 1029745) ("SQL_LEVEL" . 1029748) ("SQL_SERVER_NAME" . 1029751) ("USE_CURSOR_LIB" . 1029754) ("USER_NAME" . 1029760)))
+    ("SetProperty" pro "IDLdbDatabase" (system) "DBobj -> [%s::]%s" ("api13.html" ) ("api7.html" ("USE_CURSOR_LIB" . 1029754) ("VERBOSE" . 1029819)))
+    ("GetDatasources" fun "IDLdbDatabase" (system) "Datasources = DBobj -> [%s::]%s()" ("api10.html"))
+    ("GetTables" fun "IDLdbDatabase" (system) "Tables = DBobj -> [%s::]%s()" ("api12.html"))
+    ("AddRecord" pro "IDLdbRecordset" (system) "RSobj -> [%s::]%s[, field1[, field2[, ...[, fieldn]]]]" ("api16.html" ("SET_AUTOINCREMENT" . 1014791)))
+    ("DeleteRecord" pro "IDLdbRecordset" (system) "RSobj -> [%s::]%s" ("api18.html"))
+    ("GetProperty" pro "IDLdbRecordset" (system) "RSobj -> [%s::]%s" ("api20.html" ) ("api15.html" ("CAN_MOVE_ABSOLUTE" . 1030659) ("CAN_MOVE_FIRST" . 1030662) ("CAN_MOVE_LAST" . 1030665) ("CAN_MOVE_NEXT" . 1030668) ("CAN_MOVE_PRIOR" . 1030671) ("CAN_MOVE_RELATIVE" . 1030674) ("FIELD_INFO" . 1030677) ("GET_DATABASE" . 1030697) ("IS_READONLY" . 1030700) ("N_BUFFERS" . 1030703) ("RECORDSET_SOURCE" . 1030706)))
+    ("SetField" pro "IDLdbRecordset" (system) "RSobj -> [%s::]%s, iFieldNumber, Value" ("api24.html" ("NULL" . 1014812)))
+    ("CurrentRecord" fun "IDLdbRecordset" (system) "number = RSobj -> [%s::]%s()" ("api17.html"))
+    ("GetField" fun "IDLdbRecordset" (system) "value = RSobj -> [%s::]%s(iFieldNumber)" ("api19.html" ("IS_NULL" . 1013507) ("NULL_VALUE" . 1013559)))
+    ("GetRecord" fun "IDLdbRecordset" (system) "Result = RSobj -> [%s::]%s()" ("api21.html"))
+    ("MoveCursor" fun "IDLdbRecordset" (system) "Result = RSobj -> [%s::]%s()" ("api22.html" ("ABSOLUTE" . 1001009) ("FIRST" . 1001067) ("LAST" . 1001125) ("NEXT" . 1001187) ("PRIOR" . 1001255) ("RELATIVE" . 1001313)))
+    ("NFields" fun "IDLdbRecordset" (system) "status = RSobj -> [%s::]%s()" ("api23.html"))
+    ("Cleanup" pro "IDLffDICOM" (system) "Obj->[%s::]%s" ("objects_ff6.html"))
+    ("DumpElements" pro "IDLffDICOM" (system) "Obj->[%s::]%s [, Filename]" ("objects_ff7.html"))
+    ("Reset" pro "IDLffDICOM" (system) "Obj->[%s::]%s" ("objects_ff20.html"))
+    ("GetChildren" fun "IDLffDICOM" (system) "Result = Obj->[%s::]%s(Reference)" ("objects_ff8.html"))
+    ("GetDescription" fun "IDLffDICOM" (system) "Result = Obj->[%s::]%s([Group [, Element]])" ("objects_ff9.html" ("REFERENCE" . 1004342)))
+    ("GetGroup" fun "IDLffDICOM" (system) "Result = Obj->[%s::]%s([Group[, Element]])" ("objects_ff11.html" ("REFERENCE" . 1004455)))
+    ("GetLength" fun "IDLffDICOM" (system) "Result = Obj->[%s::]%s([Group [, Element]])" ("objects_ff12.html" ("REFERENCE" . 1004513)))
+    ("GetParent" fun "IDLffDICOM" (system) "Result = Obj->[%s::]%s(ReferenceList)" ("objects_ff13.html"))
+    ("GetPreamble" fun "IDLffDICOM" (system) "Result = Obj->[%s::]%s()" ("objects_ff14.html"))
+    ("GetReference" fun "IDLffDICOM" (system) "Result = Obj->[%s::]%s([Group [, Element]])" ("objects_ff15.html" ("DESCRIPTION" . 1004671) ("VR" . 1004673)))
+    ("GetValue" fun "IDLffDICOM" (system) "Result = Obj->[%s::]%s([Group [, Element]])" ("objects_ff16.html" ("NO_COPY" . 1004738) ("REFERENCE" . 1004736)))
+    ("GetVR" fun "IDLffDICOM" (system) "array = Obj->[%s::]%s([Group [, Element]])" ("objects_ff17.html" ("REFERENCE" . 1004843)))
+    ("Init" fun "IDLffDICOM" (system) "Result = Obj->[%s::]%s([, Filename])" ("objects_ff18.html" ) ("objects_ff5.html" ("VERBOSE" . 1024027)))
+    ("Read" fun "IDLffDICOM" (system) "Result = Obj->[%s::]%s(Filename)" ("objects_ff19.html" ("ENDIAN" . 1004946)))
+    ("Cleanup" pro "IDLffDXF" (system) "Obj->[%s::]%s" ("objects_ff23.html"))
+    ("GetPalette" pro "IDLffDXF" (system) "Obj->[%s::]%s, Red, Green, Blue" ("objects_ff26.html"))
+    ("PutEntity" pro "IDLffDXF" (system) "Obj->[%s::]%s, Data" ("objects_ff28.html"))
+    ("RemoveEntity" pro "IDLffDXF" (system) "Obj->[%s::]%s[, Type]" ("objects_ff30.html" ("INDEX" . 1006265)))
+    ("Reset" pro "IDLffDXF" (system) "Obj->[%s::]%s" ("objects_ff31.html"))
+    ("SetPalette" pro "IDLffDXF" (system) "Obj->[%s::]%s, Red, Green, Blue" ("objects_ff32.html"))
+    ("GetContents" fun "IDLffDXF" (system) "Result = Obj->[%s::]%s( [Filter])" ("objects_ff24.html" ("BLOCK" . 1005307) ("COUNT" . 1005309) ("LAYER" . 1005311)))
+    ("GetEntity" fun "IDLffDXF" (system) "Result = Obj->[%s::]%s(Type)" ("objects_ff25.html" ("BLOCK" . 1005352) ("INDEX" . 1005354) ("LAYER" . 1005356)))
+    ("Init" fun "IDLffDXF" (system) "Result = Obj->[%s::]%s([, Filename] )" ("objects_ff27.html" ))
+    ("Read" fun "IDLffDXF" (system) "Result = Obj->[%s::]%s(Filename)" ("objects_ff29.html"))
+    ("Write" fun "IDLffDXF" (system) "Result = Obj->[%s::]%s(Filename)" ("objects_ff33.html"))
+    ("SetData" pro "IDLffJPEG2000" (system) "Obj->[%s::]%s ([P1, ..., Pn])" ("objects_ff42.html" ("COMPONENT" . 1141582) ("ORDER" . 1141585) ("TILE_INDEX" . 1141588)))
+    ("GetData" fun "IDLffJPEG2000" (system) "Result = Obj->[%s::]%s()" ("objects_ff38.html" ("COMPONENT" . 1141336) ("DISCARD_LEVELS" . 1141339) ("MAX_LAYERS" . 1141342) ("N_COMPONENTS" . 1141345) ("ORDER" . 1141348) ("REGION" . 1141351) ("RGB" . 1141355) ("TILE_INDEX" . 1141363)))
+    ("Init" fun "IDLffJPEG2000" (system) "Result = Obj->[%s::]%s(, Filename)" ("objects_ff41.html" ) ("objects_ff36.html" ("BIT_DEPTH" . 1140492) ("COMMENT" . 1140557) ("DIMENSIONS" . 1140585) ("DISPLAY_RESOLUTION" . 1140613) ("FILENAME" . 1140643) ("N_COMPONENTS" . 1181381) ("N_LAYERS" . 1140729) ("N_LEVELS" . 1140758) ("OFFSET" . 1140815) ("PALETTE" . 1140843) ("PERSISTENT" . 1140875) ("PROGRESSION" . 1140903) ("QUIET" . 1140953) ("READ" . 1140981) ("REVERSIBLE" . 1141009) ("SIGNED" . 1141037) ("TILE_DIMENSIONS" . 1141095) ("TILE_OFFSET" . 1141123) ("WRITE" . 1141181) ("XML" . 1141209) ("YCC" . 1141237)))
+    ("Cleanup" pro "IDLffLangCat" (system) "Obj->[%s::]%s" ("objects_ff47.html"))
+    ("GetProperty" pro "IDLffLangCat" (system) "Obj->[%s::]%s" ("objects_ff48.html" ) ("objects_ff45.html" ("APP_NAME" . 1126713) ("APP_PATH" . 1126741) ("AVAILABLE_LANGUAGES" . 1126769) ("DEFAULT_KEYS" . 1126797) ("DEFAULT_LANGUAGE" . 1126825) ("DEFAULT_N_KEYS" . 1126853) ("FILENAME" . 1126881) ("KEYS" . 1126909) ("LANGUAGE" . 1126937) ("N_KEYS" . 1126965) ("VERBOSE" . 1126993)))
+    ("SetProperty" pro "IDLffLangCat" (system) "Obj->[%s::]%s" ("objects_ff51.html" ) ("objects_ff45.html" ("LANGUAGE" . 1126937) ("VERBOSE" . 1126993)))
+    ("AppendCatalog" fun "IDLffLangCat" (system) "Result = Obj->[%s::]%s()" ("objects_ff46.html" ("APP_NAME" . 1127041) ("APP_PATH" . 1127050) ("FILENAME" . 1127056)))
+    ("Init" fun "IDLffLangCat" (system) "Result = Obj->[%s::]%s" ("objects_ff49.html" ("CONTINUE_ON_ERROR" . 1127135)) ("objects_ff45.html" ("APP_NAME" . 1126713) ("APP_PATH" . 1126741) ("DEFAULT_LANGUAGE" . 1126825) ("FILENAME" . 1126881) ("LANGUAGE" . 1126937) ("VERBOSE" . 1126993)))
+    ("Query" fun "IDLffLangCat" (system) "Result = Obj->[%s::]%s( Key)" ("objects_ff50.html" ("DEFAULT_STRING" . 1127154)))
+    ("Cleanup" pro "IDLffMrSID" (system) "Obj->[%s::]%s" ("objects_ff54.html"))
+    ("GetProperty" pro "IDLffMrSID" (system) "Obj->[%s::]%s" ("objects_ff57.html" ("CHANNELS" . 1006873) ("DIMENSIONS" . 1006875) ("GEO_ORIGIN" . 1064441) ("GEO_PROJTYPE" . 1064460) ("GEO_RESOLUTION" . 1064466) ("GEO_VALID" . 1064449) ("LEVELS" . 1006877) ("PIXEL_TYPE" . 1006879) ("TYPE" . 1006884)))
+    ("GetDimsAtLevel" fun "IDLffMrSID" (system) "Result = Obj->[%s::]%s (Level)" ("objects_ff55.html"))
+    ("GetImageData" fun "IDLffMrSID" (system) "Result = Obj->[%s::]%s ()" ("objects_ff56.html" ("LEVEL" . 1006785) ("SUB_RECT" . 1006788)))
+    ("Init" fun "IDLffMrSID" (system) "Result = Obj->[%s::]%s(, Filename)" ("objects_ff58.html" ) ("objects_ff53.html" ("QUIET" . 1026758)))
+    ("AddAttribute" pro "IDLffShape" (system) "Obj->[%s::]%s, Name, Type, Width" ("objects_ff62.html" ("PRECISION" . 1007582)))
+    ("Cleanup" pro "IDLffShape" (system) "Obj->[%s::]%s" ("objects_ff63.html"))
+    ("Close" pro "IDLffShape" (system) "Obj->[%s::]%s" ("objects_ff64.html"))
+    ("DestroyEntity" pro "IDLffShape" (system) "Obj->[%s::]%s, Entity" ("objects_ff65.html"))
+    ("GetProperty" pro "IDLffShape" (system) "Obj->[%s::]%s" ("objects_ff68.html" ) ("objects_ff61.html" ("ATTRIBUTE_INFO" . 1027034) ("ATTRIBUTE_NAMES" . 1027309) ("ENTITY_TYPE" . 1027088) ("FILENAME" . 1027353) ("IS_OPEN" . 1027563) ("N_ATTRIBUTES" . 1027361) ("N_ENTITIES" . 1027330) ("N_RECORDS" . 1027328)))
+    ("PutEntity" pro "IDLffShape" (system) "Obj->[%s::]%s, Data" ("objects_ff71.html"))
+    ("SetAttributes" pro "IDLffShape" (system) "Obj->[%s::]%s, Index, Attribute_Num, Value or Obj->[%s::]%s, Index, Attributes" ("objects_ff72.html"))
+    ("GetAttributes" fun "IDLffShape" (system) "Result = Obj->[%s::]%s([Index])" ("objects_ff66.html" ("ALL" . 1007785) ("ATTRIBUTE_STUCTURE" . 1007787)))
+    ("GetEntity" fun "IDLffShape" (system) "Result = Obj->[%s::]%s([Index])" ("objects_ff67.html" ("ALL" . 1007853) ("ATTRIBUTES" . 1007855)))
+    ("Init" fun "IDLffShape" (system) "Result = Obj->[%s::]%s([, Filename])" ("objects_ff69.html" ) ("objects_ff61.html" ("DBF_ONLY" . 1027319) ("ENTITY_TYPE" . 1027088) ("UPDATE" . 1027071)))
+    ("Open" fun "IDLffShape" (system) "Result = Obj->[%s::]%s( `Filename')" ("objects_ff70.html" ("DBF_ONLY" . 1008149) ("ENTITY_TYPE" . 1008154) ("UPDATE" . 1054733)))
+    ("SetValue" pro "IDLffXMLDOMAttr" (system) "Obj->[%s::]%s, Value" ("objects_ff81.html"))
+    ("GetName" fun "IDLffXMLDOMAttr" (system) "Result = Obj->[%s::]%s()" ("objects_ff77.html"))
+    ("GetSpecified" fun "IDLffXMLDOMAttr" (system) "Result = Obj->[%s::]%s()" ("objects_ff78.html"))
+    ("GetValue" fun "IDLffXMLDOMAttr" (system) "Result = Obj->[%s::]%s()" ("objects_ff79.html"))
+    ("AppendData" pro "IDLffXMLDOMCharacterData" (system) "Obj->[%s::]%s, String" ("objects_ff88.html"))
+    ("DeleteData" pro "IDLffXMLDOMCharacterData" (system) "Obj->[%s::]%s, Offset, Count" ("objects_ff90.html"))
+    ("InsertData" pro "IDLffXMLDOMCharacterData" (system) "Obj->[%s::]%s, Offset, String" ("objects_ff94.html"))
+    ("ReplaceData" pro "IDLffXMLDOMCharacterData" (system) "Obj->[%s::]%s, Offset, Count, String" ("objects_ff95.html"))
+    ("SetData" pro "IDLffXMLDOMCharacterData" (system) "Obj->[%s::]%s, String" ("objects_ff96.html"))
+    ("GetData" fun "IDLffXMLDOMCharacterData" (system) "Result = Obj->[%s::]%s()" ("objects_ff91.html"))
+    ("GetLength" fun "IDLffXMLDOMCharacterData" (system) "Result = Obj->[%s::]%s()" ("objects_ff92.html"))
+    ("SubstringData" fun "IDLffXMLDOMCharacterData" (system) "Result = Obj->[%s::]%s( Offset, Count )" ("objects_ff97.html"))
+    ("Cleanup" pro "IDLffXMLDOMDocument" (system) "Obj->[%s::]%s" ("objects_ff104.html"))
+    ("Load" pro "IDLffXMLDOMDocument" (system) "Obj->[%s::]%s" ("objects_ff117.html" ("EXCLUDE_IGNORABLE_WHITESPACE" . 1128132) ("EXPAND_ENTITY_REFERENCES" . 1128141) ("FILENAME" . 1128144) ("MSG_ERROR" . 1128147) ("MSG_FATAL" . 1128154) ("MSG_WARNING" . 1128160) ("QUIET" . 1128166) ("VALIDATION_MODE" . 1128169)))
+    ("Save" pro "IDLffXMLDOMDocument" (system) "Obj->[%s::]%s" ("objects_ff118.html" ("EXPAND_ENTITY_REFERENCES" . 1128198) ("FILENAME" . 1128201) ("PRETTY_PRINT" . 1128204)))
+    ("CreateAttribute" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s( Name )" ("objects_ff105.html"))
+    ("CreateCDATASection" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s( String )" ("objects_ff106.html"))
+    ("CreateComment" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s( String )" ("objects_ff107.html"))
+    ("CreateDocumentFragment" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s()" ("objects_ff108.html"))
+    ("CreateElement" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s( TagName )" ("objects_ff109.html"))
+    ("CreateEntityReference" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s( Name )" ("objects_ff110.html"))
+    ("CreateProcessingInstruction" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s( Target, Data )" ("objects_ff111.html"))
+    ("CreateTextNode" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s( String )" ("objects_ff112.html"))
+    ("GetDoctype" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s()" ("objects_ff113.html"))
+    ("GetDocumentElement" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s()" ("objects_ff114.html"))
+    ("GetElementsByTagName" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s( TagName )" ("objects_ff115.html"))
+    ("Init" fun "IDLffXMLDOMDocument" (system) "Result = Obj->[%s::]%s()" ("objects_ff116.html" ("EXCLUDE_IGNORABLE_WHITESPACE" . 1128039) ("EXPAND_ENTITY_REFERENCES" . 1128048) ("FILENAME" . 1128051) ("MSG_ERROR" . 1128054) ("MSG_FATAL" . 1128061) ("MSG_WARNING" . 1128067) ("QUIET" . 1128073) ("VALIDATION_MODE" . 1128076)))
+    ("GetEntities" fun "IDLffXMLDOMDocumentType" (system) "Result = Obj->[%s::]%s()" ("objects_ff126.html"))
+    ("GetName" fun "IDLffXMLDOMDocumentType" (system) "Result = Obj->[%s::]%s()" ("objects_ff127.html"))
+    ("GetNotations" fun "IDLffXMLDOMDocumentType" (system) "Result = Obj->[%s::]%s()" ("objects_ff128.html"))
+    ("SetAttribute" pro "IDLffXMLDOMElement" (system) "Obj->[%s::]%s, Name, Value" ("objects_ff140.html"))
+    ("GetAttribute" fun "IDLffXMLDOMElement" (system) "Result = Obj->[%s::]%s( Name )" ("objects_ff133.html"))
+    ("GetAttributeNode" fun "IDLffXMLDOMElement" (system) "Result = Obj->[%s::]%s( Name )" ("objects_ff134.html"))
+    ("GetElementsByTagName" fun "IDLffXMLDOMElement" (system) "Result = Obj->[%s::]%s( TagName )" ("objects_ff135.html"))
+    ("GetTagName" fun "IDLffXMLDOMElement" (system) "Result = Obj->[%s::]%s()" ("objects_ff136.html"))
+    ("RemoveAttribute" fun "IDLffXMLDOMElement" (system) "Result = Obj->[%s::]%s( Name )" ("objects_ff138.html"))
+    ("RemoveAttributeNode" fun "IDLffXMLDOMElement" (system) "Result = Obj->[%s::]%s( OldAttr )" ("objects_ff139.html"))
+    ("SetAttributeNode" fun "IDLffXMLDOMElement" (system) "Result = Obj->[%s::]%s( NewAttr )" ("objects_ff141.html"))
+    ("GetNotationName" fun "IDLffXMLDOMEntity" (system) "Result = Obj->[%s::]%s()" ("objects_ff145.html"))
+    ("GetPublicId" fun "IDLffXMLDOMEntity" (system) "Result = Obj->[%s::]%s()" ("objects_ff146.html"))
+    ("GetSystemId" fun "IDLffXMLDOMEntity" (system) "Result = Obj->[%s::]%s()" ("objects_ff147.html"))
+    ("GetLength" fun "IDLffXMLDOMNamedNodeMap" (system) "Result = Obj->[%s::]%s()" ("objects_ff156.html"))
+    ("GetNamedItem" fun "IDLffXMLDOMNamedNodeMap" (system) "Result = Obj->[%s::]%s( Name )" ("objects_ff157.html"))
+    ("Item" fun "IDLffXMLDOMNamedNodeMap" (system) "Result = Obj->[%s::]%s( Index )" ("objects_ff159.html"))
+    ("RemoveNamedItem" fun "IDLffXMLDOMNamedNodeMap" (system) "Result = Obj->[%s::]%s( Name )" ("objects_ff160.html"))
+    ("SetNamedItem" fun "IDLffXMLDOMNamedNodeMap" (system) "Result = Obj->[%s::]%s( Node )" ("objects_ff161.html"))
+    ("SetNodeValue" pro "IDLffXMLDOMNode" (system) "Obj->[%s::]%s( NodeValue )" ("objects_ff183.html"))
+    ("AppendChild" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s( NewChild )" ("objects_ff164.html"))
+    ("CloneNode" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff166.html" ("DEEP" . 1129314)))
+    ("GetAttributes" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff167.html"))
+    ("GetChildNodes" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff168.html"))
+    ("GetFirstChild" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff169.html"))
+    ("GetLastChild" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff170.html"))
+    ("GetNextSibling" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff171.html"))
+    ("GetNodeName" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff172.html"))
+    ("GetNodeType" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff173.html"))
+    ("GetNodeValue" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff174.html"))
+    ("GetOwnerDocument" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff175.html"))
+    ("GetParentNode" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff176.html"))
+    ("GetPreviousSibling" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff177.html"))
+    ("HasChildNodes" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s()" ("objects_ff178.html"))
+    ("InsertBefore" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s( NewChild [, RefChild] )" ("objects_ff180.html"))
+    ("RemoveChild" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s( OldChild )" ("objects_ff181.html"))
+    ("ReplaceChild" fun "IDLffXMLDOMNode" (system) "Result = Obj->[%s::]%s( NewChild, OldChild )" ("objects_ff182.html"))
+    ("GetLength" fun "IDLffXMLDOMNodeList" (system) "Result = Obj->[%s::]%s()" ("objects_ff187.html"))
+    ("Item" fun "IDLffXMLDOMNodeList" (system) "Result = Obj->[%s::]%s( Index )" ("objects_ff189.html"))
+    ("GetPublicId" fun "IDLffXMLDOMNotation" (system) "Result = Obj->[%s::]%s()" ("objects_ff193.html"))
+    ("GetSystemId" fun "IDLffXMLDOMNotation" (system) "Result = Obj->[%s::]%s()" ("objects_ff194.html"))
+    ("SetData" pro "IDLffXMLDOMProcessingInstruction" (system) "Obj->[%s::]%s, Content" ("objects_ff202.html"))
+    ("GetData" fun "IDLffXMLDOMProcessingInstruction" (system) "Result = Obj->[%s::]%s()" ("objects_ff199.html"))
+    ("GetTarget" fun "IDLffXMLDOMProcessingInstruction" (system) "Result = Obj->[%s::]%s()" ("objects_ff200.html"))
+    ("IsIgnorableWhitespace" fun "IDLffXMLDOMText" (system) "Result = Obj->[%s::]%s()" ("objects_ff207.html"))
+    ("SplitText" fun "IDLffXMLDOMText" (system) "Result = Obj->[%s::]%s( Offset )" ("objects_ff208.html"))
+    ("AttributeDecl" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, eName, aName, Type, Mode, Value" ("objects_ff211.html"))
+    ("Characters" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Chars" ("objects_ff212.html"))
+    ("Cleanup" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s" ("objects_ff213.html"))
+    ("Comment" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Comment" ("objects_ff214.html"))
+    ("ElementDecl" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Name, Model" ("objects_ff215.html"))
+    ("EndCDATA" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s" ("objects_ff216.html"))
+    ("EndDocument" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s" ("objects_ff217.html"))
+    ("EndDTD" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s" ("objects_ff218.html"))
+    ("EndElement" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, URI, Local, qName" ("objects_ff219.html"))
+    ("EndEntity" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Name" ("objects_ff220.html"))
+    ("EndPrefixMapping" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Prefix" ("objects_ff221.html"))
+    ("Error" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, SystemID, LineNumber, ColumnNumber, Message" ("objects_ff222.html"))
+    ("ExternalEntityDecl" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Name, PublicID, SystemID" ("objects_ff223.html"))
+    ("FatalError" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, SystemID, LineNumber, ColumnNumber, Message" ("objects_ff224.html"))
+    ("GetProperty" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s" ("objects_ff225.html" ) ("objects_ff210.html" ("FILENAME" . 1027975) ("NAMESPACE_PREFIXES" . 1028045) ("PARSER_LOCATION" . 1028043) ("PARSER_PUBLICID" . 1027979) ("PARSER_URI" . 1027981) ("SCHEMA_CHECKING" . 1027990) ("VALIDATION_MODE" . 1028403)))
+    ("IgnorableWhitespace" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Chars" ("objects_ff226.html"))
+    ("InternalEntityDecl" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Name, Value" ("objects_ff228.html"))
+    ("NotationDecl" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Name, PublicID, SystemID" ("objects_ff229.html"))
+    ("ParseFile" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Filename" ("objects_ff230.html"))
+    ("ProcessingInstruction" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Target, Data" ("objects_ff231.html"))
+    ("SetProperty" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s" ("objects_ff232.html" ) ("objects_ff210.html" ("NAMESPACE_PREFIXES" . 1028045) ("SCHEMA_CHECKING" . 1027990) ("VALIDATION_MODE" . 1028403)))
+    ("SkippedEntity" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Name" ("objects_ff233.html"))
+    ("StartCDATA" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s" ("objects_ff234.html"))
+    ("StartDocument" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s" ("objects_ff235.html"))
+    ("StartDTD" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Name, PublicID, SystemID" ("objects_ff236.html"))
+    ("StartElement" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, URI, Local, qName [, attName, attValue]" ("objects_ff237.html"))
+    ("StartEntity" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Name" ("objects_ff238.html"))
+    ("StartPrefixmapping" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Prefix, URI" ("objects_ff239.html"))
+    ("StopParsing" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s" ("objects_ff240.html"))
+    ("UnparsedEntityDecl" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, Name, PublicID, SystemID, Notation" ("objects_ff241.html"))
+    ("Warning" pro "IDLffXMLSAX" (system) "Obj->[%s::]%s, SystemID, LineNumber, ColumnNumber, Message" ("objects_ff242.html"))
+    ("Init" fun "IDLffXMLSAX" (system) "Result = Obj->[%s::]%s()" ("objects_ff227.html" ) ("objects_ff210.html" ("NAMESPACE_PREFIXES" . 1028045) ("SCHEMA_CHECKING" . 1027990) ("VALIDATION_MODE" . 1028403)))
+    ("Cleanup" pro "IDLgrAxis" (system) "Obj->[%s::]%s" ("objects_gr5.html"))
+    ("GetProperty" pro "IDLgrAxis" (system) "Obj->[%s::]%s" ("objects_gr7.html" ) ("objects_gr4.html" ("ALL" . 1045686) ("ALPHA_CHANNEL" . 1486818) ("AM_PM" . 1045715) ("CLIP_PLANES" . 1045717) ("COLOR" . 1045723) ("CRANGE" . 1047485) ("DAYS_OF_WEEK" . 1045725) ("DEPTH_TEST_DISABLE" . 1045727) ("DEPTH_TEST_FUNCTION" . 1093233) ("DEPTH_WRITE_DISABLE" . 1093333) ("DIRECTION" . 1093366) ("EXACT" . 1045730) ("EXTEND" . 1045732) ("GRIDSTYLE" . 1045735) ("HIDE" . 1048340) ("LOCATION" . 1048266) ("LOG" . 1045756) ("MAJOR" . 1045758) ("MINOR" . 1045760) ("MONTHS" . 1045762) ("NOTEXT" . 1045766) ("PALETTE" . 1045768) ("PARENT" . 1047517) ("RANGE" . 1045770) ("SUBTICKLEN" . 1093445) ("TEXTALIGNMENTS" . 1045774) ("TEXTBASELINE" . 1048408) ("TEXTPOS" . 1045782) ("TEXTUPDIR" . 1045815) ("THICK" . 1045821) ("TICKDIR" . 1045823) ("TICKFORMAT" . 1565506) ("TICKFRMTDATA" . 1565556) ("TICKINTERVAL" . 1045845) ("TICKLAYOUT" . 1045848) ("TICKLEN" . 1045855) ("TICKTEXT" . 1362754) ("TICKUNITS" . 1362791) ("TICKVALUES" . 1281692) ("TITLE" . 1045882) ("USE_TEXT_COLOR" . 1045887) ("XCOORD_CONV" . 1045891) ("XRANGE" . 1047679) ("YCOORD_CONV" . 1045897) ("YRANGE" . 1047646) ("ZCOORD_CONV" . 1045903) ("ZRANGE" . 1047606)))
+    ("SetProperty" pro "IDLgrAxis" (system) "Obj->[%s::]%s" ("objects_gr9.html" ) ("objects_gr4.html" ("ALPHA_CHANNEL" . 1486818) ("AM_PM" . 1045715) ("CLIP_PLANES" . 1045717) ("COLOR" . 1045723) ("DAYS_OF_WEEK" . 1045725) ("DEPTH_TEST_DISABLE" . 1045727) ("DEPTH_TEST_FUNCTION" . 1093233) ("DEPTH_WRITE_DISABLE" . 1093333) ("DIRECTION" . 1093366) ("EXACT" . 1045730) ("EXTEND" . 1045732) ("GRIDSTYLE" . 1045735) ("HIDE" . 1048340) ("LOCATION" . 1048266) ("LOG" . 1045756) ("MAJOR" . 1045758) ("MINOR" . 1045760) ("MONTHS" . 1045762) ("NOTEXT" . 1045766) ("RANGE" . 1045770) ("SUBTICKLEN" . 1093445) ("TEXTALIGNMENTS" . 1045774) ("TEXTBASELINE" . 1048408) ("TEXTPOS" . 1045782) ("TEXTUPDIR" . 1045815) ("THICK" . 1045821) ("TICKDIR" . 1045823) ("TICKFORMAT" . 1565506) ("TICKFRMTDATA" . 1565556) ("TICKINTERVAL" . 1045845) ("TICKLAYOUT" . 1045848) ("TICKLEN" . 1045855) ("TICKTEXT" . 1362754) ("TICKUNITS" . 1362791) ("TICKVALUES" . 1281692) ("TITLE" . 1045882) ("USE_TEXT_COLOR" . 1045887) ("XCOORD_CONV" . 1045891) ("YCOORD_CONV" . 1045897) ("ZCOORD_CONV" . 1045903)))
+    ("GetCTM" fun "IDLgrAxis" (system) "Result = Obj->[%s::]%s()" ("objects_gr6.html" ("DESTINATION" . 1092556) ("PATH" . 1007341) ("TOP" . 1007347)))
+    ("Init" fun "IDLgrAxis" (system) "Result = Obj->[%s::]%s([, Direction])" ("objects_gr8.html" ) ("objects_gr4.html" ("ALPHA_CHANNEL" . 1486818) ("AM_PM" . 1045715) ("CLIP_PLANES" . 1045717) ("COLOR" . 1045723) ("DAYS_OF_WEEK" . 1045725) ("DEPTH_TEST_DISABLE" . 1045727) ("DEPTH_TEST_FUNCTION" . 1093233) ("DEPTH_WRITE_DISABLE" . 1093333) ("DIRECTION" . 1093366) ("EXACT" . 1045730) ("EXTEND" . 1045732) ("GRIDSTYLE" . 1045735) ("HIDE" . 1048340) ("LOCATION" . 1048266) ("LOG" . 1045756) ("MAJOR" . 1045758) ("MINOR" . 1045760) ("MONTHS" . 1045762) ("NOTEXT" . 1045766) ("RANGE" . 1045770) ("REGISTER_PROPERTIES" . 1045772) ("SUBTICKLEN" . 1093445) ("TEXTALIGNMENTS" . 1045774) ("TEXTBASELINE" . 1048408) ("TEXTPOS" . 1045782) ("TEXTUPDIR" . 1045815) ("THICK" . 1045821) ("TICKDIR" . 1045823) ("TICKFORMAT" . 1565506) ("TICKFRMTDATA" . 1565556) ("TICKINTERVAL" . 1045845) ("TICKLAYOUT" . 1045848) ("TICKLEN" . 1045855) ("TICKTEXT" . 1362754) ("TICKUNITS" . 1362791) ("TICKVALUES" . 1281692) ("TITLE" . 1045882) ("USE_TEXT_COLOR" . 1045887) ("XCOORD_CONV" . 1045891) ("YCOORD_CONV" . 1045897) ("ZCOORD_CONV" . 1045903)))
+    ("Cleanup" pro "IDLgrBuffer" (system) "Obj->[%s::]%s" ("objects_gr12.html"))
+    ("Draw" pro "IDLgrBuffer" (system) "Obj->[%s::]%s [, Picture]" ("objects_gr13.html" ("CREATE_INSTANCE" . 1007844) ("DRAW_INSTANCE" . 1007846)))
+    ("Erase" pro "IDLgrBuffer" (system) "Obj->[%s::]%s" ("objects_gr14.html" ("COLOR" . 1007879)))
+    ("GetDeviceInfo" pro "IDLgrBuffer" (system) "Obj->[%s::]%s" ("objects_gr16.html" ("ALL" . 1007957) ("MAX_NUM_CLIP_PLANES" . 1007959) ("MAX_TEXTURE_DIMENSIONS" . 1007961) ("MAX_VIEWPORT_DIMENSIONS" . 1007963) ("NAME" . 1007965) ("NUM_CPUS" . 1007967) ("VENDOR" . 1007970) ("VERSION" . 1007972)))
+    ("GetProperty" pro "IDLgrBuffer" (system) "Obj->[%s::]%s" ("objects_gr18.html" ) ("objects_gr11.html" ("ALL" . 1050118) ("COLOR_MODEL" . 1050137) ("DIMENSIONS" . 1050141) ("GRAPHICS_TREE" . 1050143) ("IMAGE_DATA" . 1050202) ("N_COLORS" . 1092707) ("PALETTE" . 1050147) ("QUALITY" . 1050149) ("RESOLUTION " . 1093499) ("SCREEN_DIMENSIONS" . 1050191) ("UNITS " . 1050189) ("ZBUFFER_DATA" . 1050181)))
+    ("SetProperty" pro "IDLgrBuffer" (system) "Obj->[%s::]%s" ("objects_gr24.html" ) ("objects_gr11.html" ("COLOR_MODEL" . 1050137) ("DIMENSIONS" . 1050141) ("GRAPHICS_TREE" . 1050143) ("PALETTE" . 1050147) ("QUALITY" . 1050149) ("RESOLUTION " . 1093499) ("UNITS " . 1050189)))
+    ("GetContiguousPixels" fun "IDLgrBuffer" (system) "Result = Obj->[%s::]%s()" ("objects_gr15.html"))
+    ("GetFontnames" fun "IDLgrBuffer" (system) "Result = Obj->[%s::]%s( FamilyName)" ("objects_gr17.html" ("IDL_FONTS" . 1008013) ("STYLES" . 1008015)))
+    ("GetTextDimensions" fun "IDLgrBuffer" (system) "Result = Obj->[%s::]%s( TextObj)" ("objects_gr19.html" ("DESCENT" . 1008088) ("PATH" . 1008090)))
+    ("Init" fun "IDLgrBuffer" (system) "Result = Obj->[%s::]%s()" ("objects_gr20.html" ) ("objects_gr11.html" ("COLOR_MODEL" . 1050137) ("DIMENSIONS" . 1050141) ("GRAPHICS_TREE" . 1050143) ("N_COLORS" . 1092707) ("PALETTE" . 1050147) ("QUALITY" . 1050149) ("REGISTER_PROPERTIES" . 1050154) ("RESOLUTION " . 1093499) ("UNITS " . 1050189)))
+    ("PickData" fun "IDLgrBuffer" (system) "Result = Obj->[%s::]%s( View, Object, Location, XYZLocation)" ("objects_gr21.html" ("DIMENSIONS" . 1008204) ("PATH" . 1008208) ("PICK_STATUS" . 1008214)))
+    ("Read" fun "IDLgrBuffer" (system) "Result = Obj->[%s::]%s()" ("objects_gr22.html"))
+    ("Select" fun "IDLgrBuffer" (system) "Result = Obj->[%s::]%s(Picture, XY)" ("objects_gr23.html" ("DIMENSIONS" . 1008316) ("ORDER" . 1008320) ("SUB_SELECTION" . 1343723) ("UNITS" . 1008323)))
+    ("Cleanup" pro "IDLgrClipboard" (system) "Obj->[%s::]%s" ("objects_gr27.html"))
+    ("Draw" pro "IDLgrClipboard" (system) "Obj->[%s::]%s [, Picture]" ("objects_gr28.html" ("CMYK" . 1345463) ("FILENAME" . 1008514) ("POSTSCRIPT" . 1008516) ("VECT_SHADING" . 1340124) ("VECT_SORTING" . 1340189) ("VECT_TEXT_RENDER_METHOD" . 1340235) ("VECTOR" . 1008518)))
+    ("GetDeviceInfo" pro "IDLgrClipboard" (system) "Obj->[%s::]%s" ("objects_gr30.html" ("ALL" . 1008688) ("MAX_NUM_CLIP_PLANES" . 1008690) ("MAX_TEXTURE_DIMENSIONS" . 1008692) ("MAX_VIEWPORT_DIMENSIONS" . 1008694) ("NAME" . 1008696) ("NUM_CPUS" . 1008698) ("VENDOR" . 1008701) ("VERSION" . 1008703)))
+    ("GetProperty" pro "IDLgrClipboard" (system) "Obj->[%s::]%s" ("objects_gr32.html" ) ("objects_gr26.html" ("ALL" . 1050377) ("COLOR_MODEL" . 1050391) ("DIMENSIONS" . 1050395) ("GRAPHICS_TREE" . 1050397) ("N_COLORS" . 1050399) ("PALETTE" . 1050401) ("QUALITY" . 1050403) ("RESOLUTION " . 1093541) ("SCREEN_DIMENSIONS" . 1050442) ("UNITS" . 1050439)))
+    ("SetProperty" pro "IDLgrClipboard" (system) "Obj->[%s::]%s" ("objects_gr35.html" ) ("objects_gr26.html" ("DIMENSIONS" . 1050395) ("GRAPHICS_TREE" . 1050397) ("PALETTE" . 1050401) ("QUALITY" . 1050403) ("RESOLUTION " . 1093541) ("UNITS" . 1050439)))
+    ("GetContiguousPixels" fun "IDLgrClipboard" (system) "Result = Obj->[%s::]%s()" ("objects_gr29.html"))
+    ("GetFontnames" fun "IDLgrClipboard" (system) "Result = Obj->[%s::]%s( FamilyName)" ("objects_gr31.html" ("IDL_FONTS" . 1008744) ("STYLES" . 1008746)))
+    ("GetTextDimensions" fun "IDLgrClipboard" (system) "Result = Obj->[%s::]%s( TextObj)" ("objects_gr33.html" ("DESCENT" . 1008820) ("PATH" . 1008822)))
+    ("Init" fun "IDLgrClipboard" (system) "Result = Obj->[%s::]%s()" ("objects_gr34.html" ) ("objects_gr26.html" ("COLOR_MODEL" . 1050391) ("DIMENSIONS" . 1050395) ("GRAPHICS_TREE" . 1050397) ("N_COLORS" . 1050399) ("PALETTE" . 1050401) ("QUALITY" . 1050403) ("REGISTER_PROPERTIES" . 1050408) ("RESOLUTION " . 1093541) ("UNITS" . 1050439)))
+    ("Cleanup" pro "IDLgrColorbar" (system) "Obj->[%s::]%s" ("objects_gr38.html"))
+    ("GetProperty" pro "IDLgrColorbar" (system) "Obj->[%s::]%s" ("objects_gr40.html" ) ("objects_gr37.html" ("ALL" . 1050584) ("BLUE_VALUES " . 1050601) ("COLOR " . 1050603) ("DIMENSIONS" . 1050605) ("GREEN_VALUES" . 1050607) ("HIDE" . 1050609) ("MAJOR" . 1050613) ("MINOR" . 1050615) ("PALETTE" . 1050619) ("PARENT" . 1050728) ("RED_VALUES" . 1050726) ("SHOW_AXIS" . 1050623) ("SHOW_OUTLINE" . 1050628) ("SUBTICKLEN" . 1050632) ("THICK" . 1050634) ("THREED " . 1050636) ("TICKFORMAT" . 1050638) ("TICKFRMTDATA" . 1050643) ("TICKLEN" . 1050645) ("TICKTEXT" . 1050647) ("TICKVALUES" . 1050649) ("TITLE " . 1050651) ("XCOORD_CONV" . 1050655) ("XRANGE" . 1050718) ("YCOORD_CONV" . 1050716) ("YRANGE" . 1050708) ("ZCOORD_CONV " . 1050706) ("ZRANGE" . 1050697)))
+    ("SetProperty" pro "IDLgrColorbar" (system) "Obj->[%s::]%s" ("objects_gr42.html" ) ("objects_gr37.html" ("BLUE_VALUES " . 1050601) ("COLOR " . 1050603) ("DIMENSIONS" . 1050605) ("GREEN_VALUES" . 1050607) ("HIDE" . 1050609) ("MAJOR" . 1050613) ("MINOR" . 1050615) ("PALETTE" . 1050619) ("RED_VALUES" . 1050726) ("SHOW_AXIS" . 1050623) ("SHOW_OUTLINE" . 1050628) ("SUBTICKLEN" . 1050632) ("THICK" . 1050634) ("THREED " . 1050636) ("TICKFORMAT" . 1050638) ("TICKFRMTDATA" . 1050643) ("TICKLEN" . 1050645) ("TICKTEXT" . 1050647) ("TICKVALUES" . 1050649) ("TITLE " . 1050651) ("XCOORD_CONV" . 1050655) ("YCOORD_CONV" . 1050716) ("ZCOORD_CONV " . 1050706)))
+    ("ComputeDimensions" fun "IDLgrColorbar" (system) "Result = Obj->[%s::]%s( DestinationObj)" ("objects_gr39.html" ("PATH" . 1009084)))
+    ("Init" fun "IDLgrColorbar" (system) "Result = Obj->[%s::]%s([, aRed, aGreen, aBlue])" ("objects_gr41.html" ) ("objects_gr37.html" ("BLUE_VALUES " . 1050601) ("COLOR " . 1050603) ("DIMENSIONS" . 1050605) ("GREEN_VALUES" . 1050607) ("HIDE" . 1050609) ("MAJOR" . 1050613) ("MINOR" . 1050615) ("PALETTE" . 1050619) ("RED_VALUES" . 1050726) ("SHOW_AXIS" . 1050623) ("SHOW_OUTLINE" . 1050628) ("SUBTICKLEN" . 1050632) ("THICK" . 1050634) ("THREED " . 1050636) ("TICKFORMAT" . 1050638) ("TICKFRMTDATA" . 1050643) ("TICKLEN" . 1050645) ("TICKTEXT" . 1050647) ("TICKVALUES" . 1050649) ("TITLE " . 1050651) ("XCOORD_CONV" . 1050655) ("YCOORD_CONV" . 1050716) ("ZCOORD_CONV " . 1050706)))
+    ("AdjustLabelOffsets" pro "IDLgrContour" (system) "Obj->[%s::]%s, LevelIndex, LabelOffsets" ("objects_gr45.html"))
+    ("Cleanup" pro "IDLgrContour" (system) "Obj->[%s::]%s" ("objects_gr46.html"))
+    ("GetLabelInfo" pro "IDLgrContour" (system) "Obj->[%s::]%s, Destination, LevelIndex" ("objects_gr48.html" ("LABEL_OBJECTS" . 1009508) ("LABEL_OFFSETS" . 1009503) ("LABEL_POLYLINES" . 1009505)))
+    ("GetProperty" pro "IDLgrContour" (system) "Obj->[%s::]%s" ("objects_gr49.html" ) ("objects_gr44.html" ("ALL" . 1050990) ("ALPHA_CHANNEL" . 1312243) ("AM_PM" . 1051012) ("ANISOTROPY" . 1051014) ("C_COLOR" . 1051029) ("C_FILL_PATTERN" . 1051031) ("C_LABEL_INTERVAL" . 1051033) ("C_LABEL_NOGAPS" . 1051035) ("C_LABEL_OBJECTS" . 1051037) ("C_LABEL_SHOW" . 1051044) ("C_LINESTYLE" . 1051046) ("C_THICK" . 1051056) ("C_USE_LABEL_COLOR" . 1066031) ("C_USE_LABEL_ORIENTATION" . 1051060) ("C_VALUE" . 1051062) ("CLIP_PLANES" . 1051064) ("COLOR" . 1051069) ("DATA_VALUES" . 1051071) ("DAYS_OF_WEEK" . 1051073) ("DEPTH_OFFSET " . 1051075) ("DEPTH_TEST_DISABLE" . 1051081) ("DEPTH_TEST_FUNCTION" . 1093566) ("DEPTH_WRITE_DISABLE" . 1093567) ("DOUBLE_DATA" . 1093568) ("DOUBLE_GEOM" . 1051083) ("DOWNHILL " . 1051085) ("FILL" . 1051087) ("GEOM" . 1051284) ("HIDE" . 1051101) ("LABEL_FONT" . 1051105) ("LABEL_FORMAT" . 1051107) ("LABEL_UNITS" . 1051116) ("MAX_VALUE" . 1051130) ("MIN_VALUE" . 1051134) ("MONTHS " . 1051132) ("N_LEVELS" . 1051138) ("PARENT" . 1051274) ("PLANAR" . 1051272) ("POLYGONS" . 1051144) ("SHADE_RANGE " . 1094439) ("SHADING" . 1051149) ("TICKINTERVAL " . 1051154) ("TICKLEN" . 1051156) ("USE_TEXT_ALIGNMENTS" . 1051158) ("XCOORD_CONV" . 1051162) ("XRANGE" . 1051264) ("YCOORD_CONV" . 1051168) ("YRANGE " . 1051250) ("ZCOORD_CONV " . 1051174) ("ZRANGE" . 1051240)))
+    ("SetProperty" pro "IDLgrContour" (system) "Obj->[%s::]%s" ("objects_gr51.html" ) ("objects_gr44.html" ("ALPHA_CHANNEL" . 1312243) ("AM_PM" . 1051012) ("ANISOTROPY" . 1051014) ("C_COLOR" . 1051029) ("C_FILL_PATTERN" . 1051031) ("C_LABEL_INTERVAL" . 1051033) ("C_LABEL_NOGAPS" . 1051035) ("C_LABEL_OBJECTS" . 1051037) ("C_LABEL_SHOW" . 1051044) ("C_LINESTYLE" . 1051046) ("C_THICK" . 1051056) ("C_USE_LABEL_COLOR" . 1066031) ("C_USE_LABEL_ORIENTATION" . 1051060) ("C_VALUE" . 1051062) ("CLIP_PLANES" . 1051064) ("COLOR" . 1051069) ("DATA_VALUES" . 1051071) ("DAYS_OF_WEEK" . 1051073) ("DEPTH_OFFSET " . 1051075) ("DEPTH_TEST_DISABLE" . 1051081) ("DEPTH_TEST_FUNCTION" . 1093566) ("DEPTH_WRITE_DISABLE" . 1093567) ("DOUBLE_DATA" . 1093568) ("DOUBLE_GEOM" . 1051083) ("DOWNHILL " . 1051085) ("FILL" . 1051087) ("GEOMX" . 1051282) ("GEOMY" . 1051091) ("GEOMZ" . 1051093) ("HIDE" . 1051101) ("LABEL_FONT" . 1051105) ("LABEL_FORMAT" . 1051107) ("LABEL_UNITS" . 1051116) ("MAX_VALUE" . 1051130) ("MIN_VALUE" . 1051134) ("MONTHS " . 1051132) ("N_LEVELS" . 1051138) ("PLANAR" . 1051272) ("POLYGONS" . 1051144) ("SHADE_RANGE " . 1094439) ("SHADING" . 1051149) ("TICKINTERVAL " . 1051154) ("TICKLEN" . 1051156) ("USE_TEXT_ALIGNMENTS" . 1051158) ("XCOORD_CONV" . 1051162) ("YCOORD_CONV" . 1051168) ("ZCOORD_CONV " . 1051174)))
+    ("GetCTM" fun "IDLgrContour" (system) "Result = Obj->[%s::]%s()" ("objects_gr47.html" ("DESTINATION" . 1009456) ("PATH" . 1009458) ("TOP" . 1009464)))
+    ("Init" fun "IDLgrContour" (system) "Result = Obj->[%s::]%s([, Values])" ("objects_gr50.html" ) ("objects_gr44.html" ("ALPHA_CHANNEL" . 1312243) ("AM_PM" . 1051012) ("ANISOTROPY" . 1051014) ("C_COLOR" . 1051029) ("C_FILL_PATTERN" . 1051031) ("C_LABEL_INTERVAL" . 1051033) ("C_LABEL_NOGAPS" . 1051035) ("C_LABEL_OBJECTS" . 1051037) ("C_LABEL_SHOW" . 1051044) ("C_LINESTYLE" . 1051046) ("C_THICK" . 1051056) ("C_USE_LABEL_COLOR" . 1066031) ("C_USE_LABEL_ORIENTATION" . 1051060) ("C_VALUE" . 1051062) ("CLIP_PLANES" . 1051064) ("COLOR" . 1051069) ("DATA_VALUES" . 1051071) ("DAYS_OF_WEEK" . 1051073) ("DEPTH_OFFSET " . 1051075) ("DEPTH_TEST_DISABLE" . 1051081) ("DEPTH_TEST_FUNCTION" . 1093566) ("DEPTH_WRITE_DISABLE" . 1093567) ("DOUBLE_DATA" . 1093568) ("DOUBLE_GEOM" . 1051083) ("DOWNHILL " . 1051085) ("FILL" . 1051087) ("GEOMX" . 1051282) ("GEOMY" . 1051091) ("GEOMZ" . 1051093) ("HIDE" . 1051101) ("LABEL_FONT" . 1051105) ("LABEL_FORMAT" . 1051107) ("LABEL_FRMTDATA " . 1051113) ("LABEL_UNITS" . 1051116) ("MAX_VALUE" . 1051130) ("MIN_VALUE" . 1051134) ("MONTHS " . 1051132) ("N_LEVELS" . 1051138) ("PALETTE " . 1051140) ("PLANAR" . 1051272) ("POLYGONS" . 1051144) ("REGISTER_PROPERTIES" . 1051147) ("SHADE_RANGE " . 1094439) ("SHADING" . 1051149) ("TICKINTERVAL " . 1051154) ("TICKLEN" . 1051156) ("USE_TEXT_ALIGNMENTS" . 1051158) ("XCOORD_CONV" . 1051162) ("YCOORD_CONV" . 1051168) ("ZCOORD_CONV " . 1051174)))
+    ("Cleanup" pro "IDLgrFont" (system) "Obj->[%s::]%s" ("objects_gr54.html"))
+    ("GetProperty" pro "IDLgrFont" (system) "Obj->[%s::]%s" ("objects_gr55.html" ) ("objects_gr53.html" ("ALL" . 1051913) ("SIZE" . 1051936) ("SUBSTITUTE" . 1051938) ("THICK" . 1051940)))
+    ("SetProperty" pro "IDLgrFont" (system) "Obj->[%s::]%s" ("objects_gr57.html" ) ("objects_gr53.html" ("SIZE" . 1051936) ("SUBSTITUTE" . 1051938) ("THICK" . 1051940)))
+    ("Init" fun "IDLgrFont" (system) "Result = Obj->[%s::]%s([, Fontname])" ("objects_gr56.html" ) ("objects_gr53.html" ("SIZE" . 1051936) ("SUBSTITUTE" . 1051938) ("THICK" . 1051940)))
+    ("Cleanup" pro "IDLgrImage" (system) "Obj->[%s::]%s" ("objects_gr60.html"))
+    ("GetProperty" pro "IDLgrImage" (system) "Obj->[%s::]%s" ("objects_gr62.html" ) ("objects_gr59.html" ("ALL " . 1052050) ("BLEND_FUNCTION" . 1052068) ("CHANNEL" . 1052124) ("CLIP_PLANES" . 1287882) ("DATA" . 1052132) ("DEPTH_TEST_DISABLE" . 1095165) ("DEPTH_TEST_FUNCTION" . 1095212) ("DEPTH_WRITE_DISABLE" . 1095251) ("DIMENSIONS" . 1095169) ("GREYSCALE" . 1052136) ("HIDE" . 1052140) ("INTERLEAVE" . 1052144) ("INTERPOLATE" . 1052150) ("LOCATION" . 1052152) ("NO_COPY" . 1052156) ("ORDER" . 1052158) ("PALETTE " . 1052160) ("PARENT" . 1052253) ("SUB_RECT" . 1052171) ("XCOORD_CONV" . 1052175) ("XRANGE" . 1052243) ("YCOORD_CONV" . 1052181) ("YRANGE" . 1052233) ("ZCOORD_CONV" . 1052187) ("ZRANGE" . 1052223)))
+    ("SetProperty" pro "IDLgrImage" (system) "Obj->[%s::]%s" ("objects_gr64.html" ) ("objects_gr59.html" ("BLEND_FUNCTION" . 1052068) ("CHANNEL" . 1052124) ("CLIP_PLANES" . 1287882) ("DATA" . 1052132) ("DEPTH_TEST_DISABLE" . 1095165) ("DEPTH_TEST_FUNCTION" . 1095212) ("DEPTH_WRITE_DISABLE" . 1095251) ("DIMENSIONS" . 1095169) ("GREYSCALE" . 1052136) ("HIDE" . 1052140) ("INTERLEAVE" . 1052144) ("INTERPOLATE" . 1052150) ("LOCATION" . 1052152) ("NO_COPY" . 1052156) ("ORDER" . 1052158) ("PALETTE " . 1052160) ("RESET_DATA " . 1093772) ("SHARE_DATA" . 1052169) ("SUB_RECT" . 1052171) ("XCOORD_CONV" . 1052175) ("YCOORD_CONV" . 1052181) ("ZCOORD_CONV" . 1052187)))
+    ("GetCTM" fun "IDLgrImage" (system) "Result = Obj->[%s::]%s()" ("objects_gr61.html" ("DESTINATION" . 1010164) ("PATH" . 1010166) ("TOP" . 1010172)))
+    ("Init" fun "IDLgrImage" (system) "Result = Obj->[%s::]%s([, ImageData])" ("objects_gr63.html" ) ("objects_gr59.html" ("BLEND_FUNCTION" . 1052068) ("CHANNEL" . 1052124) ("CLIP_PLANES" . 1287882) ("DATA" . 1052132) ("DEPTH_TEST_DISABLE" . 1095165) ("DEPTH_TEST_FUNCTION" . 1095212) ("DEPTH_WRITE_DISABLE" . 1095251) ("DIMENSIONS" . 1095169) ("GREYSCALE" . 1052136) ("HIDE" . 1052140) ("INTERLEAVE" . 1052144) ("INTERPOLATE" . 1052150) ("LOCATION" . 1052152) ("NO_COPY" . 1052156) ("ORDER" . 1052158) ("PALETTE " . 1052160) ("REGISTER_PROPERTIES" . 1052251) ("RESET_DATA " . 1093772) ("SHARE_DATA" . 1052169) ("SUB_RECT" . 1052171) ("XCOORD_CONV" . 1052175) ("YCOORD_CONV" . 1052181) ("ZCOORD_CONV" . 1052187)))
+    ("Cleanup" pro "IDLgrLegend" (system) "Obj->[%s::]%s" ("objects_gr67.html"))
+    ("GetProperty" pro "IDLgrLegend" (system) "Obj->[%s::]%s" ("objects_gr69.html" ) ("objects_gr66.html" ("ALL " . 1053896) ("BORDER_GAP" . 1053903) ("COLUMNS" . 1053905) ("FILL_COLOR" . 1053907) ("FONT" . 1053909) ("GAP" . 1053912) ("GLYPH_WIDTH" . 1053914) ("HIDE" . 1053916) ("ITEM_COLOR" . 1069308) ("ITEM_LINESTYLE " . 1053922) ("ITEM_NAME" . 1053935) ("ITEM_OBJECT " . 1053937) ("ITEM_THICK" . 1053940) ("ITEM_TYPE" . 1053942) ("OUTLINE_COLOR " . 1053948) ("OUTLINE_THICK" . 1053950) ("PARENT" . 1055362) ("SHOW_FILL" . 1053952) ("SHOW_OUTLINE " . 1053956) ("TEXT_COLOR " . 1053960) ("TITLE" . 1053962) ("XCOORD_CONV " . 1053966) ("XRANGE " . 1055399) ("YCOORD_CONV " . 1053972) ("YRANGE " . 1055389) ("ZCOORD_CONV" . 1053978) ("ZRANGE" . 1070059)))
+    ("SetProperty" pro "IDLgrLegend" (system) "Obj->[%s::]%s" ("objects_gr71.html" ) ("objects_gr66.html" ("BORDER_GAP" . 1053903) ("COLUMNS" . 1053905) ("FILL_COLOR" . 1053907) ("FONT" . 1053909) ("GAP" . 1053912) ("GLYPH_WIDTH" . 1053914) ("HIDE" . 1053916) ("ITEM_COLOR" . 1069308) ("ITEM_LINESTYLE " . 1053922) ("ITEM_NAME" . 1053935) ("ITEM_OBJECT " . 1053937) ("ITEM_THICK" . 1053940) ("ITEM_TYPE" . 1053942) ("OUTLINE_COLOR " . 1053948) ("OUTLINE_THICK" . 1053950) ("RECOMPUTE " . 1055360) ("SHOW_FILL" . 1053952) ("SHOW_OUTLINE " . 1053956) ("TEXT_COLOR " . 1053960) ("TITLE" . 1053962) ("XCOORD_CONV " . 1053966) ("YCOORD_CONV " . 1053972) ("ZCOORD_CONV" . 1053978)))
+    ("ComputeDimensions" fun "IDLgrLegend" (system) "Result = Obj->[%s::]%s( DestinationObject)" ("objects_gr68.html" ("PATH" . 1010563)))
+    ("Init" fun "IDLgrLegend" (system) "Result = Obj->[%s::]%s([, aItemNames])" ("objects_gr70.html" ) ("objects_gr66.html" ("BORDER_GAP" . 1053903) ("COLUMNS" . 1053905) ("FILL_COLOR" . 1053907) ("FONT" . 1053909) ("GAP" . 1053912) ("GLYPH_WIDTH" . 1053914) ("HIDE" . 1053916) ("ITEM_COLOR" . 1069308) ("ITEM_LINESTYLE " . 1053922) ("ITEM_NAME" . 1053935) ("ITEM_OBJECT " . 1053937) ("ITEM_THICK" . 1053940) ("ITEM_TYPE" . 1053942) ("OUTLINE_COLOR " . 1053948) ("OUTLINE_THICK" . 1053950) ("SHOW_FILL" . 1053952) ("SHOW_OUTLINE " . 1053956) ("TEXT_COLOR " . 1053960) ("TITLE" . 1053962) ("XCOORD_CONV " . 1053966) ("YCOORD_CONV " . 1053972) ("ZCOORD_CONV" . 1053978)))
+    ("Cleanup" pro "IDLgrLight" (system) "Obj->[%s::]%s" ("objects_gr74.html"))
+    ("GetProperty" pro "IDLgrLight" (system) "Obj->[%s::]%s" ("objects_gr76.html" ) ("objects_gr73.html" ("ALL" . 1055555) ("ATTENUATION " . 1055572) ("COLOR" . 1055581) ("CONEANGLE" . 1055583) ("DIRECTION" . 1055585) ("FOCUS" . 1055588) ("HIDE" . 1055590) ("INTENSITY" . 1055595) ("LOCATION" . 1055597) ("PALETTE" . 1088211) ("PARENT" . 1055635) ("TYPE" . 1093801) ("XCOORD_CONV " . 1055609) ("YCOORD_CONV" . 1055615) ("ZCOORD_CONV " . 1055621)))
+    ("SetProperty" pro "IDLgrLight" (system) "Obj->[%s::]%s" ("objects_gr78.html" ) ("objects_gr73.html" ("ATTENUATION " . 1055572) ("COLOR" . 1055581) ("CONEANGLE" . 1055583) ("DIRECTION" . 1055585) ("FOCUS" . 1055588) ("HIDE" . 1055590) ("INTENSITY" . 1055595) ("LOCATION" . 1055597) ("PALETTE" . 1088211) ("TYPE" . 1093801) ("XCOORD_CONV " . 1055609) ("YCOORD_CONV" . 1055615) ("ZCOORD_CONV " . 1055621)))
+    ("GetCTM" fun "IDLgrLight" (system) "Result = Obj->[%s::]%s()" ("objects_gr75.html" ("DESTINATION" . 1010900) ("PATH" . 1010902) ("TOP" . 1010908)))
+    ("Init" fun "IDLgrLight" (system) "Result = Obj->[%s::]%s()" ("objects_gr77.html" ) ("objects_gr73.html" ("ATTENUATION " . 1055572) ("COLOR" . 1055581) ("CONEANGLE" . 1055583) ("DIRECTION" . 1055585) ("FOCUS" . 1055588) ("HIDE" . 1055590) ("INTENSITY" . 1055595) ("LOCATION" . 1055597) ("PALETTE" . 1088211) ("REGISTER_PROPERTIES" . 1088158) ("TYPE" . 1093801) ("XCOORD_CONV " . 1055609) ("YCOORD_CONV" . 1055615) ("ZCOORD_CONV " . 1055621)))
+    ("Add" pro "IDLgrModel" (system) "Obj->[%s::]%s, Object" ("objects_gr81.html" ("ALIAS" . 1011206) ("POSITION" . 1011208)))
+    ("Cleanup" pro "IDLgrModel" (system) "Obj->[%s::]%s" ("objects_gr82.html"))
+    ("Draw" pro "IDLgrModel" (system) "Obj->[%s::]%s, Destination, Picture" ("objects_gr83.html"))
+    ("GetProperty" pro "IDLgrModel" (system) "Obj->[%s::]%s" ("objects_gr86.html" ) ("objects_gr80.html" ("ALL " . 1055726) ("CLIP_PLANES " . 1055740) ("DEPTH_TEST_DISABLE" . 1094976) ("DEPTH_TEST_FUNCTION" . 1095322) ("DEPTH_WRITE_DISABLE" . 1095361) ("HIDE " . 1088312) ("LIGHTING" . 1055751) ("PARENT " . 1055781) ("SELECT_TARGET " . 1093831) ("TRANSFORM " . 1055764)))
+    ("Reset" pro "IDLgrModel" (system) "Obj->[%s::]%s" ("objects_gr88.html"))
+    ("Rotate" pro "IDLgrModel" (system) "Obj->[%s::]%s, Axis, Angle" ("objects_gr89.html" ("PREMULTIPLY" . 1011584)))
+    ("Scale" pro "IDLgrModel" (system) "Obj->[%s::]%s, Sx, Sy, Sz" ("objects_gr90.html" ("PREMULTIPLY" . 1011618)))
+    ("SetProperty" pro "IDLgrModel" (system) "Obj->[%s::]%s" ("objects_gr91.html" ) ("objects_gr80.html" ("CLIP_PLANES " . 1055740) ("DEPTH_TEST_DISABLE" . 1094976) ("DEPTH_TEST_FUNCTION" . 1095322) ("DEPTH_WRITE_DISABLE" . 1095361) ("HIDE " . 1088312) ("LIGHTING" . 1055751) ("SELECT_TARGET " . 1093831) ("TRANSFORM " . 1055764)))
+    ("Translate" pro "IDLgrModel" (system) "Obj->[%s::]%s, Tx, Ty, Tz" ("objects_gr92.html" ("PREMULTIPLY" . 1011687)))
+    ("GetByName" fun "IDLgrModel" (system) "Result = Obj->[%s::]%s(Name)" ("objects_gr84.html"))
+    ("GetCTM" fun "IDLgrModel" (system) "Result = Obj->[%s::]%s()" ("objects_gr85.html" ("DESTINATION" . 1011369) ("PATH" . 1011371) ("TOP" . 1011377)))
+    ("Init" fun "IDLgrModel" (system) "Result = Obj->[%s::]%s()" ("objects_gr87.html" ) ("objects_gr80.html" ("CLIP_PLANES " . 1055740) ("DEPTH_TEST_DISABLE" . 1094976) ("DEPTH_TEST_FUNCTION" . 1095322) ("DEPTH_WRITE_DISABLE" . 1095361) ("HIDE " . 1088312) ("LIGHTING" . 1055751) ("REGISTER_PROPERTIES" . 1055779) ("SELECT_TARGET " . 1093831) ("TRANSFORM " . 1055764)))
+    ("Cleanup" pro "IDLgrMPEG" (system) "Obj->[%s::]%s" ("objects_gr95.html"))
+    ("GetProperty" pro "IDLgrMPEG" (system) "Obj->[%s::]%s" ("objects_gr96.html" ) ("objects_gr94.html" ("ALL " . 1055838) ("BITRATE " . 1055845) ("FILENAME" . 1055875) ("FORMAT " . 1055877) ("FRAME_RATE " . 1055881) ("IFRAME_GAP" . 1055927) ("INTERLACED" . 1055934) ("MOTION_VEC_LENGTH" . 1055936) ("QUALITY" . 1055964) ("SCALE" . 1055967) ("STATISTICS" . 1055969)))
+    ("Put" pro "IDLgrMPEG" (system) "Obj->[%s::]%s, Image[, Frame]" ("objects_gr98.html"))
+    ("Save" pro "IDLgrMPEG" (system) "Obj->[%s::]%s" ("objects_gr99.html" ("FILENAME" . 1012062)))
+    ("SetProperty" pro "IDLgrMPEG" (system) "Obj->[%s::]%s" ("objects_gr100.html" ) ("objects_gr94.html" ("BITRATE " . 1055845) ("FILENAME" . 1055875) ("FORMAT " . 1055877) ("FRAME_RATE " . 1055881) ("IFRAME_GAP" . 1055927) ("INTERLACED" . 1055934) ("MOTION_VEC_LENGTH" . 1055936) ("QUALITY" . 1055964) ("SCALE" . 1055967) ("STATISTICS" . 1055969)))
+    ("Init" fun "IDLgrMPEG" (system) "Result = Obj->[%s::]%s()" ("objects_gr97.html" ) ("objects_gr94.html" ("BITRATE " . 1055845) ("FILENAME" . 1055875) ("FORMAT " . 1055877) ("FRAME_RATE " . 1055881) ("IFRAME_GAP" . 1055927) ("INTERLACED" . 1055934) ("MOTION_VEC_LENGTH" . 1055936) ("QUALITY" . 1055964) ("SCALE" . 1055967) ("STATISTICS" . 1055969) ("TEMP_DIRECTORY " . 1055971)))
+    ("Cleanup" pro "IDLgrPalette" (system) "Obj->[%s::]%s" ("objects_gr103.html"))
+    ("GetProperty" pro "IDLgrPalette" (system) "Obj->[%s::]%s" ("objects_gr105.html" ) ("objects_gr102.html" ("ALL" . 1056048) ("BLUE_VALUES " . 1056069) ("BOTTOM_STRETCH " . 1056071) ("GAMMA" . 1056073) ("GREEN_VALUES" . 1056075) ("N_COLORS" . 1056093) ("RED_VALUES" . 1056079) ("TOP_STRETCH " . 1056081)))
+    ("LoadCT" pro "IDLgrPalette" (system) "Obj->[%s::]%s, TableNum" ("objects_gr107.html" ("FILE" . 1012379)))
+    ("SetProperty" pro "IDLgrPalette" (system) "Obj->[%s::]%s" ("objects_gr110.html" ) ("objects_gr102.html" ("BLUE_VALUES " . 1056069) ("BOTTOM_STRETCH " . 1056071) ("GAMMA" . 1056073) ("GREEN_VALUES" . 1056075) ("RED_VALUES" . 1056079) ("TOP_STRETCH " . 1056081)))
+    ("SetRGB" pro "IDLgrPalette" (system) "Obj->[%s::]%s, Index, Red, Green, Blue" ("objects_gr109.html"))
+    ("GetRGB" fun "IDLgrPalette" (system) "Result = Obj->[%s::]%s(Index)" ("objects_gr104.html"))
+    ("Init" fun "IDLgrPalette" (system) "Result = Obj->[%s::]%s(, aRed, aGreen, aBlue)" ("objects_gr106.html" ) ("objects_gr102.html" ("BLUE_VALUES " . 1056069) ("BOTTOM_STRETCH " . 1056071) ("GAMMA" . 1056073) ("GREEN_VALUES" . 1056075) ("RED_VALUES" . 1056079) ("TOP_STRETCH " . 1056081)))
+    ("NearestColor" fun "IDLgrPalette" (system) "Result = Obj->[%s::]%s(Red, Green, Blue)" ("objects_gr108.html"))
+    ("Cleanup" pro "IDLgrPattern" (system) "Obj->[%s::]%s" ("objects_gr113.html"))
+    ("GetProperty" pro "IDLgrPattern" (system) "Obj->[%s::]%s" ("objects_gr114.html" ) ("objects_gr112.html" ("ALL" . 1056154) ("ORIENTATION " . 1056165) ("PATTERN" . 1056169) ("SPACING " . 1056171) ("STYLE" . 1056173)))
+    ("SetProperty" pro "IDLgrPattern" (system) "Obj->[%s::]%s" ("objects_gr116.html" ) ("objects_gr112.html" ("ORIENTATION " . 1056165) ("PATTERN" . 1056169) ("SPACING " . 1056171) ("STYLE" . 1056173)))
+    ("Init" fun "IDLgrPattern" (system) "Result = Obj->[%s::]%s([, Style])" ("objects_gr115.html" ) ("objects_gr112.html" ("ORIENTATION " . 1056165) ("PATTERN" . 1056169) ("SPACING " . 1056171) ("STYLE" . 1056173) ("THICK " . 1056179)))
+    ("Cleanup" pro "IDLgrPlot" (system) "Obj->[%s::]%s" ("objects_gr119.html"))
+    ("GetProperty" pro "IDLgrPlot" (system) "Obj->[%s::]%s" ("objects_gr121.html" ) ("objects_gr118.html" ("ALL" . 1056243) ("ALPHA_CHANNEL" . 1056258) ("CLIP_PLANES " . 1314217) ("COLOR " . 1056263) ("DATA" . 1056381) ("DEPTH_TEST_DISABLE" . 1094982) ("DEPTH_TEST_FUNCTION" . 1095444) ("DEPTH_WRITE_DISABLE" . 1095483) ("DOUBLE " . 1056269) ("HIDE " . 1056271) ("HISTOGRAM" . 1092755) ("LINESTYLE" . 1056277) ("MAX_VALUE " . 1056290) ("MIN_VALUE " . 1056292) ("NSUM" . 1056296) ("PALETTE" . 1056298) ("PARENT " . 1056392) ("POLAR " . 1056389) ("SYMBOL " . 1056306) ("THICK" . 1056311) ("VERT_COLORS" . 1056317) ("XCOORD_CONV" . 1056319) ("XRANGE " . 1056325) ("YCOORD_CONV " . 1056327) ("YRANGE" . 1056333) ("ZCOORD_CONV" . 1056335) ("ZRANGE" . 1074286) ("ZVALUE" . 1056400)))
+    ("SetProperty" pro "IDLgrPlot" (system) "Obj->[%s::]%s" ("objects_gr123.html" ) ("objects_gr118.html" ("ALPHA_CHANNEL" . 1056258) ("CLIP_PLANES " . 1314217) ("COLOR " . 1056263) ("DATAX" . 1056378) ("DATAY" . 1056267) ("DEPTH_TEST_DISABLE" . 1094982) ("DEPTH_TEST_FUNCTION" . 1095444) ("DEPTH_WRITE_DISABLE" . 1095483) ("DOUBLE " . 1056269) ("HIDE " . 1056271) ("HISTOGRAM" . 1092755) ("LINESTYLE" . 1056277) ("MAX_VALUE " . 1056290) ("MIN_VALUE " . 1056292) ("NSUM" . 1056296) ("PALETTE" . 1056298) ("POLAR " . 1056389) ("RESET_DATA " . 1093845) ("SHARE_DATA " . 1056304) ("SYMBOL " . 1056306) ("THICK" . 1056311) ("VERT_COLORS" . 1056317) ("XCOORD_CONV" . 1056319) ("XRANGE " . 1056325) ("YCOORD_CONV " . 1056327) ("YRANGE" . 1056333) ("ZCOORD_CONV" . 1056335) ("ZVALUE" . 1056400)))
+    ("GetCTM" fun "IDLgrPlot" (system) "Result = Obj->[%s::]%s()" ("objects_gr120.html" ("DESTINATION" . 1012838) ("PATH" . 1012840) ("TOP" . 1012846)))
+    ("Init" fun "IDLgrPlot" (system) "Result = Obj->[%s::]%s([, [X,] Y])" ("objects_gr122.html" ) ("objects_gr118.html" ("ALPHA_CHANNEL" . 1056258) ("CLIP_PLANES " . 1314217) ("COLOR " . 1056263) ("DATAX" . 1056378) ("DATAY" . 1056267) ("DEPTH_TEST_DISABLE" . 1094982) ("DEPTH_TEST_FUNCTION" . 1095444) ("DEPTH_WRITE_DISABLE" . 1095483) ("DOUBLE " . 1056269) ("HIDE " . 1056271) ("HISTOGRAM" . 1092755) ("LINESTYLE" . 1056277) ("MAX_VALUE " . 1056290) ("MIN_VALUE " . 1056292) ("NSUM" . 1056296) ("PALETTE" . 1056298) ("POLAR " . 1056389) ("REGISTER_PROPERTIES" . 1056302) ("RESET_DATA " . 1093845) ("SHARE_DATA " . 1056304) ("SYMBOL " . 1056306) ("THICK" . 1056311) ("USE_ZVALUE" . 1056313) ("VERT_COLORS" . 1056317) ("XCOORD_CONV" . 1056319) ("XRANGE " . 1056325) ("YCOORD_CONV " . 1056327) ("YRANGE" . 1056333) ("ZCOORD_CONV" . 1056335) ("ZVALUE" . 1056400)))
+    ("Cleanup" pro "IDLgrPolygon" (system) "Obj->[%s::]%s" ("objects_gr126.html"))
+    ("GetProperty" pro "IDLgrPolygon" (system) "Obj->[%s::]%s" ("objects_gr128.html" ) ("objects_gr125.html" ("ALL" . 1056563) ("ALPHA_CHANNEL" . 1316054) ("AMBIENT" . 1309898) ("BOTTOM" . 1074388) ("CLIP_PLANES" . 1056581) ("COLOR " . 1056586) ("DATA" . 1309971) ("DEPTH_OFFSET " . 1056590) ("DEPTH_TEST_DISABLE" . 1094995) ("DEPTH_TEST_FUNCTION" . 1095559) ("DEPTH_WRITE_DISABLE" . 1095598) ("DIFFUSE" . 1310292) ("DOUBLE " . 1310286) ("EMISSION" . 1310032) ("FILL_PATTERN " . 1056598) ("HIDE " . 1056602) ("LINESTYLE " . 1056606) ("NORMALS" . 1056621) ("PARENT " . 1056792) ("POLYGONS" . 1056790) ("REJECT " . 1093870) ("SHADE_RANGE " . 1056643) ("SHADING " . 1056645) ("SHININESS" . 1310128) ("SPECULAR" . 1310225) ("STYLE " . 1310253) ("TEXTURE_COORD" . 1214343) ("TEXTURE_INTERP " . 1056664) ("TEXTURE_MAP " . 1056666) ("THICK " . 1056674) ("VERT_COLORS " . 1056679) ("XCOORD_CONV " . 1088401) ("XRANGE" . 1056808) ("YCOORD_CONV " . 1075980) ("YRANGE" . 1056822) ("ZCOORD_CONV" . 1056694) ("ZERO_OPACITY_SKIP " . 1056700) ("ZRANGE" . 1056834)))
+    ("SetProperty" pro "IDLgrPolygon" (system) "Obj->[%s::]%s" ("objects_gr130.html" ) ("objects_gr125.html" ("ALPHA_CHANNEL" . 1316054) ("AMBIENT" . 1309898) ("BOTTOM" . 1074388) ("CLIP_PLANES" . 1056581) ("COLOR " . 1056586) ("DATA" . 1309971) ("DEPTH_OFFSET " . 1056590) ("DEPTH_TEST_DISABLE" . 1094995) ("DEPTH_TEST_FUNCTION" . 1095559) ("DEPTH_WRITE_DISABLE" . 1095598) ("DIFFUSE" . 1310292) ("DOUBLE " . 1310286) ("EMISSION" . 1310032) ("FILL_PATTERN " . 1056598) ("HIDE " . 1056602) ("LINESTYLE " . 1056606) ("NORMALS" . 1056621) ("POLYGONS" . 1056790) ("REJECT " . 1093870) ("RESET_DATA " . 1056641) ("SHADE_RANGE " . 1056643) ("SHADING " . 1056645) ("SHARE_DATA " . 1056650) ("SHININESS" . 1310128) ("SPECULAR" . 1310225) ("STYLE " . 1310253) ("TEXTURE_COORD" . 1214343) ("TEXTURE_INTERP " . 1056664) ("TEXTURE_MAP " . 1056666) ("THICK " . 1056674) ("VERT_COLORS " . 1056679) ("XCOORD_CONV " . 1088401) ("YCOORD_CONV " . 1075980) ("ZCOORD_CONV" . 1056694) ("ZERO_OPACITY_SKIP " . 1056700)))
+    ("GetCTM" fun "IDLgrPolygon" (system) "Result = Obj->[%s::]%s()" ("objects_gr127.html" ("DESTINATION" . 1013188) ("PATH" . 1013190) ("TOP" . 1013196)))
+    ("Init" fun "IDLgrPolygon" (system) "Result = Obj->[%s::]%s([, X [, Y[, Z]]])" ("objects_gr129.html" ) ("objects_gr125.html" ("ALPHA_CHANNEL" . 1316054) ("AMBIENT" . 1309898) ("BOTTOM" . 1074388) ("CLIP_PLANES" . 1056581) ("COLOR " . 1056586) ("DATA" . 1309971) ("DEPTH_OFFSET " . 1056590) ("DEPTH_TEST_DISABLE" . 1094995) ("DEPTH_TEST_FUNCTION" . 1095559) ("DEPTH_WRITE_DISABLE" . 1095598) ("DIFFUSE" . 1310292) ("DOUBLE " . 1310286) ("EMISSION" . 1310032) ("FILL_PATTERN " . 1056598) ("HIDDEN_LINES" . 1056600) ("HIDE " . 1056602) ("LINESTYLE " . 1056606) ("NORMALS" . 1056621) ("PALETTE" . 1056629) ("POLYGONS" . 1056790) ("REGISTER_PROPERTIES" . 1327262) ("REJECT " . 1093870) ("RESET_DATA " . 1056641) ("SHADE_RANGE " . 1056643) ("SHADING " . 1056645) ("SHARE_DATA " . 1056650) ("SHININESS" . 1310128) ("SPECULAR" . 1310225) ("STYLE " . 1310253) ("TEXTURE_COORD" . 1214343) ("TEXTURE_INTERP " . 1056664) ("TEXTURE_MAP " . 1056666) ("THICK " . 1056674) ("VERT_COLORS " . 1056679) ("XCOORD_CONV " . 1088401) ("YCOORD_CONV " . 1075980) ("ZCOORD_CONV" . 1056694) ("ZERO_OPACITY_SKIP " . 1056700)))
+    ("Cleanup" pro "IDLgrPolyline" (system) "Obj->[%s::]%s" ("objects_gr133.html"))
+    ("GetProperty" pro "IDLgrPolyline" (system) "Obj->[%s::]%s" ("objects_gr135.html" ) ("objects_gr132.html" ("ALL" . 1056980) ("ALPHA_CHANNEL" . 1329463) ("CLIP_PLANES " . 1056996) ("COLOR" . 1057001) ("DATA" . 1057003) ("DEPTH_TEST_DISABLE" . 1095001) ("DEPTH_TEST_FUNCTION" . 1095681) ("DEPTH_WRITE_DISABLE" . 1095720) ("DOUBLE" . 1057005) ("HIDE" . 1057007) ("LABEL_NOGAPS" . 1057011) ("LABEL_OBJECTS" . 1057019) ("LABEL_OFFSETS " . 1057017) ("LABEL_POLYLINES" . 1057330) ("LABEL_USE_VERTEX_COLOR" . 1077987) ("LINESTYLE" . 1057029) ("PALETTE " . 1057044) ("PARENT" . 1057101) ("POLYLINES" . 1057099) ("SHADING" . 1057051) ("SYMBOL" . 1057058) ("THICK" . 1057063) ("USE_LABEL_COLOR" . 1057065) ("USE_LABEL_ORIENTATION" . 1057067) ("USE_TEXT_ALIGNMENTS" . 1057069) ("VERT_COLORS " . 1057073) ("XCOORD_CONV " . 1057075) ("XRANGE" . 1057143) ("YCOORD_CONV" . 1057081) ("YRANGE " . 1057133) ("ZCOORD_CONV" . 1077892) ("ZRANGE" . 1057121)))
+    ("SetProperty" pro "IDLgrPolyline" (system) "Obj->[%s::]%s" ("objects_gr137.html" ) ("objects_gr132.html" ("ALPHA_CHANNEL" . 1329463) ("CLIP_PLANES " . 1056996) ("COLOR" . 1057001) ("DATA" . 1057003) ("DEPTH_TEST_DISABLE" . 1095001) ("DEPTH_TEST_FUNCTION" . 1095681) ("DEPTH_WRITE_DISABLE" . 1095720) ("DOUBLE" . 1057005) ("HIDE" . 1057007) ("LABEL_NOGAPS" . 1057011) ("LABEL_OBJECTS" . 1057019) ("LABEL_OFFSETS " . 1057017) ("LABEL_POLYLINES" . 1057330) ("LABEL_USE_VERTEX_COLOR" . 1077987) ("LINESTYLE" . 1057029) ("PALETTE " . 1057044) ("POLYLINES" . 1057099) ("RESET_DATA" . 1093906) ("SHADING" . 1057051) ("SHARE_DATA " . 1057056) ("SYMBOL" . 1057058) ("THICK" . 1057063) ("USE_LABEL_COLOR" . 1057065) ("USE_LABEL_ORIENTATION" . 1057067) ("USE_TEXT_ALIGNMENTS" . 1057069) ("VERT_COLORS " . 1057073) ("XCOORD_CONV " . 1057075) ("YCOORD_CONV" . 1057081) ("ZCOORD_CONV" . 1077892)))
+    ("GetCTM" fun "IDLgrPolyline" (system) "Result = Obj->[%s::]%s()" ("objects_gr134.html" ("DESTINATION" . 1013579) ("PATH" . 1013581) ("TOP" . 1013587)))
+    ("Init" fun "IDLgrPolyline" (system) "Result = Obj->[%s::]%s([, X [, Y[, Z]]])" ("objects_gr136.html" ) ("objects_gr132.html" ("ALPHA_CHANNEL" . 1329463) ("CLIP_PLANES " . 1056996) ("COLOR" . 1057001) ("DATA" . 1057003) ("DEPTH_TEST_DISABLE" . 1095001) ("DEPTH_TEST_FUNCTION" . 1095681) ("DEPTH_WRITE_DISABLE" . 1095720) ("DOUBLE" . 1057005) ("HIDE" . 1057007) ("LABEL_NOGAPS" . 1057011) ("LABEL_OBJECTS" . 1057019) ("LABEL_OFFSETS " . 1057017) ("LABEL_POLYLINES" . 1057330) ("LABEL_USE_VERTEX_COLOR" . 1077987) ("LINESTYLE" . 1057029) ("PALETTE " . 1057044) ("POLYLINES" . 1057099) ("REGISTER_PROPERTIES" . 1057049) ("RESET_DATA" . 1093906) ("SHADING" . 1057051) ("SHARE_DATA " . 1057056) ("SYMBOL" . 1057058) ("THICK" . 1057063) ("USE_LABEL_COLOR" . 1057065) ("USE_LABEL_ORIENTATION" . 1057067) ("USE_TEXT_ALIGNMENTS" . 1057069) ("VERT_COLORS " . 1057073) ("XCOORD_CONV " . 1057075) ("YCOORD_CONV" . 1057081) ("ZCOORD_CONV" . 1077892)))
+    ("Cleanup" pro "IDLgrPrinter" (system) "Obj->[%s::]%s" ("objects_gr140.html"))
+    ("Draw" pro "IDLgrPrinter" (system) "Obj->[%s::]%s [, Picture]" ("objects_gr141.html" ("VECT_SORTING" . 1340440) ("VECT_TEXT_RENDER_METHOD" . 1340452) ("VECTOR" . 1013979)))
+    ("GetProperty" pro "IDLgrPrinter" (system) "Obj->[%s::]%s" ("objects_gr144.html" ) ("objects_gr139.html" ("ALL " . 1057354) ("COLOR_MODEL" . 1057403) ("DIMENSIONS" . 1057476) ("GAMMA" . 1057474) ("GRAPHICS_TREE " . 1057413) ("LANDSCAPE" . 1057415) ("N_COLORS " . 1057418) ("N_COPIES" . 1057420) ("NAME " . 1344875) ("PALETTE" . 1057464) ("PRINT_QUALITY" . 1057428) ("QUALITY" . 1057435) ("RESOLUTION " . 1093938) ("UNITS" . 1057441)))
+    ("NewDocument" pro "IDLgrPrinter" (system) "Obj->[%s::]%s" ("objects_gr147.html"))
+    ("NewPage" pro "IDLgrPrinter" (system) "Obj->[%s::]%s" ("objects_gr148.html"))
+    ("SetProperty" pro "IDLgrPrinter" (system) "Obj->[%s::]%s" ("objects_gr149.html" ) ("objects_gr139.html" ("GAMMA" . 1057474) ("GRAPHICS_TREE " . 1057413) ("LANDSCAPE" . 1057415) ("N_COPIES" . 1057420) ("PALETTE" . 1057464) ("PRINT_QUALITY" . 1057428) ("QUALITY" . 1057435) ("UNITS" . 1057441)))
+    ("GetContiguousPixels" fun "IDLgrPrinter" (system) "Result = Obj->[%s::]%s()" ("objects_gr142.html"))
+    ("GetFontnames" fun "IDLgrPrinter" (system) "Result = Obj->[%s::]%s( FamilyName)" ("objects_gr143.html" ("IDL_FONTS" . 1014147) ("STYLES" . 1014149)))
+    ("GetTextDimensions" fun "IDLgrPrinter" (system) "Result = Obj->[%s::]%s( TextObj)" ("objects_gr145.html" ("DESCENT" . 1014231) ("PATH" . 1014233)))
+    ("Init" fun "IDLgrPrinter" (system) "Result = Obj->[%s::]%s()" ("objects_gr146.html" ) ("objects_gr139.html" ("COLOR_MODEL" . 1057403) ("GAMMA" . 1057474) ("GRAPHICS_TREE " . 1057413) ("LANDSCAPE" . 1057415) ("N_COLORS " . 1057418) ("N_COPIES" . 1057420) ("PALETTE" . 1057464) ("PRINT_QUALITY" . 1057428) ("QUALITY" . 1057435) ("REGISTER_PROPERTIES" . 1057456) ("UNITS" . 1057441)))
+    ("Cleanup" pro "IDLgrROI" (system) "Obj->[%s::]%s" ("objects_gr152.html"))
+    ("GetProperty" pro "IDLgrROI" (system) "Obj->[%s::]%s" ("objects_gr153.html" ) ("objects_gr151.html" ("ALL" . 1057567) ("ALPHA_CHANNEL" . 1315614) ("CLIP_PLANES" . 1057587) ("COLOR " . 1057592) ("DEPTH_TEST_DISABLE" . 1095007) ("DEPTH_TEST_FUNCTION" . 1095803) ("DEPTH_WRITE_DISABLE" . 1095842) ("DOUBLE" . 1078228) ("HIDE" . 1078231) ("LINESTYLE " . 1057600) ("PALETTE " . 1057611) ("PARENT " . 1345141) ("STYLE" . 1093956) ("SYMBOL" . 1057621) ("THICK" . 1057626) ("XCOORD_CONV" . 1057630) ("XRANGE" . 1057656) ("YCOORD_CONV" . 1057636) ("YRANGE" . 1057668) ("ZCOORD_CONV" . 1057666) ("ZRANGE" . 1057574)))
+    ("SetProperty" pro "IDLgrROI" (system) "Obj->[%s::]%s" ("objects_gr156.html" ) ("objects_gr151.html" ("ALPHA_CHANNEL" . 1315614) ("CLIP_PLANES" . 1057587) ("COLOR " . 1057592) ("DEPTH_TEST_DISABLE" . 1095007) ("DEPTH_TEST_FUNCTION" . 1095803) ("DEPTH_WRITE_DISABLE" . 1095842) ("DOUBLE" . 1078228) ("HIDE" . 1078231) ("LINESTYLE " . 1057600) ("PALETTE " . 1057611) ("STYLE" . 1093956) ("SYMBOL" . 1057621) ("THICK" . 1057626) ("XCOORD_CONV" . 1057630) ("YCOORD_CONV" . 1057636) ("ZCOORD_CONV" . 1057666)))
+    ("Init" fun "IDLgrROI" (system) "Result = Obj->[%s::]%s([, X[, Y[, Z]]])" ("objects_gr154.html" ) ("objects_gr151.html" ("ALPHA_CHANNEL" . 1315614) ("CLIP_PLANES" . 1057587) ("COLOR " . 1057592) ("DEPTH_TEST_DISABLE" . 1095007) ("DEPTH_TEST_FUNCTION" . 1095803) ("DEPTH_WRITE_DISABLE" . 1095842) ("DOUBLE" . 1078228) ("HIDE" . 1078231) ("LINESTYLE " . 1057600) ("PALETTE " . 1057611) ("REGISTER_PROPERTIES" . 1057616) ("STYLE" . 1093956) ("SYMBOL" . 1057621) ("THICK" . 1057626) ("XCOORD_CONV" . 1057630) ("YCOORD_CONV" . 1057636) ("ZCOORD_CONV" . 1057666)))
+    ("PickVertex" fun "IDLgrROI" (system) "Result = Obj->[%s::]%s( Dest, View, Point)" ("objects_gr155.html" ("PATH" . 1014753)))
+    ("Add" pro "IDLgrROIGroup" (system) "Obj->[%s::]%s, ROI" ("objects_gr159.html"))
+    ("Cleanup" pro "IDLgrROIGroup" (system) "Obj->[%s::]%s" ("objects_gr160.html"))
+    ("GetProperty" pro "IDLgrROIGroup" (system) "Obj->[%s::]%s" ("objects_gr161.html" ) ("objects_gr158.html" ("ALL" . 1057772) ("CLIP_PLANES" . 1057798) ("COLOR " . 1057803) ("DEPTH_TEST_DISABLE" . 1095013) ("DEPTH_TEST_FUNCTION" . 1095918) ("DEPTH_WRITE_DISABLE" . 1095957) ("HIDE" . 1057805) ("PARENT " . 1057863) ("XCOORD_CONV" . 1057861) ("XRANGE " . 1057853) ("YCOORD_CONV" . 1057851) ("YRANGE" . 1080305) ("ZCOORD_CONV" . 1057839) ("ZRANGE" . 1057781)))
+    ("SetProperty" pro "IDLgrROIGroup" (system) "Obj->[%s::]%s" ("objects_gr164.html" ) ("objects_gr158.html" ("CLIP_PLANES" . 1057798) ("COLOR " . 1057803) ("DEPTH_TEST_DISABLE" . 1095013) ("DEPTH_TEST_FUNCTION" . 1095918) ("DEPTH_WRITE_DISABLE" . 1095957) ("HIDE" . 1057805) ("XCOORD_CONV" . 1057861) ("YCOORD_CONV" . 1057851) ("ZCOORD_CONV" . 1057839)))
+    ("Init" fun "IDLgrROIGroup" (system) "Result = Obj->[%s::]%s()" ("objects_gr162.html" ) ("objects_gr158.html" ("CLIP_PLANES" . 1057798) ("COLOR " . 1057803) ("DEPTH_TEST_DISABLE" . 1095013) ("DEPTH_TEST_FUNCTION" . 1095918) ("DEPTH_WRITE_DISABLE" . 1095957) ("HIDE" . 1057805) ("XCOORD_CONV" . 1057861) ("YCOORD_CONV" . 1057851) ("ZCOORD_CONV" . 1057839)))
+    ("PickRegion" fun "IDLgrROIGroup" (system) "Result = Obj->[%s::]%s( Dest, View, Point)" ("objects_gr163.html" ("PATH" . 1015096)))
+    ("Add" pro "IDLgrScene" (system) "Obj->[%s::]%s, View" ("objects_gr167.html" ("POSITION" . 1015243)))
+    ("Cleanup" pro "IDLgrScene" (system) "Obj->[%s::]%s" ("objects_gr168.html"))
+    ("GetProperty" pro "IDLgrScene" (system) "Obj->[%s::]%s" ("objects_gr170.html" ) ("objects_gr166.html" ("ALL" . 1057953) ("COLOR" . 1080480) ("TRANSPARENT" . 1093982)))
+    ("SetProperty" pro "IDLgrScene" (system) "Obj->[%s::]%s" ("objects_gr172.html" ) ("objects_gr166.html" ("COLOR" . 1080480) ("TRANSPARENT" . 1093982)))
+    ("GetByName" fun "IDLgrScene" (system) "Result = Obj->[%s::]%s(Name)" ("objects_gr169.html"))
+    ("Init" fun "IDLgrScene" (system) "Result = Obj->[%s::]%s()" ("objects_gr171.html" ) ("objects_gr166.html" ("COLOR" . 1080480) ("HIDE" . 1057961) ("REGISTER_PROPERTIES" . 1057969)))
+    ("Cleanup" pro "IDLgrSurface" (system) "Obj->[%s::]%s" ("objects_gr175.html"))
+    ("GetProperty" pro "IDLgrSurface" (system) "Obj->[%s::]%s" ("objects_gr177.html" ) ("objects_gr174.html" ("ALL" . 1058014) ("ALPHA_CHANNEL" . 1314657) ("AMBIENT" . 1310692) ("BOTTOM" . 1058035) ("CLIP_PLANES" . 1058037) ("COLOR" . 1058042) ("DATA" . 1339889) ("DEPTH_OFFSET " . 1058050) ("DEPTH_TEST_DISABLE" . 1095019) ("DEPTH_TEST_FUNCTION" . 1096040) ("DEPTH_WRITE_DISABLE" . 1096079) ("DIFFUSE" . 1310743) ("DOUBLE" . 1058056) ("EMISSION" . 1310780) ("EXTENDED_LEGO" . 1058059) ("HIDDEN_LINES" . 1058061) ("HIDE" . 1058063) ("LINESTYLE " . 1058067) ("MAX_VALUE " . 1058080) ("MIN_VALUE" . 1058082) ("PALETTE " . 1058086) ("PARENT " . 1058283) ("SHADE_RANGE" . 1058090) ("SHADING" . 1058092) ("SHININESS" . 1310817) ("SHOW_SKIRT" . 1058099) ("SKIRT" . 1058101) ("SPECULAR" . 1310884) ("STYLE" . 1058103) ("TEXTURE_COORD" . 1604848) ("TEXTURE_HIGHRES" . 1058120) ("TEXTURE_INTERP" . 1058123) ("TEXTURE_MAP" . 1058125) ("THICK " . 1058136) ("USE_TRIANGLES" . 1058140) ("VERT_COLORS" . 1058142) ("XCOORD_CONV" . 1058145) ("XRANGE " . 1058297) ("YCOORD_CONV" . 1058295) ("YRANGE" . 1058309) ("ZCOORD_CONV" . 1058307) ("ZERO_OPACITY_SKIP" . 1058163) ("ZRANGE" . 1082521)))
+    ("SetProperty" pro "IDLgrSurface" (system) "Obj->[%s::]%s" ("objects_gr179.html" ) ("objects_gr174.html" ("ALPHA_CHANNEL" . 1314657) ("AMBIENT" . 1310692) ("BOTTOM" . 1058035) ("CLIP_PLANES" . 1058037) ("COLOR" . 1058042) ("DATAX" . 1339826) ("DATAY" . 1058046) ("DATAZ" . 1058048) ("DEPTH_OFFSET " . 1058050) ("DEPTH_TEST_DISABLE" . 1095019) ("DEPTH_TEST_FUNCTION" . 1096040) ("DEPTH_WRITE_DISABLE" . 1096079) ("DIFFUSE" . 1310743) ("DOUBLE" . 1058056) ("EMISSION" . 1310780) ("EXTENDED_LEGO" . 1058059) ("HIDDEN_LINES" . 1058061) ("HIDE" . 1058063) ("LINESTYLE " . 1058067) ("MAX_VALUE " . 1058080) ("MIN_VALUE" . 1058082) ("PALETTE " . 1058086) ("RESET_DATA" . 1094044) ("SHADE_RANGE" . 1058090) ("SHADING" . 1058092) ("SHARE_DATA" . 1082385) ("SHININESS" . 1310817) ("SHOW_SKIRT" . 1058099) ("SKIRT" . 1058101) ("SPECULAR" . 1310884) ("STYLE" . 1058103) ("TEXTURE_COORD" . 1604848) ("TEXTURE_HIGHRES" . 1058120) ("TEXTURE_INTERP" . 1058123) ("TEXTURE_MAP" . 1058125) ("THICK " . 1058136) ("USE_TRIANGLES" . 1058140) ("VERT_COLORS" . 1058142) ("XCOORD_CONV" . 1058145) ("YCOORD_CONV" . 1058295) ("ZCOORD_CONV" . 1058307) ("ZERO_OPACITY_SKIP" . 1058163)))
+    ("GetCTM" fun "IDLgrSurface" (system) "Result = Obj->[%s::]%s()" ("objects_gr176.html" ("DESTINATION" . 1015591) ("PATH" . 1015593) ("TOP" . 1015599)))
+    ("Init" fun "IDLgrSurface" (system) "Result = Obj->[%s::]%s([, Z [, X, Y]])" ("objects_gr178.html" ) ("objects_gr174.html" ("ALPHA_CHANNEL" . 1314657) ("AMBIENT" . 1310692) ("BOTTOM" . 1058035) ("CLIP_PLANES" . 1058037) ("COLOR" . 1058042) ("DATAX" . 1339826) ("DATAY" . 1058046) ("DATAZ" . 1058048) ("DEPTH_OFFSET " . 1058050) ("DEPTH_TEST_DISABLE" . 1095019) ("DEPTH_TEST_FUNCTION" . 1096040) ("DEPTH_WRITE_DISABLE" . 1096079) ("DIFFUSE" . 1310743) ("DOUBLE" . 1058056) ("EMISSION" . 1310780) ("EXTENDED_LEGO" . 1058059) ("HIDDEN_LINES" . 1058061) ("HIDE" . 1058063) ("LINESTYLE " . 1058067) ("MAX_VALUE " . 1058080) ("MIN_VALUE" . 1058082) ("PALETTE " . 1058086) ("REGISTER_PROPERTIES" . 1094041) ("RESET_DATA" . 1094044) ("SHADE_RANGE" . 1058090) ("SHADING" . 1058092) ("SHARE_DATA" . 1082385) ("SHININESS" . 1310817) ("SHOW_SKIRT" . 1058099) ("SKIRT" . 1058101) ("SPECULAR" . 1310884) ("STYLE" . 1058103) ("TEXTURE_COORD" . 1604848) ("TEXTURE_HIGHRES" . 1058120) ("TEXTURE_INTERP" . 1058123) ("TEXTURE_MAP" . 1058125) ("THICK " . 1058136) ("USE_TRIANGLES" . 1058140) ("VERT_COLORS" . 1058142) ("XCOORD_CONV" . 1058145) ("YCOORD_CONV" . 1058295) ("ZCOORD_CONV" . 1058307) ("ZERO_OPACITY_SKIP" . 1058163)))
+    ("Cleanup" pro "IDLgrSymbol" (system) "Obj->[%s::]%s" ("objects_gr182.html"))
+    ("GetProperty" pro "IDLgrSymbol" (system) "Obj->[%s::]%s" ("objects_gr183.html" ) ("objects_gr181.html" ("ALL" . 1058799) ("ALPHA_CHANNEL" . 1315142) ("COLOR" . 1058811) ("DATA" . 1058813) ("SIZE" . 1058817) ("THICK" . 1058823)))
+    ("SetProperty" pro "IDLgrSymbol" (system) "Obj->[%s::]%s" ("objects_gr185.html" ) ("objects_gr181.html" ("ALPHA_CHANNEL" . 1315142) ("COLOR" . 1058811) ("DATA" . 1058813) ("SIZE" . 1058817) ("THICK" . 1058823)))
+    ("Init" fun "IDLgrSymbol" (system) "Result = Obj->[%s::]%s([, Data])" ("objects_gr184.html" ) ("objects_gr181.html" ("ALPHA_CHANNEL" . 1315142) ("COLOR" . 1058811) ("DATA" . 1058813) ("SIZE" . 1058817) ("THICK" . 1058823)))
+    ("AddPolygon" pro "IDLgrTessellator" (system) "Obj->[%s::]%s, X [, Y[, Z]]" ("objects_gr188.html" ("AUXDATA" . 1016227) ("INTERIOR" . 1016232) ("POLYGON" . 1308631)))
+    ("Cleanup" pro "IDLgrTessellator" (system) "Obj->[%s::]%s" ("objects_gr189.html"))
+    ("Reset" pro "IDLgrTessellator" (system) "Obj->[%s::]%s" ("objects_gr191.html"))
+    ("Init" fun "IDLgrTessellator" (system) "Result = Obj->[%s::]%s()" ("objects_gr190.html" ))
+    ("Tessellate" fun "IDLgrTessellator" (system) "Result = Obj->[%s::]%s( Vertices, Poly)" ("objects_gr192.html" ("AUXDATA" . 1016374) ("QUIET" . 1016376)))
+    ("Cleanup" pro "IDLgrText" (system) "Obj->[%s::]%s" ("objects_gr195.html"))
+    ("GetProperty" pro "IDLgrText" (system) "Obj->[%s::]%s" ("objects_gr197.html" ) ("objects_gr194.html" ("ALIGNMENT" . 1058986) ("ALL" . 1058984) ("ALPHA_CHANNEL" . 1096721) ("BASELINE" . 1096723) ("CHAR_DIMENSIONS" . 1058905) ("CLIP_PLANES " . 1058910) ("COLOR " . 1058915) ("DEPTH_TEST_DISABLE" . 1095025) ("DEPTH_TEST_FUNCTION" . 1096162) ("DEPTH_WRITE_DISABLE" . 1096201) ("ENABLE_FORMATTING" . 1058917) ("FILL_BACKGROUND" . 1058922) ("FILL_COLOR" . 1090549) ("FONT" . 1090557) ("HIDE" . 1058929) ("KERNING" . 1058933) ("LOCATIONS" . 1090561) ("ONGLASS" . 1058937) ("PALETTE" . 1058939) ("PARENT" . 1058996) ("RECOMPUTE_DIMENSIONS " . 1058994) ("RENDER_METHOD" . 1096891) ("STRINGS " . 1096894) ("UPDIR " . 1058950) ("VERTICAL_ALIGNMENT" . 1058954) ("XCOORD_CONV" . 1058956) ("XRANGE" . 1059010) ("YCOORD_CONV" . 1059008) ("YRANGE" . 1059022) ("ZCOORD_CONV" . 1058968) ("ZRANGE" . 1058890)))
+    ("SetProperty" pro "IDLgrText" (system) "Obj->[%s::]%s" ("objects_gr199.html" ) ("objects_gr194.html" ("ALIGNMENT" . 1058986) ("ALPHA_CHANNEL" . 1096721) ("BASELINE" . 1096723) ("CHAR_DIMENSIONS" . 1058905) ("CLIP_PLANES " . 1058910) ("COLOR " . 1058915) ("DEPTH_TEST_DISABLE" . 1095025) ("DEPTH_TEST_FUNCTION" . 1096162) ("DEPTH_WRITE_DISABLE" . 1096201) ("ENABLE_FORMATTING" . 1058917) ("FILL_BACKGROUND" . 1058922) ("FILL_COLOR" . 1090549) ("FONT" . 1090557) ("HIDE" . 1058929) ("KERNING" . 1058933) ("LOCATIONS" . 1090561) ("ONGLASS" . 1058937) ("PALETTE" . 1058939) ("RECOMPUTE_DIMENSIONS " . 1058994) ("RENDER_METHOD" . 1096891) ("STRINGS " . 1096894) ("UPDIR " . 1058950) ("VERTICAL_ALIGNMENT" . 1058954) ("XCOORD_CONV" . 1058956) ("YCOORD_CONV" . 1059008) ("ZCOORD_CONV" . 1058968)))
+    ("GetCTM" fun "IDLgrText" (system) "Result = Obj->[%s::]%s()" ("objects_gr196.html" ("DESTINATION" . 1016508) ("PATH" . 1016510) ("TOP" . 1016516)))
+    ("Init" fun "IDLgrText" (system) "Result = Obj->[%s::]%s([, String or vector of strings])" ("objects_gr198.html" ) ("objects_gr194.html" ("ALIGNMENT" . 1058986) ("ALPHA_CHANNEL" . 1096721) ("BASELINE" . 1096723) ("CHAR_DIMENSIONS" . 1058905) ("CLIP_PLANES " . 1058910) ("COLOR " . 1058915) ("DEPTH_TEST_DISABLE" . 1095025) ("DEPTH_TEST_FUNCTION" . 1096162) ("DEPTH_WRITE_DISABLE" . 1096201) ("ENABLE_FORMATTING" . 1058917) ("FILL_BACKGROUND" . 1058922) ("FILL_COLOR" . 1090549) ("FONT" . 1090557) ("HIDE" . 1058929) ("KERNING" . 1058933) ("LOCATIONS" . 1090561) ("ONGLASS" . 1058937) ("PALETTE" . 1058939) ("RECOMPUTE_DIMENSIONS " . 1058994) ("REGISTER_PROPERTIES" . 1058946) ("RENDER_METHOD" . 1096891) ("STRINGS " . 1096894) ("UPDIR " . 1058950) ("VERTICAL_ALIGNMENT" . 1058954) ("XCOORD_CONV" . 1058956) ("YCOORD_CONV" . 1059008) ("ZCOORD_CONV" . 1058968)))
+    ("Add" pro "IDLgrView" (system) "Obj->[%s::]%s, Model" ("objects_gr202.html" ("POSITION" . 1016823)))
+    ("Cleanup" pro "IDLgrView" (system) "Obj->[%s::]%s" ("objects_gr203.html"))
+    ("GetProperty" pro "IDLgrView" (system) "Obj->[%s::]%s" ("objects_gr205.html" ) ("objects_gr201.html" ("ALL " . 1059162) ("COLOR" . 1059182) ("DEPTH_CUE" . 1059184) ("DIMENSIONS" . 1059192) ("DOUBLE" . 1059194) ("EYE" . 1059197) ("HIDE" . 1059199) ("LOCATION" . 1090641) ("PARENT " . 1092817) ("PROJECTION" . 1059231) ("TRANSPARENT" . 1094108) ("UNITS " . 1059207) ("VIEWPLANE_RECT " . 1059216) ("ZCLIP " . 1059219)))
+    ("SetProperty" pro "IDLgrView" (system) "Obj->[%s::]%s" ("objects_gr207.html" ) ("objects_gr201.html" ("COLOR" . 1059182) ("DEPTH_CUE" . 1059184) ("DIMENSIONS" . 1059192) ("DOUBLE" . 1059194) ("EYE" . 1059197) ("HIDE" . 1059199) ("LOCATION" . 1090641) ("PROJECTION" . 1059231) ("TRANSPARENT" . 1094108) ("UNITS " . 1059207) ("VIEWPLANE_RECT " . 1059216) ("ZCLIP " . 1059219)))
+    ("GetByName" fun "IDLgrView" (system) "Result = Obj->[%s::]%s(Name)" ("objects_gr204.html"))
+    ("Init" fun "IDLgrView" (system) "Result = Obj->[%s::]%s()" ("objects_gr206.html" ) ("objects_gr201.html" ("COLOR" . 1059182) ("DEPTH_CUE" . 1059184) ("DIMENSIONS" . 1059192) ("DOUBLE" . 1059194) ("EYE" . 1059197) ("HIDE" . 1059199) ("LOCATION" . 1090641) ("PROJECTION" . 1059231) ("REGISTER_PROPERTIES" . 1059205) ("TRANSPARENT" . 1094108) ("UNITS " . 1059207) ("VIEWPLANE_RECT " . 1059216) ("ZCLIP " . 1059219)))
+    ("Add" pro "IDLgrViewgroup" (system) "Obj->[%s::]%s, Object" ("objects_gr210.html" ("POSITION" . 1017170)))
+    ("Cleanup" pro "IDLgrViewgroup" (system) "Obj->[%s::]%s" ("objects_gr211.html"))
+    ("GetProperty" pro "IDLgrViewgroup" (system) "Obj->[%s::]%s" ("objects_gr213.html" ) ("objects_gr209.html" ("ALL" . 1077311) ("HIDE" . 1059327) ("PARENT" . 1084394)))
+    ("SetProperty" pro "IDLgrViewgroup" (system) "Obj->[%s::]%s" ("objects_gr215.html" ) ("objects_gr209.html" ("HIDE" . 1059327)))
+    ("GetByName" fun "IDLgrViewgroup" (system) "Result = Obj->[%s::]%s(Name)" ("objects_gr212.html"))
+    ("Init" fun "IDLgrViewgroup" (system) "Result = Obj->[%s::]%s()" ("objects_gr214.html" ) ("objects_gr209.html" ("HIDE" . 1059327) ("REGISTER_PROPERTIES" . 1059341)))
+    ("Cleanup" pro "IDLgrVolume" (system) "Obj->[%s::]%s" ("objects_gr218.html"))
+    ("ComputeBounds" pro "IDLgrVolume" (system) "Obj->[%s::]%s" ("objects_gr219.html" ("OPACITY" . 1017518) ("RESET" . 1017520) ("VOLUMES" . 1017522)))
+    ("GetProperty" pro "IDLgrVolume" (system) "Obj->[%s::]%s" ("objects_gr221.html" ) ("objects_gr217.html" ("ALL" . 1059382) ("ALPHA_CHANNEL" . 1315212) ("AMBIENT" . 1059403) ("BOUNDS" . 1059406) ("CLIP_PLANES" . 1059408) ("COMPOSITE_FUNCTION" . 1092822) ("DATA0" . 1059427) ("DATA1 " . 1059429) ("DATA2" . 1059431) ("DATA3" . 1059433) ("DEPTH_CUE" . 1059436) ("DEPTH_TEST_DISABLE" . 1095038) ("DEPTH_TEST_FUNCTION" . 1096277) ("DEPTH_WRITE_DISABLE" . 1096316) ("HIDE" . 1059445) ("HINTS" . 1059449) ("INTERPOLATE" . 1059455) ("LIGHTING_MODEL" . 1059457) ("NO_COPY" . 1059462) ("OPACITY_TABLE0" . 1086135) ("OPACITY_TABLE1" . 1059466) ("PARENT" . 1088485) ("RENDER_STEP" . 1096662) ("RGB_TABLE0" . 1088582) ("RGB_TABLE1" . 1059472) ("TWO_SIDED " . 1059474) ("VALID_DATA" . 1059634) ("VOLUME_SELECT " . 1059632) ("XCOORD_CONV" . 1059489) ("XRANGE" . 1059648) ("YCOORD_CONV" . 1059495) ("YRANGE" . 1059660) ("ZBUFFER" . 1059501) ("ZCOORD_CONV" . 1059503) ("ZERO_OPACITY_SKIP" . 1059509) ("ZRANGE" . 1059393)))
+    ("SetProperty" pro "IDLgrVolume" (system) "Obj->[%s::]%s" ("objects_gr224.html" ) ("objects_gr217.html" ("ALPHA_CHANNEL" . 1315212) ("AMBIENT" . 1059403) ("BOUNDS" . 1059406) ("CLIP_PLANES" . 1059408) ("COMPOSITE_FUNCTION" . 1092822) ("DATA0" . 1059427) ("DATA1 " . 1059429) ("DATA2" . 1059431) ("DATA3" . 1059433) ("DEPTH_CUE" . 1059436) ("DEPTH_TEST_DISABLE" . 1095038) ("DEPTH_TEST_FUNCTION" . 1096277) ("DEPTH_WRITE_DISABLE" . 1096316) ("HIDE" . 1059445) ("HINTS" . 1059449) ("INTERPOLATE" . 1059455) ("LIGHTING_MODEL" . 1059457) ("NO_COPY" . 1059462) ("OPACITY_TABLE0" . 1086135) ("OPACITY_TABLE1" . 1059466) ("RENDER_STEP" . 1096662) ("RGB_TABLE0" . 1088582) ("RGB_TABLE1" . 1059472) ("TWO_SIDED " . 1059474) ("VOLUME_SELECT " . 1059632) ("XCOORD_CONV" . 1059489) ("YCOORD_CONV" . 1059495) ("ZBUFFER" . 1059501) ("ZCOORD_CONV" . 1059503) ("ZERO_OPACITY_SKIP" . 1059509)))
+    ("GetCTM" fun "IDLgrVolume" (system) "Result = Obj->[%s::]%s()" ("objects_gr220.html" ("DESTINATION" . 1017555) ("PATH" . 1017557) ("TOP" . 1017563)))
+    ("Init" fun "IDLgrVolume" (system) "Result = Obj->[%s::]%s([, vol0 [, vol1 [, vol2 [, vol3]]]])" ("objects_gr222.html" ) ("objects_gr217.html" ("ALPHA_CHANNEL" . 1315212) ("AMBIENT" . 1059403) ("BOUNDS" . 1059406) ("CLIP_PLANES" . 1059408) ("COMPOSITE_FUNCTION" . 1092822) ("DATA0" . 1059427) ("DATA1 " . 1059429) ("DATA2" . 1059431) ("DATA3" . 1059433) ("DEPTH_CUE" . 1059436) ("DEPTH_TEST_DISABLE" . 1095038) ("DEPTH_TEST_FUNCTION" . 1096277) ("DEPTH_WRITE_DISABLE" . 1096316) ("HIDE" . 1059445) ("HINTS" . 1059449) ("INTERPOLATE" . 1059455) ("LIGHTING_MODEL" . 1059457) ("NO_COPY" . 1059462) ("OPACITY_TABLE0" . 1086135) ("OPACITY_TABLE1" . 1059466) ("REGISTER_PROPERTIES" . 1059616) ("RENDER_STEP" . 1096662) ("RGB_TABLE0" . 1088582) ("RGB_TABLE1" . 1059472) ("TWO_SIDED " . 1059474) ("VOLUME_SELECT " . 1059632) ("XCOORD_CONV" . 1059489) ("YCOORD_CONV" . 1059495) ("ZBUFFER" . 1059501) ("ZCOORD_CONV" . 1059503) ("ZERO_OPACITY_SKIP" . 1059509)))
+    ("PickVoxel" fun "IDLgrVolume" (system) "Result = Obj->[%s::]%s ( Win, View, Point)" ("objects_gr223.html" ("PATH" . 1017818)))
+    ("Cleanup" pro "IDLgrVRML" (system) "Obj->[%s::]%s" ("objects_gr227.html"))
+    ("Draw" pro "IDLgrVRML" (system) "Obj->[%s::]%s [, Picture]" ("objects_gr228.html"))
+    ("GetDeviceInfo" pro "IDLgrVRML" (system) "Obj->[%s::]%s" ("objects_gr229.html" ("ALL" . 1018053) ("MAX_NUM_CLIP_PLANES" . 1018055) ("MAX_TEXTURE_DIMENSIONS" . 1018057) ("MAX_VIEWPORT_DIMENSIONS" . 1018059) ("NAME" . 1018061) ("NUM_CPUS" . 1018063) ("VENDOR" . 1018066) ("VERSION" . 1018068)))
+    ("GetProperty" pro "IDLgrVRML" (system) "Obj->[%s::]%s" ("objects_gr231.html" ) ("objects_gr226.html" ("ALL" . 1059804) ("COLOR_MODEL" . 1059817) ("DIMENSIONS" . 1059821) ("FILENAME" . 1059824) ("GRAPHICS_TREE " . 1059826) ("N_COLORS" . 1059828) ("PALETTE" . 1059830) ("QUALITY " . 1059832) ("RESOLUTION" . 1094159) ("SCREEN_DIMENSIONS" . 1059862) ("UNITS" . 1059860)))
+    ("SetProperty" pro "IDLgrVRML" (system) "Obj->[%s::]%s" ("objects_gr234.html" ) ("objects_gr226.html" ("DIMENSIONS" . 1059821) ("FILENAME" . 1059824) ("GRAPHICS_TREE " . 1059826) ("PALETTE" . 1059830) ("QUALITY " . 1059832) ("RESOLUTION" . 1094159) ("UNITS" . 1059860)))
+    ("GetFontnames" fun "IDLgrVRML" (system) "Result = Obj->[%s::]%s( FamilyName)" ("objects_gr230.html" ("IDL_FONTS" . 1018109) ("STYLES" . 1018111)))
+    ("GetTextDimensions" fun "IDLgrVRML" (system) "Result = Obj->[%s::]%s( TextObj)" ("objects_gr232.html" ("DESCENT" . 1018185) ("PATH" . 1018187)))
+    ("Init" fun "IDLgrVRML" (system) "Result = Obj->[%s::]%s()" ("objects_gr233.html" ) ("objects_gr226.html" ("COLOR_MODEL" . 1059817) ("DIMENSIONS" . 1059821) ("FILENAME" . 1059824) ("GRAPHICS_TREE " . 1059826) ("N_COLORS" . 1059828) ("PALETTE" . 1059830) ("QUALITY " . 1059832) ("REGISTER_PROPERTIES" . 1059837) ("RESOLUTION" . 1094159) ("UNITS" . 1059860) ("WORLDINFO " . 1059848) ("WORLDTITLE" . 1059850)))
+    ("Cleanup" pro "IDLgrWindow" (system) "Obj->[%s::]%s" ("objects_gr237.html"))
+    ("Draw" pro "IDLgrWindow" (system) "Obj->[%s::]%s [, Picture]" ("objects_gr238.html" ("CREATE_INSTANCE" . 1018509) ("DRAW_INSTANCE" . 1018511)))
+    ("Erase" pro "IDLgrWindow" (system) "Obj->[%s::]%s" ("objects_gr239.html" ("COLOR" . 1018544)))
+    ("GetDeviceInfo" pro "IDLgrWindow" (system) "Obj->[%s::]%s" ("objects_gr241.html" ("ALL" . 1018622) ("MAX_NUM_CLIP_PLANES" . 1018624) ("MAX_TEXTURE_DIMENSIONS" . 1018626) ("MAX_VIEWPORT_DIMENSIONS" . 1018628) ("NAME" . 1018630) ("NUM_CPUS" . 1018632) ("VENDOR" . 1018635) ("VERSION" . 1018637)))
+    ("GetProperty" pro "IDLgrWindow" (system) "Obj->[%s::]%s" ("objects_gr244.html" ) ("objects_gr236.html" ("ALL" . 1059951) ("COLOR_MODEL" . 1059974) ("CURRENT_ZOOM" . 1249228) ("DIMENSIONS " . 1249231) ("DISPLAY_NAME (X Only)" . 1059985) ("GRAPHICS_TREE" . 1059987) ("IMAGE_DATA " . 1060084) ("LOCATION " . 1060082) ("MINIMUM_VIRTUAL_DIMENSIONS" . 1343479) ("N_COLORS" . 1059992) ("PALETTE" . 1059998) ("QUALITY" . 1060003) ("RENDERER" . 1094184) ("RESOLUTION" . 1060060) ("RETAIN" . 1060058) ("SCREEN_DIMENSIONS " . 1060073) ("TITLE" . 1060071) ("UNITS" . 1060033) ("VIRTUAL_DIMENSIONS" . 1060050) ("VISIBLE_LOCATION" . 1097046) ("ZBUFFER_DATA" . 1091007) ("ZOOM_BASE" . 1342797) ("ZOOM_NSTEP" . 1342953)))
+    ("Iconify" pro "IDLgrWindow" (system) "Obj->[%s::]%s, IconFlag" ("objects_gr246.html"))
+    ("SetCurrentCursor" pro "IDLgrWindow" (system) "Obj->[%s::]%s [, CursorName]" ("objects_gr251.html" ("HOTSPOT" . 1019148) ("IMAGE" . 1019144) ("MASK" . 1019146) ("STANDARD" . 1019150)))
+    ("SetCurrentZoom" pro "IDLgrWindow" (system) "Obj-> [%s::]%s, ZoomFactor" ("objects_gr252.html" ("RESET" . 1360383)))
+    ("SetProperty" pro "IDLgrWindow" (system) "Obj->[%s::]%s" ("objects_gr253.html" ) ("objects_gr236.html" ("DIMENSIONS " . 1249231) ("DISPLAY_NAME (X Only)" . 1059985) ("GRAPHICS_TREE" . 1059987) ("LOCATION " . 1060082) ("MINIMUM_VIRTUAL_DIMENSIONS" . 1343479) ("PALETTE" . 1059998) ("QUALITY" . 1060003) ("TITLE" . 1060071) ("UNITS" . 1060033) ("VIRTUAL_DIMENSIONS" . 1060050) ("VISIBLE_LOCATION" . 1097046) ("ZOOM_BASE" . 1342797)))
+    ("Show" pro "IDLgrWindow" (system) "Obj->[%s::]%s, Position" ("objects_gr254.html"))
+    ("ZoomIn" pro "IDLgrWindow" (system) "Obj->[%s::]%s" ("objects_gr255.html"))
+    ("ZoomOut" pro "IDLgrWindow" (system) "Obj->[%s::]%s" ("objects_gr256.html"))
+    ("GetContiguousPixels" fun "IDLgrWindow" (system) "Result = Obj->[%s::]%s()" ("objects_gr240.html"))
+    ("GetDimensions" fun "IDLgrWindow" (system) "Result = Obj -> [%s::]%s ()" ("objects_gr242.html" ("MINIMUM_VIRTUAL_DIMENSIONS" . 1360348) ("ORIGINAL_VIRTUAL_DIMENSIONS" . 1360355) ("VIRTUAL_DIMENSIONS" . 1360358) ("VISIBLE_LOCATION" . 1360361)))
+    ("GetFontnames" fun "IDLgrWindow" (system) "Result = Obj->[%s::]%s(FamilyName)" ("objects_gr243.html" ("IDL_FONTS" . 1018678) ("STYLES" . 1018680)))
+    ("GetTextDimensions" fun "IDLgrWindow" (system) "Result = Obj->[%s::]%s( TextObj)" ("objects_gr245.html" ("DESCENT" . 1018765) ("PATH" . 1018767)))
+    ("Init" fun "IDLgrWindow" (system) "Result = Obj->[%s::]%s()" ("objects_gr247.html" ) ("objects_gr236.html" ("COLOR_MODEL" . 1059974) ("DIMENSIONS " . 1249231) ("GRAPHICS_TREE" . 1059987) ("LOCATION " . 1060082) ("MINIMUM_VIRTUAL_DIMENSIONS" . 1343479) ("N_COLORS" . 1059992) ("PALETTE" . 1059998) ("QUALITY" . 1060003) ("REGISTER_PROPERTIES" . 1060008) ("RENDERER" . 1094184) ("RETAIN" . 1060058) ("TITLE" . 1060071) ("UNITS" . 1060033) ("VIRTUAL_DIMENSIONS" . 1060050) ("VISIBLE_LOCATION" . 1097046) ("ZOOM_BASE" . 1342797)))
+    ("PickData" fun "IDLgrWindow" (system) "Result = Obj->[%s::]%s( View, Object, Location, XYZLocation)" ("objects_gr248.html" ("DIMENSIONS" . 1018957) ("PATH" . 1018961) ("PICK_STATUS" . 1018967)))
+    ("Read" fun "IDLgrWindow" (system) "Result = Obj->[%s::]%s()" ("objects_gr249.html"))
+    ("Select" fun "IDLgrWindow" (system) "Result = Obj->[%s::]%s( Picture, XY)" ("objects_gr250.html" ("DIMENSIONS" . 1019069) ("ORDER" . 1019073) ("SUB_SELECTION" . 1343670) ("UNITS" . 1019076)))
+    ("Cleanup" pro "IDLitCommand" (system) "Obj->[%s::]%s" ("objects_it6.html"))
+    ("GetProperty" pro "IDLitCommand" (system) "Obj->[%s::]%s" ("objects_it8.html" ) ("objects_it4.html" ("OPERATION_IDENTIFIER" . 1042072) ("TARGET_IDENTIFIER" . 1042044)))
+    ("SetProperty" pro "IDLitCommand" (system) "Obj->[%s::]%s" ("objects_it11.html" ) ("objects_it4.html" ("OPERATION_IDENTIFIER" . 1042072) ("TARGET_IDENTIFIER" . 1042044)))
+    ("AddItem" fun "IDLitCommand" (system) "Result = Obj->[%s::]%s(StrItem, Item)" ("objects_it5.html" ("OVERWRITE" . 1042134)))
+    ("GetItem" fun "IDLitCommand" (system) "Result = Obj->[%s::]%s(StrItem, Item)" ("objects_it7.html"))
+    ("GetSize" fun "IDLitCommand" (system) "Result = Obj->[%s::]%s()" ("objects_it9.html" ("KILOBYTES" . 1042275)))
+    ("Init" fun "IDLitCommand" (system) "Result = Obj->[%s::]%s()" ("objects_it10.html" ) ("objects_it4.html" ("OPERATION_IDENTIFIER" . 1042072) ("TARGET_IDENTIFIER" . 1042044)))
+    ("Cleanup" pro "IDLitCommandSet" (system) "Obj->[%s::]%s" ("objects_it14.html"))
+    ("Init" fun "IDLitCommandSet" (system) "Result = Obj->[%s::]%s()" ("objects_it16.html" ))
+    ("Cleanup" pro "IDLitComponent" (system) "Obj->[%s::]%s" ("objects_it19.html"))
+    ("GetProperty" pro "IDLitComponent" (system) "Obj->[%s::]%s" ("objects_it22.html" ) ("objects_it18.html" ("COMPONENT_VERSION" . 1068963) ("DESCRIPTION" . 1286379) ("HELP" . 1069022) ("ICON" . 1281308) ("IDENTIFIER" . 1069050) ("NAME" . 1069084) ("PRIVATE" . 1069111) ("UVALUE" . 1069139)))
+    ("GetPropertyAttribute" pro "IDLitComponent" (system) "Obj->[%s::]%s, PropertyIdentifier" ("objects_it23.html" ("TYPE" . 1069368)))
+    ("RegisterProperty" pro "IDLitComponent" (system) "Obj->[%s::]%s, PropertyIdentifier[, Type]" ("objects_it27.html" ("BOOLEAN" . 1069541) ("COLOR" . 1069543) ("DESCRIPTION" . 1069545) ("ENUMLIST" . 1069547) ("FLOAT" . 1069549) ("HIDE" . 1069551) ("INTEGER" . 1069553) ("LINESTYLE" . 1069555) ("NAME" . 1069563) ("SENSITIVE" . 1069565) ("STRING" . 1069567) ("SYMBOL" . 1069569) ("THICKNESS" . 1069574) ("UNDEFINED" . 1069576) ("USERDEF" . 1069579) ("VALID_RANGE" . 1069581)))
+    ("Restore" pro "IDLitComponent" (system) "Obj->[%s::]%s" ("objects_it28.html"))
+    ("SetProperty" pro "IDLitComponent" (system) "Obj->[%s::]%s" ("objects_it29.html" ) ("objects_it18.html" ("DESCRIPTION" . 1286379) ("HELP" . 1069022) ("ICON" . 1281308) ("IDENTIFIER" . 1069050) ("NAME" . 1069084) ("PRIVATE" . 1069111) ("UVALUE" . 1069139)))
+    ("SetPropertyAttribute" pro "IDLitComponent" (system) "Obj->[%s::]%s , PropertyIdentifier" ("objects_it30.html"))
+    ("SetPropertyByIdentifier" pro "IDLitComponent" (system) "Obj->[%s::]%s, PropertyIdentifier, Value" ("objects_it31.html"))
+    ("UpdateComponentVersion" pro "IDLitComponent" (system) "Obj->[%s::]%s" ("objects_it32.html"))
+    ("EditUserDefProperty" fun "IDLitComponent" (system) "Result = Obj->[%s::]%s(iTool, PropertyIdentifier)" ("objects_it20.html"))
+    ("GetFullIdentifier" fun "IDLitComponent" (system) "Result = Obj->[%s::]%s([Objref])" ("objects_it21.html"))
+    ("GetPropertyByIdentifier" fun "IDLitComponent" (system) "Result = Obj->[%s::]%s(PropertyIdentifier, Value)" ("objects_it24.html"))
+    ("Init" fun "IDLitComponent" (system) "Result = Obj->[%s::]%s()" ("objects_it25.html" ) ("objects_it18.html" ("DESCRIPTION" . 1286379) ("HELP" . 1069022) ("ICON" . 1281308) ("IDENTIFIER" . 1069050) ("NAME" . 1069084) ("PRIVATE" . 1069111) ("UVALUE" . 1069139)))
+    ("QueryProperty" fun "IDLitComponent" (system) "Result = Obj->[%s::]%s([PropertyIdentifier])" ("objects_it26.html"))
+    ("Add" pro "IDLitContainer" (system) "Obj->[%s::]%s, Components" ("objects_it35.html" ("NO_NOTIFY" . 1070004)))
+    ("AddByIdentifier" pro "IDLitContainer" (system) "Obj->[%s::]%s, Identifier, Item" ("objects_it36.html"))
+    ("Cleanup" pro "IDLitContainer" (system) "Obj->[%s::]%s" ("objects_it37.html"))
+    ("Remove" pro "IDLitContainer" (system) "Obj->[%s::]%s, Components" ("objects_it42.html" ("NO_NOTIFY" . 1070225)))
+    ("Get" fun "IDLitContainer" (system) "Result = Obj->[%s::]%s()" ("objects_it39.html" ("ALL" . 1070110) ("COUNT" . 1070112) ("ISA" . 1070114) ("POSITION" . 1070117) ("SKIP_PRIVATE" . 1070119)))
+    ("GetByIdentifier" fun "IDLitContainer" (system) "Result = Obj->[%s::]%s(Identifier)" ("objects_it40.html"))
+    ("IDLitContainer" fun "IDLitContainer" (system) "Result = Obj->[%s::]%s::FindIdentifiers([Pattern])" ("objects_it38.html" ("COUNT" . 1297331) ("LEAF_NODES" . 1297334)))
+    ("Init" fun "IDLitContainer" (system) "Result = Obj->[%s::]%s()" ("objects_it41.html" ))
+    ("RemoveByIdentifier" fun "IDLitContainer" (system) "Result = Obj->[%s::]%s(Identifier)" ("objects_it43.html"))
+    ("AddDataObserver" pro "IDLitData" (system) "Obj->[%s::]%s, Observer" ("objects_it46.html"))
+    ("Cleanup" pro "IDLitData" (system) "Obj->[%s::]%s" ("objects_it47.html"))
+    ("GetProperty" pro "IDLitData" (system) "Obj->[%s::]%s" ("objects_it51.html" ) ("objects_it45.html" ("HIDE" . 1070552) ("READ_ONLY" . 1070608) ("TYPE" . 1070636)))
+    ("NotifyDataChange" pro "IDLitData" (system) "Obj->[%s::]%s" ("objects_it54.html"))
+    ("NotifyDataComplete" pro "IDLitData" (system) "Obj->[%s::]%s" ("objects_it55.html"))
+    ("RemoveDataObserver" pro "IDLitData" (system) "Obj->[%s::]%s, Observer" ("objects_it56.html"))
+    ("SetProperty" pro "IDLitData" (system) "Obj->[%s::]%s" ("objects_it58.html" ) ("objects_it45.html" ("HIDE" . 1070552) ("READ_ONLY" . 1070608)))
+    ("Copy" fun "IDLitData" (system) "Result = Obj->[%s::]%s()" ("objects_it48.html"))
+    ("GetByType" fun "IDLitData" (system) "Result = Obj->[%s::]%s(Type)" ("objects_it49.html" ("COUNT" . 1070828)))
+    ("GetData" fun "IDLitData" (system) "Result = Obj->[%s::]%s(Data[, Identifier])" ("objects_it50.html" ("NAN" . 1070867) ("NO_COPY" . 1154511)))
+    ("GetSize" fun "IDLitData" (system) "Result = Obj->[%s::]%s()" ("objects_it52.html"))
+    ("Init" fun "IDLitData" (system) "Result = Obj->[%s::]%s([, Data])" ("objects_it53.html" ) ("objects_it45.html" ("HIDE" . 1070552) ("NO_COPY" . 1070580) ("READ_ONLY" . 1070608) ("TYPE" . 1070636)))
+    ("SetData" fun "IDLitData" (system) "Result = Obj->[%s::]%s(Data[, Identifier])" ("objects_it57.html" ("NO_COPY" . 1071158) ("NULL" . 1071160)))
+    ("Add" pro "IDLitDataContainer" (system) "Obj->[%s::]%s, Data" ("objects_it61.html" ("NO_NOTIFY" . 1275026)))
+    ("Cleanup" pro "IDLitDataContainer" (system) "Obj->[%s::]%s" ("objects_it62.html"))
+    ("GetProperty" pro "IDLitDataContainer" (system) "Obj->[%s::]%s" ("objects_it65.html" ))
+    ("SetProperty" pro "IDLitDataContainer" (system) "Obj->[%s::]%s" ("objects_it68.html" ))
+    ("GetData" fun "IDLitDataContainer" (system) "Result = Obj->[%s::]%s(Data [, Identifier])" ("objects_it63.html" ("NO_COPY" . 1071642)))
+    ("GetIdentifiers" fun "IDLitDataContainer" (system) "Result = Obj->[%s::]%s([Pattern])" ("objects_it64.html" ("LEAF" . 1071682)))
+    ("Init" fun "IDLitDataContainer" (system) "Result = Obj->[%s::]%s([, Data])" ("objects_it66.html" ))
+    ("SetData" fun "IDLitDataContainer" (system) "Result = Obj->[%s::]%s(Data, Identifier)" ("objects_it67.html" ("NO_COPY" . 1071799) ("NULL" . 1071801)))
+    ("GetProperty" pro "IDLitDataOperation" (system) "Obj->[%s::]%s" ("objects_it74.html" ))
+    ("SetProperty" pro "IDLitDataOperation" (system) "Obj->[%s::]%s" ("objects_it76.html" ))
+    ("DoExecuteUI" fun "IDLitDataOperation" (system) "Result = Obj->[%s::]%s()" ("objects_it72.html"))
+    ("Execute" fun "IDLitDataOperation" (system) "Result = Obj->[%s::]%s(Data)" ("objects_it73.html"))
+    ("Init" fun "IDLitDataOperation" (system) "Result = Obj->[%s::]%s()" ("objects_it75.html" ))
+    ("UndoExecute" fun "IDLitDataOperation" (system) "Result = Obj->[%s::]%s(Data)" ("objects_it77.html"))
+    ("AddOnNotifyObserver" pro "IDLitIMessaging" (system) "Obj->[%s::]%s, IdObserver, IdSubject" ("objects_it80.html"))
+    ("DoOnNotify" pro "IDLitIMessaging" (system) "Obj->[%s::]%s, IdOriginator, IdMessage, Value" ("objects_it81.html"))
+    ("ErrorMessage" pro "IDLitIMessaging" (system) "Obj->[%s::]%s, StrMessage" ("objects_it82.html" ("SEVERITY" . 1079859) ("TITLE" . 1079864) ("USE_LAST_ERROR" . 1079866)))
+    ("ProbeStatusMessage" pro "IDLitIMessaging" (system) "Obj->[%s::]%s, StrMessage" ("objects_it84.html"))
+    ("RemoveOnNotifyObserver" pro "IDLitIMessaging" (system) "Obj->[%s::]%s, IdObserver, IdSubject" ("objects_it88.html"))
+    ("SignalError" pro "IDLitIMessaging" (system) "Obj->[%s::]%s, StrMessage" ("objects_it89.html" ("CODE" . 1080072) ("SEVERITY" . 1080074)))
+    ("StatusMessage" pro "IDLitIMessaging" (system) "Obj->[%s::]%s, StrMessage" ("objects_it90.html" ("SEGMENT_IDENTIFIER" . 1287131)))
+    ("GetTool" fun "IDLitIMessaging" (system) "Result = Obj->[%s::]%s()" ("objects_it83.html"))
+    ("ProgressBar" fun "IDLitIMessaging" (system) "Result = Obj->[%s::]%s(StrMessage)" ("objects_it85.html" ("CANCEL" . 1270494) ("PERCENT" . 1079974) ("SHUTDOWN" . 1079976)))
+    ("PromptUserText" fun "IDLitIMessaging" (system) "Result = Obj->[%s::]%s(StrPrompt, Answer)" ("objects_it86.html" ("TITLE" . 1080016)))
+    ("PromptUserYesNo" fun "IDLitIMessaging" (system) "Result = Obj->[%s::]%s(StrPrompt, Answer)" ("objects_it87.html" ("TITLE" . 1080036)))
+    ("Cleanup" pro "IDLitManipulator" (system) "Obj->[%s::]%s" ("objects_it93.html"))
+    ("GetProperty" pro "IDLitManipulator" (system) "Obj->[%s::]%s" ("objects_it96.html" ) ("objects_it92.html" ("BUTTON_EVENTS" . 1080361) ("DESCRIPTION" . 1080417) ("KEYBOARD_EVENTS" . 1080504) ("MOTION_EVENTS" . 1080532) ("OPERATION_IDENTIFIER" . 1080560) ("PARAMETER_IDENTIFIER" . 1080588) ("TRANSIENT_DEFAULT " . 1080617) ("TRANSIENT_MOTION" . 1080650) ("TYPES" . 1080678) ("VISUAL_TYPE" . 1080735)))
+    ("OnKeyboard" pro "IDLitManipulator" (system) "Obj->[%s::]%s, Win, IsASCII, Character, KeyValue, X, Y, Press, Release, KeyMods" ("objects_it98.html"))
+    ("OnLoseCurrentManipulator" pro "IDLitManipulator" (system) "Obj->[%s::]%s" ("objects_it99.html"))
+    ("OnMouseDown" pro "IDLitManipulator" (system) "Obj->[%s::]%s, Win, X, Y, IButton, KeyMods, NClicks" ("objects_it100.html"))
+    ("OnMouseMotion" pro "IDLitManipulator" (system) "Obj->[%s::]%s, Win, X, Y, KeyMods" ("objects_it101.html"))
+    ("OnMouseUp" pro "IDLitManipulator" (system) "Obj->[%s::]%s, Win, X, Y, IButton" ("objects_it102.html"))
+    ("RegisterCursor" pro "IDLitManipulator" (system) "Obj->[%s::]%s, ArrCursor, Name" ("objects_it104.html" ("DEFAULT" . 1281810)))
+    ("SetCurrentManipulator" pro "IDLitManipulator" (system) "Obj->[%s::]%s [, Item]" ("objects_it105.html"))
+    ("SetProperty" pro "IDLitManipulator" (system) "Obj->[%s::]%s" ("objects_it120.html" ) ("objects_it92.html" ("BUTTON_EVENTS" . 1080361) ("DESCRIPTION" . 1080417) ("DISABLE" . 1080445) ("KEYBOARD_EVENTS" . 1080504) ("MOTION_EVENTS" . 1080532) ("OPERATION_IDENTIFIER" . 1080560) ("PARAMETER_IDENTIFIER" . 1080588) ("TRANSIENT_DEFAULT " . 1080617) ("TRANSIENT_MOTION" . 1080650) ("VISUAL_TYPE" . 1080735)))
+    ("CommitUndoValues" fun "IDLitManipulator" (system) "Result = Obj->[%s::]%s()" ("objects_it94.html" ("UNCOMMIT" . 1080828)))
+    ("GetCursorType" fun "IDLitManipulator" (system) "Result = Obj->[%s::]%s(TypeIn, KeyMods)" ("objects_it95.html"))
+    ("Init" fun "IDLitManipulator" (system) "Result = Obj->[%s::]%s()" ("objects_it97.html" ) ("objects_it92.html" ("BUTTON_EVENTS" . 1080361) ("DEFAULT_CURSOR" . 1080389) ("DESCRIPTION" . 1080417) ("DISABLE" . 1080445) ("KEYBOARD_EVENTS" . 1080504) ("MOTION_EVENTS" . 1080532) ("OPERATION_IDENTIFIER" . 1080560) ("PARAMETER_IDENTIFIER" . 1080588) ("TRANSIENT_DEFAULT " . 1080617) ("TRANSIENT_MOTION" . 1080650) ("TYPES" . 1080678) ("VIEWS_ONLY" . 1080706) ("VISUAL_TYPE" . 1080735)))
+    ("RecordUndoValues" fun "IDLitManipulator" (system) "Result = Obj->[%s::]%s()" ("objects_it103.html"))
+    ("Add" pro "IDLitManipulatorContainer" (system) "Obj->[%s::]%s, Manipulator" ("objects_it109.html"))
+    ("GetProperty" pro "IDLitManipulatorContainer" (system) "Obj->[%s::]%s" ("objects_it112.html" ))
+    ("OnMouseDown" pro "IDLitManipulatorContainer" (system) "Obj->[%s::]%s, Win, X, Y, IButton, KeyMods, NClicks" ("objects_it115.html"))
+    ("OnMouseMotion" pro "IDLitManipulatorContainer" (system) "Obj->[%s::]%s, Win, X, Y, KeyMods" ("objects_it116.html"))
+    ("OnMouseUp" pro "IDLitManipulatorContainer" (system) "Obj->[%s::]%s, Win, X, Y, IButton" ("objects_it117.html"))
+    ("SetCurrent" pro "IDLitManipulatorContainer" (system) "Obj->[%s::]%s, Manipulator" ("objects_it118.html"))
+    ("SetCurrentManipulator" pro "IDLitManipulatorContainer" (system) "Obj->[%s::]%s, Identifier" ("objects_it119.html"))
+    ("GetCurrent" fun "IDLitManipulatorContainer" (system) "Result = Obj->[%s::]%s()" ("objects_it110.html"))
+    ("GetCurrentManipulator" fun "IDLitManipulatorContainer" (system) "Result = Obj->[%s::]%s()" ("objects_it111.html" ("IDENTIFIER" . 1081635)))
+    ("Init" fun "IDLitManipulatorContainer" (system) "Result = Obj->[%s::]%s()" ("objects_it113.html" ) ("objects_it108.html" ("AUTO_SWITCH" . 1081512)))
+    ("Add" pro "IDLitManipulatorManager" (system) "Obj->[%s::]%s, Manipulator" ("objects_it123.html" ("DEFAULT" . 1082187)))
+    ("AddManipulatorObserver" pro "IDLitManipulatorManager" (system) "Obj->[%s::]%s, Observer" ("objects_it124.html"))
+    ("RemoveManipulatorObserver" pro "IDLitManipulatorManager" (system) "Obj->[%s::]%s, Observer" ("objects_it127.html"))
+    ("Init" fun "IDLitManipulatorManager" (system) "Result = Obj->[%s::]%s()" ("objects_it126.html" ))
+    ("Cleanup" pro "IDLitManipulatorVisual" (system) "Obj->[%s::]%s" ("objects_it130.html"))
+    ("GetProperty" pro "IDLitManipulatorVisual" (system) "Obj->[%s::]%s" ("objects_it131.html" ) ("objects_it129.html" ("UNIFORM_SCALE" . 1082429) ("VISUAL_TYPE" . 1082457)))
+    ("SetProperty" pro "IDLitManipulatorVisual" (system) "Obj->[%s::]%s" ("objects_it133.html" ) ("objects_it129.html" ("UNIFORM_SCALE" . 1082429) ("VISUAL_TYPE" . 1082457)))
+    ("Init" fun "IDLitManipulatorVisual" (system) "Result = Obj->[%s::]%s()" ("objects_it132.html" ) ("objects_it129.html" ("UNIFORM_SCALE" . 1082429) ("VISUAL_TYPE" . 1082457)))
+    ("Cleanup" pro "IDLitOperation" (system) "Obj->[%s::]%s" ("objects_it71.html"))
+    ("GetProperty" pro "IDLitOperation" (system) "Obj->[%s::]%s" ("objects_it138.html" ) ("objects_it135.html" ("EXPENSIVE_COMPUTATION" . 1072559) ("REVERSIBLE_OPERATION" . 1072587) ("SHOW_EXECUTION_UI" . 1072615) ("TYPES" . 1072643)))
+    ("SetProperty" pro "IDLitOperation" (system) "Obj->[%s::]%s" ("objects_it143.html" ))
+    ("DoAction" fun "IDLitOperation" (system) "Result = Obj->[%s::]%s(Tool)" ("objects_it137.html"))
+    ("Init" fun "IDLitOperation" (system) "Result = Obj->[%s::]%s()" ("objects_it139.html" ) ("objects_it135.html" ("EXPENSIVE_COMPUTATION" . 1072559) ("REVERSIBLE_OPERATION" . 1072587) ("SHOW_EXECUTION_UI" . 1072615) ("TYPES" . 1072643)))
+    ("RecordFinalValues" fun "IDLitOperation" (system) "Result = Obj->[%s::]%s(CommandSet, Targets [, IdProperty] )" ("objects_it140.html"))
+    ("RecordInitialValues" fun "IDLitOperation" (system) "Result = Obj->[%s::]%s(CommandSet, Targets [, IdProperty])" ("objects_it141.html"))
+    ("RedoOperation" fun "IDLitOperation" (system) "Result = Obj->[%s::]%s(CommandSet)" ("objects_it142.html"))
+    ("UndoOperation" fun "IDLitOperation" (system) "Result = Obj->[%s::]%s(CommandSet)" ("objects_it144.html"))
+    ("Cleanup" pro "IDLitParameter" (system) "Obj->[%s::]%s" ("objects_it147.html"))
+    ("IDLitParameter" pro "IDLitParameter" (system) "Obj->[%s::]%s::SetParameterAttribute(ParamName)" ("objects_it157.html" ("KEYWORD")))
+    ("OnDataChangeUpdate" pro "IDLitParameter" (system) "Obj->[%s::]%s, Data, ParameterName" ("objects_it152.html"))
+    ("OnDataDisconnect" pro "IDLitParameter" (system) "Obj->[%s::]%s, ParameterName" ("objects_it153.html"))
+    ("RegisterParameter" pro "IDLitParameter" (system) "Obj->[%s::]%s, Name" ("objects_it155.html" ("BY_VALUE" . 1083371) ("DESCRIPTION" . 1083373) ("INPUT" . 1083375) ("OPTARGET" . 1083377) ("OPTIONAL" . 1083379) ("OUTPUT" . 1083381) ("TYPES" . 1083383)))
+    ("GetParameter" fun "IDLitParameter" (system) "Result = Obj->[%s::]%s(Name)" ("objects_it148.html" ("ALL" . 1083021) ("COUNT" . 1083023)))
+    ("GetParameterSet" fun "IDLitParameter" (system) "Result = Obj->[%s::]%s()" ("objects_it150.html" ("DEEP_COPY" . 1083153)))
+    ("IDLitParameter" fun "IDLitParameter" (system) "Result = Obj->[%s::]%s::QueryParameter([ParamName])" ("objects_it154.html" ("COUNT" . 1297407)))
+    ("Init" fun "IDLitParameter" (system) "Result = Obj->[%s::]%s()" ("objects_it151.html" ))
+    ("SetData" fun "IDLitParameter" (system) "Result = Obj->[%s::]%s(Data)" ("objects_it156.html" ("BY_VALUE" . 1083428) ("NO_UPDATE" . 1083430) ("PARAMETER_NAME" . 1083433)))
+    ("SetParameterSet" fun "IDLitParameter" (system) "Result = Obj->[%s::]%s(ParamSet)" ("objects_it158.html"))
+    ("Add" pro "IDLitParameterSet" (system) "Obj->[%s::]%s, Data" ("objects_it161.html" ("PARAMETER_NAME" . 1083838) ("PRESERVE_LOCATION" . 1083840)))
+    ("Cleanup" pro "IDLitParameterSet" (system) "Obj->[%s::]%s" ("objects_it162.html"))
+    ("Remove" pro "IDLitParameterSet" (system) "Obj->[%s::]%s [, Items]" ("objects_it168.html" ("ALL" . 1084212) ("POSITION" . 1084214)))
+    ("Copy" fun "IDLitParameterSet" (system) "Result = Obj->[%s::]%s()" ("objects_it163.html"))
+    ("Get" fun "IDLitParameterSet" (system) "Result = Obj->[%s::]%s()" ("objects_it164.html" ("ALL" . 1083998) ("COUNT" . 1084000) ("NAME" . 1084002) ("POSITION" . 1084004)))
+    ("GetByName" fun "IDLitParameterSet" (system) "Result = Obj->[%s::]%s( Names)" ("objects_it165.html" ("COUNT" . 1228440) ("NAME" . 1084087)))
+    ("GetParameterName" fun "IDLitParameterSet" (system) "Result = Obj->[%s::]%s(Data, Name)" ("objects_it166.html"))
+    ("Init" fun "IDLitParameterSet" (system) "Result = Obj->[%s::]%s()" ("objects_it167.html" ))
+    ("Cleanup" pro "IDLitReader" (system) "Obj->[%s::]%s" ("objects_it171.html"))
+    ("GetProperty" pro "IDLitReader" (system) "Obj->[%s::]%s" ("objects_it175.html" ))
+    ("SetFilename" pro "IDLitReader" (system) "Obj->[%s::]%s, Filename" ("objects_it178.html"))
+    ("SetProperty" pro "IDLitReader" (system) "Obj->[%s::]%s" ("objects_it179.html" ))
+    ("GetData" fun "IDLitReader" (system) "Result = Obj->[%s::]%s(Data)" ("objects_it172.html"))
+    ("GetFileExtensions" fun "IDLitReader" (system) "Result = Obj->[%s::]%s()" ("objects_it173.html" ("COUNT" . 1084646)))
+    ("GetFilename" fun "IDLitReader" (system) "Result = Obj->[%s::]%s()" ("objects_it174.html"))
+    ("Init" fun "IDLitReader" (system) "Result = Obj->[%s::]%s(, Extensions)" ("objects_it176.html" ))
+    ("IsA" fun "IDLitReader" (system) "Result = Obj->[%s::]%s(Filename)" ("objects_it177.html"))
+    ("ActivateManipulator" pro "IDLitTool" (system) "Obj->[%s::]%s, Identifier" ("objects_it182.html" ("DEFAULT" . 1265856)))
+    ("Add" pro "IDLitTool" (system) "Obj->[%s::]%s, Item" ("objects_it183.html"))
+    ("AddService" pro "IDLitTool" (system) "Obj->[%s::]%s, Service" ("objects_it184.html"))
+    ("Cleanup" pro "IDLitTool" (system) "Obj->[%s::]%s" ("objects_it185.html"))
+    ("CommitActions" pro "IDLitTool" (system) "Obj->[%s::]%s" ("objects_it186.html"))
+    ("DisableUpdates" pro "IDLitTool" (system) "Obj->[%s::]%s ()" ("objects_it187.html" ("PREVIOUSLY_DISABLED" . 1078152)))
+    ("EnableUpdates" pro "IDLitTool" (system) "Obj->[%s::]%s" ("objects_it191.html"))
+    ("GetProperty" pro "IDLitTool" (system) "Obj->[%s::]%s" ("objects_it198.html" ) ("objects_it181.html" ("DESCRIPTION" . 1123541) ("ICON" . 1077825) ("NAME" . 1077853) ("VERBOSE" . 1077937) ("VERSION" . 1077965)))
+    ("RefreshCurrentWindow" pro "IDLitTool" (system) "Obj->[%s::]%s" ("objects_it203.html"))
+    ("Register" pro "IDLitTool" (system) "Obj->[%s::]%s, Name, ClassName" ("objects_it204.html" ("DEFAULT" . 1363277) ("DESCRIPTION" . 1078812) ("ICON" . 1078814) ("IDENTIFIER" . 1078816) ("PROXY" . 1078824)))
+    ("RegisterCustomization" pro "IDLitTool" (system) "Obj->[%s::]%s, Name, ClassName" ("objects_it205.html"))
+    ("RegisterFileReader" pro "IDLitTool" (system) "Obj->[%s::]%s, Name, ClassName" ("objects_it206.html" ("DEFAULT" . 1363382) ("DESCRIPTION" . 1078859) ("ICON" . 1078861) ("IDENTIFIER" . 1078863) ("PROXY" . 1078866)))
+    ("RegisterFileWriter" pro "IDLitTool" (system) "Obj->[%s::]%s, Name, ClassName" ("objects_it207.html" ("DEFAULT" . 1363460) ("DESCRIPTION" . 1078901) ("ICON" . 1078903) ("IDENTIFIER" . 1078905) ("PROXY" . 1078908)))
+    ("RegisterManipulator" pro "IDLitTool" (system) "Obj->[%s::]%s, Name, ClassName" ("objects_it208.html" ("DEFAULT" . 1078943) ("DESCRIPTION" . 1078945) ("ICON" . 1078947) ("IDENTIFIER" . 1078949)))
+    ("RegisterOperation" pro "IDLitTool" (system) "Obj->[%s::]%s, Name, ClassName" ("objects_it209.html" ("ACCELERATOR" . 1247195) ("CHECKED" . 1247213) ("DESCRIPTION" . 1078985) ("DISABLE" . 1247231) ("DROPLIST_EDIT" . 1292076) ("DROPLIST_INDEX" . 1292079) ("DROPLIST_ITEMS" . 1292082) ("ICON" . 1078987) ("IDENTIFIER" . 1078989) ("PROXY" . 1078992) ("SEPARATOR" . 1247249)))
+    ("RegisterStatusBarSegment" pro "IDLitTool" (system) "Obj->[%s::]%s, Name" ("objects_it210.html" ("IDENTIFIER" . 1286948) ("NORMALIZED_WIDTH" . 1286951)))
+    ("RegisterVisualization" pro "IDLitTool" (system) "Obj->[%s::]%s, Name, ClassName" ("objects_it211.html" ("DEFAULT" . 1079028) ("DESCRIPTION" . 1079030) ("ICON" . 1079032) ("IDENTIFIER" . 1079034) ("PROXY" . 1079037)))
+    ("SetProperty" pro "IDLitTool" (system) "Obj->[%s::]%s" ("objects_it212.html" ) ("objects_it181.html" ("DESCRIPTION" . 1123541) ("ICON" . 1077825) ("NAME" . 1077853) ("TYPE" . 1077881) ("UPDATE_BYTYPE" . 1077909) ("VERBOSE" . 1077937)))
+    ("UnRegister" pro "IDLitTool" (system) "Obj->[%s::]%s, Identifier" ("objects_it213.html"))
+    ("UnRegisterCustomization" pro "IDLitTool" (system) "Obj->[%s::]%s" ("objects_it214.html"))
+    ("UnRegisterFileReader" pro "IDLitTool" (system) "Obj->[%s::]%s, Identifier" ("objects_it215.html"))
+    ("UnRegisterFileWriter" pro "IDLitTool" (system) "Obj->[%s::]%s, Identifier" ("objects_it216.html"))
+    ("UnRegisterManipulator" pro "IDLitTool" (system) "Obj->[%s::]%s, Identifier" ("objects_it217.html"))
+    ("UnRegisterOperation" pro "IDLitTool" (system) "Obj->[%s::]%s, Identifier" ("objects_it218.html"))
+    ("UnRegisterStatusBarSegment" pro "IDLitTool" (system) "Obj->[%s::]%s, Identifier" ("objects_it219.html"))
+    ("UnRegisterVisualization" pro "IDLitTool" (system) "Obj->[%s::]%s, Identifier" ("objects_it220.html"))
+    ("DoAction" fun "IDLitTool" (system) "Result = Obj->[%s::]%s(Identifier)" ("objects_it188.html"))
+    ("DoSetProperty" fun "IDLitTool" (system) "Result = Obj->[%s::]%s(TargetIdentifier, PropertyIdentifier, Value)" ("objects_it189.html"))
+    ("DoUIService" fun "IDLitTool" (system) "Result = Obj->[%s::]%s(ServiceIdentifier, Requestor)" ("objects_it190.html"))
+    ("GetCurrentManipulator" fun "IDLitTool" (system) "Result = Obj->[%s::]%s()" ("objects_it193.html"))
+    ("GetFileReaders" fun "IDLitTool" (system) "Result = Obj->[%s::]%s(Identifier)" ("objects_it194.html" ("ALL" . 1078392) ("COUNT" . 1078394)))
+    ("GetFileWriters" fun "IDLitTool" (system) "Result = Obj->[%s::]%s(Identifier)" ("objects_it195.html" ("ALL" . 1078432) ("COUNT" . 1078434)))
+    ("GetManipulators" fun "IDLitTool" (system) "Result = Obj->[%s::]%s()" ("objects_it196.html" ("COUNT" . 1078470)))
+    ("GetOperations" fun "IDLitTool" (system) "Result = Obj->[%s::]%s()" ("objects_it197.html" ("COUNT" . 1228547) ("IDENTIFIER" . 1078507)))
+    ("GetSelectedItems" fun "IDLitTool" (system) "Result = Obj->[%s::]%s()" ("objects_it199.html" ("COUNT" . 1078577)))
+    ("GetService" fun "IDLitTool" (system) "Result = Obj->[%s::]%s(IdService)" ("objects_it200.html"))
+    ("GetVisualizations" fun "IDLitTool" (system) "Result = Obj->[%s::]%s(Identifier)" ("objects_it201.html" ("ALL" . 1078651) ("COUNT" . 1078653)))
+    ("IDLitTool" fun "IDLitTool" (system) "Result = Obj->[%s::]%s::FindIdentifiers([Pattern])" ("objects_it192.html" ("ANNOTATIONS" . 1297756) ("COUNT" . 1297759) ("DATA_MANAGER" . 1297762) ("FILE_READERS" . 1297765) ("FILE_WRITERS" . 1297768) ("LEAF_NODES" . 1297771) ("MANIPULATORS" . 1297775) ("OPERATIONS" . 1297778) ("VISUALIZATIONS" . 1297781)))
+    ("Init" fun "IDLitTool" (system) "Result = Obj->[%s::]%s()" ("objects_it202.html" ) ("objects_it181.html" ("DESCRIPTION" . 1123541) ("ICON" . 1077825) ("NAME" . 1077853) ("TYPE" . 1077881) ("UPDATE_BYTYPE" . 1077909) ("VERBOSE" . 1077937) ("VERSION" . 1077965)))
+    ("AddOnNotifyObserver" pro "IDLitUI" (system) "Obj->[%s::]%s, IdObserver, IdSubject" ("objects_it224.html"))
+    ("Cleanup" pro "IDLitUI" (system) "Obj->[%s::]%s" ("objects_it225.html"))
+    ("GetProperty" pro "IDLitUI" (system) "Obj->[%s::]%s" ("objects_it227.html" ) ("objects_it223.html" ("GROUP_LEADER" . 1085364)))
+    ("RemoveOnNotifyObserver" pro "IDLitUI" (system) "Obj->[%s::]%s, IdObserver, IdSubject" ("objects_it233.html"))
+    ("SetProperty" pro "IDLitUI" (system) "Obj->[%s::]%s" ("objects_it234.html" ))
+    ("UnRegisterUIService" pro "IDLitUI" (system) "Obj->[%s::]%s, Name" ("objects_it235.html"))
+    ("UnRegisterWidget" pro "IDLitUI" (system) "Obj->[%s::]%s, Name" ("objects_it236.html"))
+    ("DoAction" fun "IDLitUI" (system) "Result = Obj->[%s::]%s(Identifier)" ("objects_it226.html"))
+    ("GetTool" fun "IDLitUI" (system) "Result = Obj->[%s::]%s()" ("objects_it228.html"))
+    ("GetWidgetByName" fun "IDLitUI" (system) "Result = Obj->[%s::]%s(Name)" ("objects_it229.html"))
+    ("Init" fun "IDLitUI" (system) "Result = Obj->[%s::]%s(, oTool)" ("objects_it230.html" ))
+    ("RegisterUIService" fun "IDLitUI" (system) "Restult = Obj->[%s::]%s(Name, Callback)" ("objects_it231.html"))
+    ("RegisterWidget" fun "IDLitUI" (system) "Result = Obj->[%s::]%s(wID, Name, Callback)" ("objects_it232.html" ("FLOATING" . 1085752)))
+    ("Add" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Objects" ("objects_it239.html" ("AGGREGATE" . 1086521) ("NO_UPDATE" . 1086525) ("POSITION" . 1086527)))
+    ("Aggregate" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Objects" ("objects_it240.html"))
+    ("BeginManipulation" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Manipulator" ("objects_it241.html"))
+    ("Cleanup" pro "IDLitVisualization" (system) "Obj->[%s::]%s" ("objects_it242.html"))
+    ("EndManipulation" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Manipulator" ("objects_it243.html"))
+    ("GetProperty" pro "IDLitVisualization" (system) "Obj->[%s::]%s" ("objects_it251.html" ) ("objects_it238.html" ("CENTER_OF_ROTATION" . 1086295) ("IMPACTS_RANGE " . 1255230) ("ISOTROPIC" . 1086379) ("MANIPULATOR_TARGET " . 1086407) ("PROPERTY_INTERSECTION" . 1153078)))
+    ("Move" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Source, Destination" ("objects_it261.html"))
+    ("On2DRotate" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Notifier, IsRotated" ("objects_it262.html"))
+    ("OnAxesRequestChange" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Notifier, AxesRequest" ("objects_it263.html"))
+    ("OnAxesStyleRequestChange" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Notifier, StyleRequest" ("objects_it264.html"))
+    ("OnDataChange" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Notifier" ("objects_it265.html"))
+    ("OnDataComplete" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Notifier" ("objects_it266.html"))
+    ("OnDataRangeChange" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Notifier, XRange, YRange, Zrange" ("objects_it267.html"))
+    ("OnDimensionChange" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Notifier, Is3D" ("objects_it268.html"))
+    ("OnWorldDimensionChange" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Notifier, Is3D" ("objects_it269.html"))
+    ("Remove" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Object" ("objects_it270.html" ("NO_UPDATE" . 1087640)))
+    ("Restore" pro "IDLitVisualization" (system) "Obj->[%s::]%s" ("objects_it272.html"))
+    ("Rotate" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Axis, Angle" ("objects_it273.html" ("CENTER_OF_ROTATION" . 1257870) ("PREMULTIPLY" . 1257943)))
+    ("Scale" pro "IDLitVisualization" (system) "Obj->[%s::]%s, SX, SY, SZ" ("objects_it274.html" ("CENTER_OF_ROTATION" . 1087711) ("PREMULTIPLY" . 1087713)))
+    ("Select" pro "IDLitVisualization" (system) "Obj->[%s::]%s[, Mode]" ("objects_it275.html" ("ADDITIVE" . 1087748) ("NO_NOTIFY" . 1087750) ("SELECT" . 1087752) ("TOGGLE" . 1087754) ("UNSELECT" . 1087756)))
+    ("Set3D" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Is3D" ("objects_it276.html" ("ALWAYS" . 1087787) ("AUTO_COMPUTE" . 1087789)))
+    ("SetAxesRequest" pro "IDLitVisualization" (system) "Obj->[%s::]%s [, AxesRequest]" ("objects_it277.html" ("ALWAYS" . 1264542) ("AUTO_COMPUTE" . 1264612) ("NO_NOTIFY" . 1264617)))
+    ("SetAxesStyleRequest" pro "IDLitVisualization" (system) "Obj->[%s::]%s, StyleRequest" ("objects_it278.html" ("NO_NOTIFY" . 1264441)))
+    ("SetCurrentSelectionVisual" pro "IDLitVisualization" (system) "Obj->[%s::]%s, Manipulator" ("objects_it279.html"))
+    ("SetDefaultSelectionVisual" pro "IDLitVisualization" (system) "Obj->[%s::]%s, SelectionVisual" ("objects_it281.html" ("POSITION" . 1087891)))
+    ("SetProperty" pro "IDLitVisualization" (system) "Obj->[%s::]%s" ("objects_it283.html" ) ("objects_it238.html" ("CENTER_OF_ROTATION" . 1086295) ("IMPACTS_RANGE " . 1255230) ("ISOTROPIC" . 1086379) ("MANIPULATOR_TARGET " . 1086407) ("TYPE" . 1086465)))
+    ("UpdateSelectionVisual" pro "IDLitVisualization" (system) "Obj->[%s::]%s" ("objects_it284.html"))
+    ("VisToWindow" pro "IDLitVisualization" (system) "Obj->[%s::]%s, InX, InY, InZ, OutX, OutY, OutZ" ("objects_it285.html" ("NO_TRANSFORM" . 1157092)))
+    ("WindowToVis" pro "IDLitVisualization" (system) "Obj->[%s::]%s, InX, InY, InZ, OutX, OutY, OutZ or Obj->[%s::]%s, InX, InY, OutX, OutY or Obj->[%s::]%s, InVerts, OutVerts" ("objects_it286.html"))
+    ("Get" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it244.html" ("ALL" . 1086723) ("COUNT" . 1086725) ("ISA" . 1086727) ("POSITION" . 1086730) ("SKIP_PRIVATE" . 1086732)))
+    ("GetCenterRotation" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it245.html" ("NO_TRANSFORM" . 1086773) ("XRANGE" . 1086775) ("YRANGE" . 1086777) ("ZRANGE" . 1086779)))
+    ("GetCurrentSelectionVisual" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it246.html"))
+    ("GetDataSpace" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it247.html" ("UNNORMALIZED" . 1154562)))
+    ("GetDataString" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s(XYZLocation)" ("objects_it248.html"))
+    ("GetDefaultSelectionVisual" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it249.html"))
+    ("GetManipulatorTarget" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it250.html"))
+    ("GetRequestedAxesStyle" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s( )" ("objects_it252.html"))
+    ("GetSelectionVisual" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s(Manipulator)" ("objects_it253.html"))
+    ("GetTypes" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it254.html"))
+    ("GetXYZRange" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s(XRange,YRange, ZRange)" ("objects_it255.html" ("DATA" . 1087296) ("NO_TRANSFORM" . 1087298)))
+    ("Init" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it256.html" ) ("objects_it238.html" ("CENTER_OF_ROTATION" . 1086295) ("IMPACTS_RANGE " . 1255230) ("ISOTROPIC" . 1086379) ("MANIPULATOR_TARGET " . 1086407) ("PROPERTY_INTERSECTION" . 1153078) ("TYPE" . 1086465)))
+    ("Is3D" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it257.html"))
+    ("IsIsotropic" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it258.html"))
+    ("IsManipulatorTarget" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it259.html"))
+    ("IsSelected" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s()" ("objects_it260.html"))
+    ("RequestsAxes" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s( )" ("objects_it271.html"))
+    ("SetData" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s(Data)" ("objects_it280.html"))
+    ("SetParameterSet" fun "IDLitVisualization" (system) "Result = Obj->[%s::]%s(ParameterSet)" ("objects_it282.html"))
+    ("Add" pro "IDLitWindow" (system) "Obj->[%s::]%s, Objects" ("objects_it289.html" ("POSITION" . 1092060)))
+    ("AddWindowEventObserver" pro "IDLitWindow" (system) "Obj->[%s::]%s, Objects" ("objects_it290.html"))
+    ("Cleanup" pro "IDLitWindow" (system) "Obj->[%s::]%s" ("objects_it291.html"))
+    ("ClearSelections" pro "IDLitWindow" (system) "Obj->[%s::]%s" ("objects_it292.html"))
+    ("OnKeyboard" pro "IDLitWindow" (system) "Obj->[%s::]%s, IsASCII, Character, KeySymbol, X, Y, Press, Release, Modifiers" ("objects_it298.html"))
+    ("OnMouseDown" pro "IDLitWindow" (system) "Obj->[%s::]%s, X, Y, ButtonMask, Modifiers, NumClicks" ("objects_it299.html"))
+    ("OnMouseMotion" pro "IDLitWindow" (system) "Obj->[%s::]%s, X, Y, Modifiers" ("objects_it300.html"))
+    ("OnMouseUp" pro "IDLitWindow" (system) "Obj->[%s::]%s, X, Y, ButtonMask" ("objects_it301.html"))
+    ("OnScroll" pro "IDLitWindow" (system) "Obj->[%s::]%s, X, Y" ("objects_it302.html"))
+    ("Remove" pro "IDLitWindow" (system) "Obj->[%s::]%s, Object" ("objects_it303.html" ("ALL" . 1092903) ("POSITION" . 1092905)))
+    ("RemoveWindowEventObserver" pro "IDLitWindow" (system) "Obj->[%s::]%s, Objects" ("objects_it304.html"))
+    ("SetCurrentZoom" pro "IDLitWindow" (system) "Obj->[%s::]%s, ZoomFactor" ("objects_it305.html" ("RESET" . 1092996)))
+    ("SetEventMask" pro "IDLitWindow" (system) "Obj->[%s::]%s([EventMask])" ("objects_it306.html" ("BUTTON_EVENTS" . 1093069) ("KEYBOARD_EVENTS" . 1093071) ("MOTION_EVENTS" . 1093073) ("TRACKING_EVENTS" . 1093075)))
+    ("SetManipulatorManager" pro "IDLitWindow" (system) "Obj->[%s::]%s, Manager" ("objects_it307.html"))
+    ("SetProperty" pro "IDLitWindow" (system) "Obj->[%s::]%s" ("objects_it308.html" ))
+    ("ZoomIn" pro "IDLitWindow" (system) "Obj->[%s::]%s" ("objects_it309.html"))
+    ("ZoomOut" pro "IDLitWindow" (system) "Obj->[%s::]%s" ("objects_it310.html"))
+    ("DoHitTest" fun "IDLitWindow" (system) "Result = Obj->[%s::]%s(X, Y)" ("objects_it293.html" ("DIMENSIONS" . 1092195) ("ORDER" . 1247287) ("SUB_HIT" . 1092197) ("UNITS" . 1092202)))
+    ("GetEventMask" fun "IDLitWindow" (system) "Result = Obj->[%s::]%s()" ("objects_it294.html" ("BUTTON_EVENTS" . 1092316) ("KEYBOARD_EVENTS" . 1092318) ("MOTION_EVENTS" . 1092320) ("TRACKING_EVENTS" . 1092322)))
+    ("GetSelectedItems" fun "IDLitWindow" (system) "Result = Obj->[%s::]%s()" ("objects_it296.html" ("ALL" . 1247360) ("COUNT" . 1154724)))
+    ("Init" fun "IDLitWindow" (system) "Result = Obj->[%s::]%s()" ("objects_it297.html" ))
+    ("Cleanup" pro "IDLitWriter" (system) "Obj->[%s::]%s" ("objects_it313.html"))
+    ("GetProperty" pro "IDLitWriter" (system) "Obj->[%s::]%s" ("objects_it316.html" ) ("objects_it312.html" ("TYPES" . 1394697)))
+    ("SetFilename" pro "IDLitWriter" (system) "Obj->[%s::]%s, Filename" ("objects_it320.html"))
+    ("SetProperty" pro "IDLitWriter" (system) "Obj->[%s::]%s" ("objects_it321.html" ))
+    ("GetFileExtensions" fun "IDLitWriter" (system) "Result = Obj->[%s::]%s()" ("objects_it314.html" ("COUNT" . 1093562)))
+    ("GetFilename" fun "IDLitWriter" (system) "Result = Obj->[%s::]%s()" ("objects_it315.html"))
+    ("Init" fun "IDLitWriter" (system) "Result = Obj->[%s::]%s(, Extensions)" ("objects_it317.html" ) ("objects_it312.html" ("TYPES" . 1394697)))
+    ("IsA" fun "IDLitWriter" (system) "Result = Obj->[%s::]%s(Filename)" ("objects_it318.html"))
+    ("SetData" fun "IDLitWriter" (system) "Result = Obj->[%s::]%s(Data)" ("objects_it319.html"))
+    ("GetProperty" pro "IDLjavaObject" (system) "Obj->[%s::]%s" ("objects_misc30.html" ))
+    ("SetProperty" pro "IDLjavaObject" (system) "Obj->[%s::]%s" ("objects_misc32.html" ))
+    ("Init" fun "IDLjavaObject" (system) "Result = Obj -> [%s::]%s(, JavaClassName[, Arg1, ...])" ("objects_misc31.html" ))
+    ("Reset" pro "TrackBall" (system) "Obj->[%s::]%s, Center, Radius" ("objects_misc36.html" ("AXIS" . 1004145) ("CONSTRAIN" . 1004150) ("MOUSE" . 1004152)))
+    ("Init" fun "TrackBall" (system) "Result = Obj->[%s::]%s(, Center, Radius)" ("objects_misc35.html" ("AXIS") ("CONSTRAIN") ("MOUSE")) ("objects_misc34.html" ("AXIS" . 1010189) ("CONSTRAIN" . 1010194) ("MOUSE" . 1010196)))
+    ("Update" fun "TrackBall" (system) "Result = Obj->[%s::]%s( sEvent)" ("objects_misc37.html" ("MOUSE" . 1004192) ("TRANSFORM" . 1004197) ("TRANSLATE" . 1004199)))
    )
-  "1324 builtin routines with 6129 keywords for IDL version 5.5.")
+  "1850 builtin routines with 7685 keywords for IDL version 6.1.")
 
 (setq idlwave-system-variables-alist
   '(
-    ("C")
-    ("CPU" ("HW_VECTOR") ("VECTOR_ENABLE") ("HW_NCPU") ("TPOOL_NTHREADS") ("TPOOL_MIN_ELTS") ("TPOOL_MAX_ELTS"))
-    ("D" ("NAME") ("X_SIZE") ("Y_SIZE") ("X_VSIZE") ("Y_VSIZE") ("X_CH_SIZE") ("Y_CH_SIZE") ("X_PX_CM") ("Y_PX_CM") ("N_COLORS") ("TABLE_SIZE") ("FILL_DIST") ("WINDOW") ("UNIT") ("FLAGS") ("ORIGIN") ("ZOOM"))
-    ("DIR")
-    ("DLM_PATH")
-    ("DPI")
-    ("DTOR")
-    ("EDIT_INPUT")
-    ("ERROR_STATE" ("NAME") ("BLOCK") ("CODE") ("SYS_CODE") ("SYS_CODE_TYPE") ("MSG") ("SYS_MSG") ("MSG_PREFIX"))
-    ("EXCEPT")
-    ("HELP_PATH")
-    ("JOURNAL")
-    ("MAKE_DLL" ("COMPILE_DIRECTORY") ("COMPILER_NAME") ("CC") ("LD"))
-    ("MAP" ("PROJECTION") ("SIMPLE") ("FILL_METHOD") ("UP_FLAGS") ("UP_NAME") ("P0LON") ("P0LAT") ("U0") ("V0") ("SINO") ("COSO") ("ROTATION") ("SINR") ("COSR") ("UV") ("POLE") ("UV_BOX") ("LL_BOX") ("SEGMENT_LENGTH") ("P") ("PIPELINE"))
-    ("MORE")
-    ("MOUSE" ("X") ("Y") ("BUTTON") ("TIME"))
-    ("ORDER")
-    ("P" ("BACKGROUND") ("CHARSIZE") ("CHARTHICK") ("CLIP") ("COLOR") ("FONT") ("LINESTYLE") ("MULTI") ("NOCLIP") ("NOERASE") ("NSUM") ("POSITION") ("PSYM") ("REGION") ("SUBTITLE") ("SYMSIZE") ("T") ("T3D") ("THICK") ("TITLE") ("TICKLEN") ("CHANNEL"))
-    ("PATH")
-    ("PI")
-    ("PROMPT")
-    ("QUIET")
-    ("RADEG")
-    ("VALUES" ("F_INFINITY") ("F_NAN") ("D_INFINITY") ("D_NAN"))
-    ("VERSION" ("ARCH") ("OS") ("OS_FAMILY") ("OS_NAME") ("RELEASE") ("BUILD_DATE") ("MEMORY_BITS") ("FILE_OFFSET_BITS"))
-    ("WARN" ("OBS_ROUTINES") ("OBS_SYSVARS") ("PARENS"))
-    ("X" ("TITLE") ("TYPE") ("STYLE") ("TICKS") ("TICKLEN") ("THICK") ("RANGE") ("CRANGE") ("S") ("MARGIN") ("OMARGIN") ("WINDOW") ("REGION") ("CHARSIZE") ("MINOR") ("TICKV") ("TICKNAME") ("GRIDSTYLE") ("TICKFORMAT") ("TICKINTERVAL") ("TICKLAYOUT") ("TICKUNITS"))
-    ("Y" ("TITLE") ("TYPE") ("STYLE") ("TICKS") ("TICKLEN") ("THICK") ("RANGE") ("CRANGE") ("S") ("MARGIN") ("OMARGIN") ("WINDOW") ("REGION") ("CHARSIZE") ("MINOR") ("TICKV") ("TICKNAME") ("GRIDSTYLE") ("TICKFORMAT") ("TICKINTERVAL") ("TICKLAYOUT") ("TICKUNITS"))
-    ("Z" ("TITLE") ("TYPE") ("STYLE") ("TICKS") ("TICKLEN") ("THICK") ("RANGE") ("CRANGE") ("S") ("MARGIN") ("OMARGIN") ("WINDOW") ("REGION") ("CHARSIZE") ("MINOR") ("TICKV") ("TICKNAME") ("GRIDSTYLE") ("TICKFORMAT") ("TICKINTERVAL") ("TICKLAYOUT") ("TICKUNITS"))))
+    ("C" (link "sysvars7.html#wp997337"))
+    ("CPU" (tags ("HW_VECTOR") ("VECTOR_ENABLE") ("HW_NCPU") ("TPOOL_NTHREADS") ("TPOOL_MIN_ELTS") ("TPOOL_MAX_ELTS")) (link "sysvars6.html#wp1014201"))
+    ("D" (tags ("NAME" . 997486) ("X_SIZE" . 997529) ("Y_SIZE" . 997529) ("X_VSIZE" . 997534) ("Y_VSIZE" . 997534) ("X_CH_SIZE" . 997518) ("Y_CH_SIZE" . 997518) ("X_PX_CM" . 997524) ("Y_PX_CM" . 997524) ("N_COLORS" . 997482) ("TABLE_SIZE" . 997494) ("FILL_DIST" . 997350) ("WINDOW" . 997514) ("UNIT" . 1008156) ("FLAGS" . 997354) ("ORIGIN" . 997490) ("ZOOM" . 997538)) (link "sysvars7.html#wp997347"))
+    ("DIR" (link "sysvars6.html#wp997072"))
+    ("DLM_PATH" (link "sysvars6.html#wp1004032"))
+    ("DPI" (link "sysvars4.html#wp996942"))
+    ("DTOR" (link "sysvars4.html#wp996946"))
+    ("EDIT_INPUT" (link "sysvars6.html#wp1004047"))
+    ("ERROR_STATE" (tags ("NAME") ("BLOCK") ("CODE") ("SYS_CODE") ("SYS_CODE_TYPE") ("MSG") ("SYS_MSG") ("MSG_PREFIX")) (link "sysvars5.html#wp1003013"))
+    ("EXCEPT" (link "sysvars5.html#wp1002623"))
+    ("HELP_PATH" (link "sysvars6.html#wp1000204"))
+    ("JOURNAL" (link "sysvars6.html#wp997085"))
+    ("MAKE_DLL" (tags ("COMPILE_DIRECTORY") ("COMPILER_NAME") ("CC") ("LD")) (link "sysvars6.html#wp1009307"))
+    ("MAP" (tags ("PROJECTION") ("SIMPLE") ("FILL_METHOD") ("UP_FLAGS") ("UP_NAME") ("P0LON") ("P0LAT") ("U0") ("V0") ("SINO") ("COSO") ("ROTATION") ("SINR") ("COSR") ("A") ("E2") ("UV") ("POLE") ("UV_BOX") ("LL_BOX") ("SEGMENT_LENGTH") ("P") ("PIPELINE")) (link "sysvars4.html#wp996950"))
+    ("MORE" (link "sysvars6.html#wp997090"))
+    ("MOUSE" (tags ("X") ("Y") ("BUTTON") ("TIME")) (link "sysvars5.html#wp1000051"))
+    ("ORDER" (link "sysvars7.html#wp997544"))
+    ("P" (tags ("BACKGROUND" . 997554) ("CHARSIZE" . 997560) ("CHARTHICK" . 997563) ("CLIP" . 997566) ("COLOR" . 997569) ("FONT" . 997572) ("LINESTYLE" . 997575) ("MULTI" . 1004014) ("NOCLIP" . 997613) ("NOERASE" . 997616) ("NSUM" . 997619) ("POSITION" . 1006945) ("PSYM" . 997627) ("REGION" . 997633) ("SUBTITLE" . 997636) ("SYMSIZE") ("T" . 997639) ("T3D" . 997642) ("THICK" . 997645) ("TITLE" . 997648) ("TICKLEN" . 997651) ("CHANNEL" . 997557)) (link "sysvars7.html#wp997551"))
+    ("PATH" (link "sysvars6.html#wp997094"))
+    ("PI" (link "sysvars4.html#wp996954"))
+    ("PROMPT" (link "sysvars6.html#wp997101"))
+    ("QUIET" (link "sysvars6.html#wp997106"))
+    ("RADEG" (link "sysvars4.html#wp996958"))
+    ("VALUES" (tags ("F_INFINITY") ("F_NAN") ("D_INFINITY") ("D_NAN")) (link "sysvars4.html#wp996962"))
+    ("VERSION" (tags ("ARCH") ("OS") ("OS_FAMILY") ("OS_NAME") ("RELEASE") ("BUILD_DATE") ("MEMORY_BITS") ("FILE_OFFSET_BITS")) (link "sysvars6.html#wp997111"))
+    ("WARN" (tags ("OBS_ROUTINES") ("OBS_SYSVARS") ("PARENS")) (link "sysvars5.html#wp1000387"))
+    ("X" (tags ("TITLE" . 997839) ("TYPE" . 997842) ("STYLE" . 997742) ("TICKS" . 999577) ("TICKLEN" . 1012793) ("THICK" . 997798) ("RANGE" . 997713) ("CRANGE" . 997670) ("S" . 997736) ("MARGIN" . 997689) ("OMARGIN" . 997702) ("WINDOW" . 997845) ("REGION" . 997724) ("CHARSIZE" . 1012787) ("MINOR" . 997699) ("TICKV" . 997833) ("TICKNAME" . 997811) ("GRIDSTYLE" . 998134) ("TICKFORMAT" . 997801) ("TICKINTERVAL" . 997808) ("TICKLAYOUT" . 1012924) ("TICKUNITS" . 1012962)) (link "sysvars7.html#wp997657"))
+    ("Y" (tags ("TITLE" . 997839) ("TYPE" . 997842) ("STYLE" . 997742) ("TICKS" . 999577) ("TICKLEN" . 1012793) ("THICK" . 997798) ("RANGE" . 997713) ("CRANGE" . 997670) ("S" . 997736) ("MARGIN" . 997689) ("OMARGIN" . 997702) ("WINDOW" . 997845) ("REGION" . 997724) ("CHARSIZE" . 1012787) ("MINOR" . 997699) ("TICKV" . 997833) ("TICKNAME" . 997811) ("GRIDSTYLE" . 998134) ("TICKFORMAT" . 997801) ("TICKINTERVAL" . 997808) ("TICKLAYOUT" . 1012924) ("TICKUNITS" . 1012962)) (link "sysvars7.html#wp997657"))
+    ("Z" (tags ("TITLE" . 997839) ("TYPE" . 997842) ("STYLE" . 997742) ("TICKS" . 999577) ("TICKLEN" . 1012793) ("THICK" . 997798) ("RANGE" . 997713) ("CRANGE" . 997670) ("S" . 997736) ("MARGIN" . 997689) ("OMARGIN" . 997702) ("WINDOW" . 997845) ("REGION" . 997724) ("CHARSIZE" . 1012787) ("MINOR" . 997699) ("TICKV" . 997833) ("TICKNAME" . 997811) ("GRIDSTYLE" . 998134) ("TICKFORMAT" . 997801) ("TICKINTERVAL" . 997808) ("TICKLAYOUT" . 1012924) ("TICKUNITS" . 1012962)) (link "sysvars7.html#wp997657"))))
 
 
 (setq idlwave-system-class-info
   '(
-    ("IDLgrAxis"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRAXIS_TOP" "IDLGRAXISVERSION" "AM_PM" "AXIS_TYPE" "CALCFLAGS" "DAYS_OF_WEEK" "DIRECTION" "AXISFLAGS" "GRIDSTYLE" "LOCATION" "MAJOR" "MINOR" "MONTHS" "OUTRANGE" "RANGE" "SUBTICKLEN" "TEXTALIGNMENTS" "TEXTBASELINE" "TEXTUPDIR" "THICK" "TICKDIR" "TICKFORMAT" "ARRAY_TICKFORMAT" "TICKFRMTDATA" "TICKINTERVAL" "TICKLAYOUT" "TICKLEN" "TICKTEXT" "TICKUNITCODES" "TICKUNITS" "TICKVALUES" "TITLE" "CURRENT_LEVEL" "LEVEL_DATA" "STEPRANGEUNITS" "STEPRANGE")
-     (inherits))
-    ("IDLgrContour"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRCONTOURTOP" "IDLGRCONTOURVERSION" "ANISOTROPY" "DATA_FORMAT" "DATA" "GEOM_FORMAT" "GEOM" "CONTOURFLAGS" "C_COLOR" "C_FILLPATTERN" "C_LINESTYLE" "C_THICK" "C_VALUE" "MAXVAL" "MINVAL" "NLEVELS" "POLYGONS" "SHADERANGE" "SHADING" "TICKINTERVAL" "TICKLEN" "PRECISIONDATA" "PRECISIONGEOM" "PRECISIONGRAPH" "LEVELINFO" "CFILL1" "DEPTHOFFSET" "IDLGRCONTOURBOTTOM")
-     (inherits))
-    ("IDLgrLegend"
-     (tags "OSCALENODE" "BORDER_GAP" "COLUMNS" "OOUTLINE" "OFILL" "OFONT" "GAP" "GLYPHWIDTH" "PITEM_COLOR" "PITEM_LINESTYLE" "PITEM_NAME" "PITEM_OBJECT" "PITEM_THICK" "PITEM_TYPE" "OTITLE" "PTEXT_COLOR" "BRECOMPUTE" "PGLYPHS" "PTEXTS" "HGLYPHWIDTH" "VGLYPHWIDTH" "COLORMODE" "CLEANLEAVE" "CLEANGLYPHS" "IDLGRLEGENDVERSION")
-     (inherits "IDLgrModel"))
-    ("IDLgrROI"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRROI_TOP" "IDLGRROIVERSION" "LINESTYLE" "STYLE" "SYMBOL" "THICK" "IDLGRROI_BOTTOM")
-     (inherits "IDLanROI"))
-    ("IDLgrSurface"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRSURFACETOP" "IDLGRSURFACEVERSION" "DATA" "PRECISION" "SKIRT" "VERTCOLORS" "BTMCOLOR" "SURFACEFLAGS" "LINESTYLE" "MAXVALUE" "MINVALUE" "SHADING" "SHADERANGE" "STYLE" "NORMALS" "TXTRCOORD" "TXTRMAP" "THICK" "DEPTHOFFSET" "IDLGRSURFACEBOTTOM")
-     (inherits))
-    ("IDLgrPolygon"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRPOLYGONTOP" "IDLGRPOLYGONVERSION" "DATA" "PRECISION" "FILLPATTERN" "POLYGONS" "NORMALS" "POLYGONFLAGS" "SHADING" "SHADERANGE" "STYLE" "TXTRCOORD" "TXTRMAP" "VERTCOLORS" "BTMCOLOR" "LINESTYLE" "THICK" "DEPTHOFFSET" "IDLGRPOLYGONBOTTOM")
-     (inherits))
-    ("IDLgrWindow"
-     (tags "IDLGRSRCDEST_TOP" "IDLGRSRCDESTVERSION" "CLIENTDIMENSIONS" "COLORMODEL" "SRCDESTFLAGS" "GRAPHICS_TREE" "NCOLORS" "PALETTE" "QUALITY" "RESOLUTION" "UVALUE" "DIST" "FILL1" "DEV" "FILL2" "ATTRS" "FILL3" "CACHES" "FILL4" "IDLGRSRCDEST_BOTTOM" "IDLGRWINDOW_TOP" "IDLGRWINDOWVERSION" "WINDOWFLAGS" "DIMENSIONS" "DISPLAYNAME" "INDEX" "LOCATION" "RENDERER" "RETAIN" "SCREENDIMENSIONS" "SELF" "TITLE" "UNITS" "NEXT" "WFILL1" "PARENT" "WFILL2" "IDLGRWINDOW_BOTTOM")
-     (inherits))
-    ("IDLgrPlot"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRPLOT_TOP" "IDLGRPLOTVERSION" "DATA" "PLOTFLAGS" "LINESTYLE" "PRECISION" "MAXVAL" "MINVAL" "NSUM" "SYMBOL" "PSYMBOL" "THICK" "VERTCOLORS" "ZVALUE" "LINEDATA" "PFILL1" "IDLGRPLOT_BOTTOM")
-     (inherits))
-    ("IDLgrVolume"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRVOLUMETOP" "IDLGRVOLUMEVERSION" "AMBIENT" "BOUNDS" "LIMITS" "DIMENSIONS" "COLORTABLE" "COMPOSITEFUNC" "CUTPLANES" "NUMCUTPLANES" "DEPTH_CUE" "OPACITYTABLE" "RENDERSTEP" "DATA" "EDM_VOLUME" "VOLUMEFLAGS" "IDLGRVOLUMEBOTTOM")
-     (inherits))
-    ("IDLgrROIGroup"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRROIGROUP_TOP" "IDLGRROIGROUPVERSION" "IDLGRROI_BOTTOM")
-     (inherits "IDLanROIGroup"))
-    ("IDLgrColorbar"
-     (tags "OCOORDCONVNODE" "OSCALENODE" "MAXDIM" "DIMENSIONS" "OAXIS" "OPOLY" "OSURF" "OIMAGE" "OPALETTE" "FREE_PALETTE" "SHOW_AXIS" "IDLGRCOLORBARVERSION")
-     (inherits "IDLgrModel"))
-    ("IDLgrText"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRTEXT_TOP" "IDLGRTEXTVERSION" "TEXTFLAGS" "ALIGNMENT" "BASELINE" "CHAR_DIMENSIONS" "RECOMP_CTM" "FONT" "LOCATIONS" "STRINGS" "SUBPARENT" "UPDIR" "VERTICAL_ALIGNMENT" "IDLGRTEXT_BOTTOM")
-     (inherits))
-    ("IDLgrImage"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRIMAGE_TOP" "IDLGRIMAGEVERSION" "CHANNEL" "DATA" "DIMENSIONS" "SUB_RECT" "IMAGEFLAGS" "LOCATION" "INTERLEAVE" "INTERPOLATE" "BLEND_FUNCTIONS" "IDLGRIMAGE_BOTTOM")
-     (inherits))
-    ("IDLgrView"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRCONTAINER_TOP" "IDLGRCONTAINERVERSION" "ISDYING" "IDLGRCONTAINER_BOTTOM" "IDLGRVIEW_TOP" "IDLGRVIEWVERSION" "COLOR" "DEPTH_CUE" "DIMENSIONS" "PRECISION" "EYE" "LOCATION" "OBLIQUE" "PROJECTION" "TRANSPARENT" "UNITS" "VIEW" "ZCLIP" "IDLGRVIEW_BOTTOM")
-     (inherits "IDL_Container"))
-    ("IDLgrPolyline"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRPOLYLINETOP" "IDLGRPOLYLINEVERSION" "DATA" "PRECISION" "LINESTYLE" "POLYLINES" "SYMBOL" "PSYMBOL" "THICK" "SHADING" "VERTCOLORS" "IDLGRPOLYLINEBOTTOM")
-     (inherits))
-    ("IDLgrLight"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "COLOR" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRLIGHT_TOP" "IDLGRLIGHTVERSION" "ATTENUATION" "CONEANGLE" "DIRECTION" "FOCUS" "INTENSITY" "LOCATION" "TYPE" "IDLGRLIGHT_BOTTOM")
-     (inherits))
-    ("IDLgrVRML"
-     (tags "IDLGRSRCDEST_TOP" "IDLGRSRCDESTVERSION" "CLIENTDIMENSIONS" "COLORMODEL" "SRCDESTFLAGS" "GRAPHICS_TREE" "NCOLORS" "PALETTE" "QUALITY" "RESOLUTION" "UVALUE" "DIST" "FILL1" "DEV" "FILL2" "ATTRS" "FILL3" "CACHES" "FILL4" "IDLGRSRCDEST_BOTTOM" "IDLGRVRMLTOP" "IDLGRVRMLVERSION" "UNITS" "DIMENSIONS" "FILENAME" "WORLDINFO" "WORLDTITLE" "IDLGRVRMLBOTTOM")
-     (inherits))
-    ("IDLgrClipboard"
-     (tags "IDLGRSRCDEST_TOP" "IDLGRSRCDESTVERSION" "CLIENTDIMENSIONS" "COLORMODEL" "SRCDESTFLAGS" "GRAPHICS_TREE" "NCOLORS" "PALETTE" "QUALITY" "RESOLUTION" "UVALUE" "DIST" "FILL1" "DEV" "FILL2" "ATTRS" "FILL3" "CACHES" "FILL4" "IDLGRSRCDEST_BOTTOM" "IDLGRCLIPBOARDTOP" "IDLGRCLIPBOARDVERSION" "UNITS" "DIMENSIONS" "FILENAME" "VECTOR" "POSTSCRIPT" "IDLGRCLIPBOARDBOTTOM")
-     (inherits))
-    ("IDLgrPrinter"
-     (tags "IDLGRSRCDEST_TOP" "IDLGRSRCDESTVERSION" "CLIENTDIMENSIONS" "COLORMODEL" "SRCDESTFLAGS" "GRAPHICS_TREE" "NCOLORS" "PALETTE" "QUALITY" "RESOLUTION" "UVALUE" "DIST" "FILL1" "DEV" "FILL2" "ATTRS" "FILL3" "CACHES" "FILL4" "IDLGRSRCDEST_BOTTOM" "IDLGRPRINTER_TOP" "IDLGRPRINTERVERSION" "PRINTERFLAGS" "NAME" "NCOPIES" "UNITS" "GAMMA" "IDLGRPRINTER_BOTTOM")
-     (inherits))
-    ("IDLgrBuffer"
-     (tags "IDLGRSRCDEST_TOP" "IDLGRSRCDESTVERSION" "CLIENTDIMENSIONS" "COLORMODEL" "SRCDESTFLAGS" "GRAPHICS_TREE" "NCOLORS" "PALETTE" "QUALITY" "RESOLUTION" "UVALUE" "DIST" "FILL1" "DEV" "FILL2" "ATTRS" "FILL3" "CACHES" "FILL4" "IDLGRSRCDEST_BOTTOM" "IDLGRBUFFERTOP" "IDLGRBUFFERVERSION" "UNITS" "DIMENSIONS" "IDLGRBUFFERBOTTOM")
-     (inherits))
-    ("IDLgrMPEG"
-     (tags "IDLGRMPEG_TOP" "IDLGRMPEGVERSION" "DIMENSIONS" "FILENAME" "FORMAT" "FRAMERATE" "INTERLACED" "QUALITY" "SCALE" "STATISTICS" "DISPLAYDIMS" "FIRSTFRAME" "LASTFRAME" "MPEGID" "TEMPNODE" "TEMPNODEFILLER" "TEMP_DIRECTORY" "BITRATE" "IFRAME_GAP" "MOTION_LENGTH" "FLAGS" "IDLGRMPEG_BOTTOM")
-     (inherits))
-    ("IDLgrScene"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRCONTAINER_TOP" "IDLGRCONTAINERVERSION" "ISDYING" "IDLGRCONTAINER_BOTTOM" "IDLGRSCENE_TOP" "IDLGRSCENEVERSION" "COLOR" "TRANSPARENT" "IDLGRSCENE_BOTTOM")
-     (inherits "IDL_Container"))
-    ("IDLgrModel"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRCONTAINER_TOP" "IDLGRCONTAINERVERSION" "ISDYING" "IDLGRCONTAINER_BOTTOM" "IDLGRMODEL_TOP" "IDLGRMODELVERSION" "MODELFLAGS" "TRANSFORM" "IDLGRMODEL_BOTTOM")
-     (inherits "IDL_Container"))
-    ("IDLgrViewgroup"
-     (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "NAME" "PARENT" "UVALUE" "IDLGRCOMPONENT_BOTTOM" "IDLGRCONTAINER_TOP" "IDLGRCONTAINERVERSION" "ISDYING" "IDLGRCONTAINER_BOTTOM" "IDLGRVIEWGROUPTOP" "IDLGRVIEWGROUPVERSION" "IDLGRVIEWGROUPBOTTOM")
-     (inherits "IDL_Container"))
-    ("IDLdbRecordset"
-     (tags "DTOPPAD" "IDLDBRECORDSETVERSION" "ISTABLE" "PDBOBJ" "ISREADONLY" "NFIELDS" "CURROW" "SOURCE" "CURSORTYPE" "PFIELDS" "PSDEF" "ROWSTATUS" "ROWSET" "ROWPOS" "HSTMT" "HDBC" "DBOTTOMPAD")
-     (inherits))
-    ("IDLdbDatabase"
-     (tags "DTOPPAD" "IDLDBDATABASEVERSION" "READONLY" "ISCONNECTED" "FETCHDIR" "POSOPS" "POSSTATEMENTS" "SCROLLCONCUR" "SCROLLOPTIONS" "STATICSENSE" "GETDATAEXT" "USINGCURSOR" "NSTATEMENTS" "P_RECOBJS" "HDBC" "DBOTTOMPAD")
-     (inherits))
-    ("IDLanROI"
-     (tags "IDLANROI_TOP" "IDLANROIVERSION" "IDLANROIFLAGS" "NALLOCVERTS" "NUSEDVERTS" "BLOCKSIZE" "DATA" "TYPE" "PRECISION" "PLANE" "ROI_XRANGE" "ROI_YRANGE" "ROI_ZRANGE" "IDLANROI_BOTTOM")
-     (inherits))
-    ("IDLanROIGroup"
-     (tags "IDLANROIGROUP_TOP" "IDLANROIGROUPVERSION" "IDLANROIGROUPFLAGS" "ROIGROUP_XRANGE" "ROIGROUP_YRANGE" "ROIGROUP_ZRANGE" "IDLANROIGROUP_BOTTOM")
-     (inherits "IDL_Container"))
-    ("IDLgrPalette"
-     (tags "IDLGRPALETTE_SERIALNUM" "IDLGRPALETTEVERSION" "GAMMA" "BOTTOMSTRETCH" "TOPSTRETCH" "NENTRIES" "ORIGLUT" "CURRLUT" "INVTABLE" "UVALUE" "NAME" "IDLGRPALETTE_BOTTOM")
-     (inherits))
-    ("IDLgrFont"
-     (tags "IDLGRFONT_TOP" "IDLGRFONTVERSION" "FONTFLAGS" "HERSHEY" "NAME" "SIZE" "SUBSTITUTE" "THICK" "ID" "UVALUE" "IDLGRFONT_BOTTOM")
-     (inherits))
-    ("IDLgrSymbol"
-     (tags "IDLGRSYMBOLTOP" "IDLGRSYMBOLVERSION" "COLOR" "DATA" "SIZE" "THICK" "FLAGS" "UVALUE" "NAME" "IDLGRSYMBOLBOTTOM")
-     (inherits))
-    ("IDLgrPattern"
-     (tags "IDLGRPATTERN_TOP" "IDLGRPATTERNVERSION" "ORIENTATION" "PATTERN" "SPACING" "STYLE" "THICK" "UVALUE" "NAME" "IDLGRPATTERN_BOTTOM")
-     (inherits))
-    ("IDLffShape"
-     (tags "IDLFFSHAPE_TOP" "IDLFFSHAPEVERSION" "FILENAME" "ISOPEN" "SHPTYPE" "PATTRIBUTE" "SHAPEHANDLE" "DBFHANDLE" "IDLFFSHAPE_BOTTOM")
-     (inherits))
-    ("IDLffDXF"
-     (tags "IDLFFDXF_TOP" "IDLFFDXFVERSION" "DXFREADVALID" "DXFHANDLEVALID" "DXFLUT" "SERIAL" "DXFHANDLE" "DXFHANDLEFILLER" "IDLFFDXF_BOTTOM")
-     (inherits))
-    ("IDLffDICOM"
-     (tags "IDLFFDICOM_TOP" "IDLFFDICOMVERSION" "DICOMFLAGS" "DICOMELEMENTS" "DICOMPREAMBLE" "DICOMHANDLE" "DICOMHANDLEFILLER" "IDLFFDICOM_BOTTOM")
-     (inherits))
-    ("TrackBall"
-     (tags "BTNDOWN" "AXIS" "CONSTRAIN" "MOUSE" "CENTER" "RADIUS" "PT0" "PT1")
-     (inherits))
-    ("IDL_Container"
-     (tags "IDL_CONTAINER_TOP" "IDLCONTAINERVERSION" "PHEAD" "PTAIL" "NLIST" "IDL_CONTAINER_BOTTOM")
-     (inherits))
-    ("IDLgrTessellator"
-     (tags "IDLGRTESSELLATORTOP" "IDLGRTESSELLATORVERSION" "ITESSFLAGS" "IVERTS" "HVIDLIST" "IDLGRTESSELLATORBOTTOM")
-     (inherits))))
+    ("IDLgrContour" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRCONTOUR_TOP" "IDLGRCONTOURVERSION" "AM_PM" "ANISOTROPY" "DATA_FORMAT" "DATA" "DAYS_OF_WEEK" "GEOM_FORMAT" "GEOM" "CONTOURFLAGS" "C_COLOR" "C_FILLPATTERN" "C_LABEL_INTERVAL" "C_LABEL_NOGAPS" "C_LABEL_OBJECTS" "C_LABEL_SHOW" "C_LINESTYLE" "C_THICK" "C_USE_LABEL_COLOR" "C_USE_LABEL_ORIENTATION" "C_VALUE" "LABEL_DEFAULTS" "LABEL_FONT" "LABEL_FORMAT" "LABEL_FRMTDATA" "LABEL_UNITS" "LABEL_UNIT_CODE" "MAXVAL" "MINVAL" "MONTHS" "NLEVELS" "POLYGONS" "SHADERANGE" "SHADING" "TICKINTERVAL" "TICKLEN" "PRECISIONDATA" "PRECISIONGEOM" "PRECISIONGRAPH" "LEVELINFO" "CFILL1" "DEPTHOFFSET" "MAPINFO" "IDLGRCONTOUR_BOTTOM") (inherits "IDLitComponent") (link "objects_gr43.html"))
+    ("IDLgrAxis" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRAXIS_TOP" "IDLGRAXISVERSION" "AM_PM" "AXIS_TYPE" "CALCFLAGS" "DAYS_OF_WEEK" "DIRECTION" "AXISFLAGS" "GRIDSTYLE" "LOCATION" "MAJOR" "MINOR" "MONTHS" "OUTRANGE" "RANGE" "SUBTICKLEN" "TEXTALIGNMENTS" "TEXTBASELINE" "TEXTUPDIR" "THICK" "TICKDIR" "TICKFORMAT" "ARRAY_TICKFORMAT" "TICKFRMTDATA" "TICKINTERVAL" "TICKLAYOUT" "TICKLEN" "TICKTEXT" "TICKUNITCODES" "TICKUNITS" "TICKVALUES" "TITLE" "CURRENT_LEVEL" "LEVEL_DATA" "STEPRANGEUNITS" "STEPRANGE" "IDLGRAXIS_BOTTOM") (inherits "IDLitComponent") (link "objects_gr3.html"))
+    ("IDLitWindow" (tags "IDLITWINDOW_TOP" "IDLITWINDOWFLAGS" "EVENTMASK" "EVENTNOTIFIER" "SCENE" "PEVENTS" "IDLITWIN_FILL1" "PEVENTTAIL" "IDLITWIN_FILL2" "IDLITWINDOW_BOTTOM") (inherits "IDLgrWindow") (link "objects_it287.html"))
+    ("IDLitVisualization" (tags "_BISMESSAGER" "_CLASSNAME" "_OCHILDREN" "_OPROPINTERSECTION" "_OAGGCHILDREN" "__$$__" "GEOMREFCOUNT" "CENTERROTATION" "IHAVECENTERROTATION" "IMPACTSRANGE" "ISSELECTED" "IS3D" "DIMMETHOD" "ISOTROPIC" "ISMANIPULATORTARGET" "_SELECTIONPAD" "OGROUPPARENT" "OCURRSELECTIONVISUAL" "_CREATEDDURINGINIT" "_OSELECTIONVISUAL" "_PSTRTYPE" "AXESREQUEST" "AXESMETHOD" "AXESSTYLEREQUEST" "DOREQUESTAXESSTYLE" "_BISDELETED") (inherits "IDLgrModel" "IDLitParameter" "IDLitIMessaging") (link "objects_it237.html"))
+    ("IDLitManipulatorVisual" (tags "_BISMESSAGER" "_CLASSNAME" "_OCHILDREN" "_OPROPINTERSECTION" "_OAGGCHILDREN" "__$$__" "GEOMREFCOUNT" "CENTERROTATION" "IHAVECENTERROTATION" "IMPACTSRANGE" "ISSELECTED" "IS3D" "DIMMETHOD" "ISOTROPIC" "ISMANIPULATORTARGET" "_SELECTIONPAD" "OGROUPPARENT" "OCURRSELECTIONVISUAL" "_CREATEDDURINGINIT" "_OSELECTIONVISUAL" "_PSTRTYPE" "AXESREQUEST" "AXESMETHOD" "AXESSTYLEREQUEST" "DOREQUESTAXESSTYLE" "_STRVISUALTYPE" "_UNIFORMSCALE") (inherits "IDLgrModel" "IDLitIMessaging") (link "objects_it128.html"))
+    ("IDLgrSurface" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRSURFACE_TOP" "IDLGRSURFACEVERSION" "DATA" "PRECISION" "SKIRT" "VERTCOLORS" "BTMCOLOR" "AMBIENT" "DIFFUSE" "SPECULAR" "EMISSION" "SHININESS" "SURFACEFLAGS" "LINESTYLE" "MAXVALUE" "MINVALUE" "SHADING" "SHADERANGE" "STYLE" "NORMALS" "TXTRCOORD" "TXTRMAP" "TXTRHIGHRES" "THICK" "DEPTHOFFSET" "IDLGRSURFACE_BOTTOM") (inherits "IDLitComponent") (link "objects_gr173.html"))
+    ("IDLgrLegend" (tags "OSCALENODE" "BORDER_GAP" "COLUMNS" "OOUTLINE" "OFILL" "OFONT" "GAP" "GLYPHWIDTH" "PITEM_COLOR" "PITEM_LINESTYLE" "PITEM_NAME" "PITEM_OBJECT" "PITEM_THICK" "PITEM_TYPE" "OTITLE" "PTEXT_COLOR" "BRECOMPUTE" "PGLYPHS" "PTEXTS" "HGLYPHWIDTH" "VGLYPHWIDTH" "COLORMODE" "CLEANLEAVE" "CLEANGLYPHS" "IDLGRLEGENDVERSION") (inherits "IDLgrModel") (link "objects_gr65.html"))
+    ("IDLgrPolygon" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRPOLYGON_TOP" "IDLGRPOLYGONVERSION" "DATA" "PRECISION" "FILLPATTERN" "POLYGONS" "NORMALS" "POLYGONFLAGS" "SHADING" "SHADERANGE" "STYLE" "TXTRCOORD" "TXTRMAP" "VERTCOLORS" "BTMCOLOR" "AMBIENT" "DIFFUSE" "SPECULAR" "EMISSION" "SHININESS" "LINESTYLE" "THICK" "DEPTHOFFSET" "IDLGRPOLYGON_BOTTOM") (inherits "IDLitComponent") (link "objects_gr124.html"))
+    ("IDLgrWindow" (tags "IDLGRSRCDEST_TOP" "IDLGRSRCDESTVERSION" "CLIENTDIMENSIONS" "COLORMODEL" "SRCDESTFLAGS" "GRAPHICS_TREE" "NCOLORS" "PALETTE" "QUALITY" "RESOLUTION" "DIST" "FILL1" "DEV" "FILL2" "ATTRS" "FILL3" "CACHES" "FILL4" "IDLGRSRCDEST_BOTTOM" "IDLGRWINDOW_TOP" "IDLGRWINDOWVERSION" "WINDOWFLAGS" "CURRENT_ZOOM" "DIMENSIONS" "DISPLAYNAME" "INDEX" "LOCATION" "MINIMUM_VIRTUAL_DIMENSIONS" "ORIGINAL_VIRTUAL_DIMENSIONS" "RENDERER" "RETAIN" "SCREENDIMENSIONS" "SELF" "TITLE" "UNITS" "VIRTUAL_DIMENSIONS" "VISIBLE_LOCATION" "ZOOM_BASE" "ZOOM_NSTEP" "EXTERNAL_WINDOW" "NEXT" "WFILL1" "PARENT" "WFILL2" "IDLGRWINDOW_BOTTOM") (inherits "IDLitComponent") (link "objects_gr235.html"))
+    ("IDLgrROI" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRROI_TOP" "IDLGRROIVERSION" "LINESTYLE" "STYLE" "SYMBOL" "THICK" "IDLGRROI_BOTTOM") (inherits "IDLanROI" "IDLitComponent") (link "objects_gr150.html"))
+    ("IDLgrPolyline" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRPOLYLINE_TOP" "IDLGRPOLYLINEVERSION" "POLYLINEFLAGS" "DATA" "PRECISION" "LABEL_NOGAPS" "LABEL_OBJECTS" "LABEL_OFFSETS" "LABEL_POLYLINES" "LINESTYLE" "POLYLINES" "SYMBOL" "PSYMBOL" "THICK" "SHADING" "USE_LABEL_COLOR" "USE_LABEL_ORIENTATION" "VERTCOLORS" "LABEL_INFO" "FILL1" "IDLGRPOLYLINE_BOTTOM") (inherits "IDLitComponent") (link "objects_gr131.html"))
+    ("IDLitManipulatorManager" (tags "_OOLDCURR" "_ODEFAULT" "_OWINCURR" "_CURROBS") (inherits "IDLitManipulatorContainer") (link "objects_it121.html"))
+    ("IDLgrPlot" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRPLOT_TOP" "IDLGRPLOTVERSION" "DATA" "PLOTFLAGS" "LINESTYLE" "PRECISION" "MAXVAL" "MINVAL" "NSUM" "SYMBOL" "PSYMBOL" "THICK" "VERTCOLORS" "ZVALUE" "LINEDATA" "PFILL1" "IDLGRPLOT_BOTTOM") (inherits "IDLitComponent") (link "objects_gr117.html"))
+    ("IDLgrVolume" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRVOLUME_TOP" "IDLGRVOLUMEVERSION" "AMBIENT" "BOUNDS" "LIMITS" "DIMENSIONS" "COLORTABLE" "COMPOSITEFUNC" "CUTPLANES" "NUMCUTPLANES" "DEPTH_CUE" "OPACITYTABLE" "RENDERSTEP" "DATA" "EDM_VOLUME" "VOLUMEFLAGS" "IDLGRVOLUME_BOTTOM") (inherits "IDLitComponent") (link "objects_gr216.html"))
+    ("IDLgrROIGroup" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRROIGROUP_TOP" "IDLGRROIGROUPVERSION" "IDLGRROIGROUP_BOTTOM") (inherits "IDLanROIGroup" "IDLitComponent") (link "objects_gr157.html"))
+    ("IDLgrText" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRTEXT_TOP" "IDLGRTEXTVERSION" "TEXTFLAGS" "ALIGNMENT" "BASELINE" "CHAR_DIMENSIONS" "RECOMP_CTM" "FONT" "LOCATIONS" "STRINGS" "SUBPARENT" "UPDIR" "VERTICAL_ALIGNMENT" "FILL_COLOR" "RENDER_MODE" "IDLGRTEXT_BOTTOM") (inherits "IDLitComponent") (link "objects_gr193.html"))
+    ("IDLitManipulatorContainer" (tags "_BISMESSAGER" "_CLASSNAME" "_OCHILDREN" "M_BAUTOSWITCH" "M_CURRMANIP") (inherits "IDLitManipulator" "IDL_Container") (link "objects_it107.html"))
+    ("IDLgrColorbar" (tags "OCOORDCONVNODE" "OSCALENODE" "MAXDIM" "DIMENSIONS" "OAXIS" "OPOLY" "OSURF" "OIMAGE" "OPALETTE" "FREE_PALETTE" "SHOW_AXIS" "IDLGRCOLORBARVERSION") (inherits "IDLgrModel") (link "objects_gr36.html"))
+    ("IDLitTool" (tags "__VOID" "_STRTOOLNAME" "_STRFILENAME" "_IDCURRENT" "_STRVERSION" "_STRWORKINGDIRECTORY" "_OSYSTEM" "_MANIPULATORS" "_OUISERVICECONN" "_OUICONNECTION" "_OWINDOW" "_COMMANDBUFFER" "_OLASTERROR" "_PDISPATCHTABLE" "_TYPES" "_STATUSBAR" "_IBUFFERLOCATION" "_IDISABLEUPDATES" "_NSELCHANGE" "_CURRSTATUSSEGMENTID" "_BNOREDRAW" "_BDIRTY" "_NOSAVEPROMPT" "_BUPDATEBYTYPE" "_BCHANGEDIRECTORY") (inherits "IDLitContainer" "IDLitIMessaging") (link "objects_it180.html"))
+    ("IDLgrImage" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRIMAGE_TOP" "IDLGRIMAGEVERSION" "CHANNEL" "DATA" "DIMENSIONS" "SUB_RECT" "IMAGEFLAGS" "LOCATION" "INTERLEAVE" "INTERPOLATE" "BLEND_FUNCTIONS" "IDLGRIMAGE_BOTTOM") (inherits "IDLitComponent") (link "objects_gr58.html"))
+    ("IDLgrLight" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRGRAPHIC_TOP" "IDLGRGRAPHICVERSION" "ALPHACHANNEL" "CLIP_PLANES" "COLOR" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "GRAPHICFLAGS" "PALETTE" "XCOORD_CONV" "YCOORD_CONV" "ZCOORD_CONV" "XRANGE" "YRANGE" "ZRANGE" "GRAPHIC_DATA_OBJECT" "IDLGRGRAPHIC_BOTTOM" "IDLGRLIGHT_TOP" "IDLGRLIGHTVERSION" "ATTENUATION" "CONEANGLE" "DIRECTION" "FOCUS" "INTENSITY" "LOCATION" "TYPE" "IDLGRLIGHT_BOTTOM") (inherits "IDLitComponent") (link "objects_gr72.html"))
+    ("IDLgrView" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRCONTAINER_TOP" "IDLGRCONTAINERVERSION" "ISDYING" "IDLGRCONTAINER_BOTTOM" "IDLGRVIEW_TOP" "IDLGRVIEWVERSION" "VIEWFLAGS" "COLOR" "DEPTH_CUE" "DIMENSIONS" "PRECISION" "EYE" "LOCATION" "OBLIQUE" "PROJECTION" "TRANSPARENT" "UNITS" "VIEW" "ZCLIP" "IDLGRVIEW_BOTTOM") (inherits "IDLitComponent" "IDL_Container") (link "objects_gr200.html"))
+    ("IDLgrClipboard" (tags "IDLGRSRCDEST_TOP" "IDLGRSRCDESTVERSION" "CLIENTDIMENSIONS" "COLORMODEL" "SRCDESTFLAGS" "GRAPHICS_TREE" "NCOLORS" "PALETTE" "QUALITY" "RESOLUTION" "DIST" "FILL1" "DEV" "FILL2" "ATTRS" "FILL3" "CACHES" "FILL4" "IDLGRSRCDEST_BOTTOM" "IDLGRCLIPBOARD_TOP" "IDLGRCLIPBOARDVERSION" "UNITS" "DIMENSIONS" "FILENAME" "VECTOR" "POSTSCRIPT" "IDLGRCLIPBOARD_BOTTOM") (inherits "IDLitComponent") (link "objects_gr25.html"))
+    ("IDLgrVRML" (tags "IDLGRSRCDEST_TOP" "IDLGRSRCDESTVERSION" "CLIENTDIMENSIONS" "COLORMODEL" "SRCDESTFLAGS" "GRAPHICS_TREE" "NCOLORS" "PALETTE" "QUALITY" "RESOLUTION" "DIST" "FILL1" "DEV" "FILL2" "ATTRS" "FILL3" "CACHES" "FILL4" "IDLGRSRCDEST_BOTTOM" "IDLGRVRML_TOP" "IDLGRVRMLVERSION" "UNITS" "DIMENSIONS" "FILENAME" "WORLDINFO" "WORLDTITLE" "IDLGRVRML_BOTTOM") (inherits "IDLitComponent") (link "objects_gr225.html"))
+    ("IDLitManipulator" (tags "PSELECTIONLIST" "NSELECTIONLIST" "BUTTONPRESS" "_OCMDSET" "_TYPES" "_OHITVIS" "_OHITVIEWGROUP" "_PSUBHITLIST" "_STRVISUALTYPE" "_IDOPERATION" "_IDPARAMETER" "_DEFAULTCURSOR" "_SUBTYPE" "_STRTMPMSG" "_SKIPMACROHISTORY" "_TRANSMOTION" "_INTRANSMOTION" "_TRANSIENT" "_KEYTRANSIENT" "_DISABLE" "_VIEWMODE" "_UIEVENTMASK" "_OLDQUALITY" "_DRAQQUAL" "_NORMALIZEDZ") (inherits "IDLitComponent" "IDLitIMessaging") (link "objects_it91.html"))
+    ("IDLgrPrinter" (tags "IDLGRSRCDEST_TOP" "IDLGRSRCDESTVERSION" "CLIENTDIMENSIONS" "COLORMODEL" "SRCDESTFLAGS" "GRAPHICS_TREE" "NCOLORS" "PALETTE" "QUALITY" "RESOLUTION" "DIST" "FILL1" "DEV" "FILL2" "ATTRS" "FILL3" "CACHES" "FILL4" "IDLGRSRCDEST_BOTTOM" "IDLGRPRINTER_TOP" "IDLGRPRINTERVERSION" "PRINTERFLAGS" "NCOPIES" "UNITS" "GAMMA" "IDLGRPRINTER_BOTTOM") (inherits "IDLitComponent") (link "objects_gr138.html"))
+    ("IDLgrModel" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRCONTAINER_TOP" "IDLGRCONTAINERVERSION" "ISDYING" "IDLGRCONTAINER_BOTTOM" "IDLGRMODEL_TOP" "IDLGRMODELVERSION" "MODELFLAGS" "CLIP_PLANES" "DEPTH_TEST_DISABLE" "DEPTH_TEST_FUNCTION" "DEPTH_WRITE_DISABLE" "TRANSFORM" "IDLGRMODEL_BOTTOM") (inherits "IDLitComponent" "IDL_Container") (link "objects_gr79.html"))
+    ("IDLgrBuffer" (tags "IDLGRSRCDEST_TOP" "IDLGRSRCDESTVERSION" "CLIENTDIMENSIONS" "COLORMODEL" "SRCDESTFLAGS" "GRAPHICS_TREE" "NCOLORS" "PALETTE" "QUALITY" "RESOLUTION" "DIST" "FILL1" "DEV" "FILL2" "ATTRS" "FILL3" "CACHES" "FILL4" "IDLGRSRCDEST_BOTTOM" "IDLGRBUFFER_TOP" "IDLGRBUFFERVERSION" "UNITS" "DIMENSIONS" "IDLGRBUFFER_BOTTOM") (inherits "IDLitComponent") (link "objects_gr10.html"))
+    ("IDLitParameterSet" (tags "_PNAMES") (inherits "IDLitDataContainer") (link "objects_it159.html"))
+    ("IDLitDataContainer" (tags "_BISMESSAGER" "_CLASSNAME" "_OCHILDREN" "_IDISABLE" "_IUPDATES" "_BINSEARCH") (inherits "IDLitData" "IDL_Container") (link "objects_it59.html"))
+    ("IDLgrScene" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRCONTAINER_TOP" "IDLGRCONTAINERVERSION" "ISDYING" "IDLGRCONTAINER_BOTTOM" "IDLGRSCENE_TOP" "IDLGRSCENEVERSION" "COLOR" "TRANSPARENT" "IDLGRSCENE_BOTTOM") (inherits "IDLitComponent" "IDL_Container") (link "objects_gr165.html"))
+    ("IDLitUI" (tags "_MENUBARS" "_TOOLBARS" "_STATUSBAR" "_UISERVICES" "_PDISPATCHSUBJECT" "_PDISPATCHOBSERVER" "_OTOOL" "_IDISPATCH" "_WBASE") (inherits "IDLitContainer") (link "objects_it222.html"))
+    ("IDLgrViewgroup" (tags "IDLGRCOMPONENT_TOP" "IDLGRCOMPONENTVERSION" "HIDE" "PARENT" "IDLGRCOMPONENT_BOTTOM" "IDLGRCONTAINER_TOP" "IDLGRCONTAINERVERSION" "ISDYING" "IDLGRCONTAINER_BOTTOM" "IDLGRVIEWGROUP_TOP" "IDLGRVIEWGROUPVERSION" "IDLGRVIEWGROUP_BOTTOM") (inherits "IDLitComponent" "IDL_Container") (link "objects_gr208.html"))
+    ("IDLitDataOperation" (tags "_NAN" "_WITHINUI" "_RECORDPROPERTIES") (inherits "IDLitOperation") (link "objects_it69.html"))
+    ("IDLgrMPEG" (tags "IDLGRMPEG_TOP" "IDLGRMPEGVERSION" "DIMENSIONS" "FILENAME" "FORMAT" "FRAMERATE" "INTERLACED" "QUALITY" "SCALE" "STATISTICS" "DISPLAYDIMS" "FIRSTFRAME" "LASTFRAME" "MPEGID" "TEMPNODE" "TEMPNODEFILLER" "TEMP_DIRECTORY" "BITRATE" "IFRAME_GAP" "MOTION_LENGTH" "FLAGS" "IDLGRMPEG_BOTTOM") (link "objects_gr93.html"))
+    ("IDLitCommandSet" (inherits "IDLitCommand" "IDL_Container") (link "objects_it12.html"))
+    ("IDLitData" (tags "_ONOTIFIER" "_PDATA" "_PMETADATA" "_TYPE" "_AUTODELETE" "_NREF" "_PDESTRUCT" "_HIDE" "_READ_ONLY") (inherits "IDLitComponent") (link "objects_it44.html"))
+    ("IDLitOperation" (tags "_BEXPENSIVE" "_REVERSIBLE" "_BSHOWEXECUTIONUI" "_BSKIPHISTORY" "_BSKIPMACRO" "_BMACROSHOWUIIFNULLCMD" "_BMACROSUPPRESSREFRESH" "_TYPES") (inherits "IDLitComponent" "IDLitIMessaging") (link "objects_it134.html"))
+    ("IDLitContainer" (tags "_BISMESSAGER" "_CLASSNAME" "_OCHILDREN") (inherits "IDLitComponent" "IDL_Container") (link "objects_it33.html"))
+    ("IDLitWriter" (tags "_TYPES" "_BITDEPTH" "_GRAPHICSFORMAT" "_SCALEFACTOR") (inherits "IDLitReader") (link "objects_it311.html"))
+    ("IDLdbRecordset" (tags "IDLDBRECORDSET_TOP" "IDLDBRECORDSETVERSION" "ISTABLE" "PDBOBJ" "ISREADONLY" "NFIELDS" "CURROW" "SOURCE" "CURSORTYPE" "PFIELDS" "PSDEF" "ROWSTATUS" "ROWSET" "ROWPOS" "HSTMT" "HDBC" "IDLDBRECORDSET_BOTTOM") (link "api14.html"))
+    ("IDLdbDatabase" (tags "IDLDBDATABASE_TOP" "IDLDBDATABASEVERSION" "READONLY" "ISCONNECTED" "FETCHDIR" "POSOPS" "POSSTATEMENTS" "SCROLLCONCUR" "SCROLLOPTIONS" "STATICSENSE" "GETDATAEXT" "USINGCURSOR" "NSTATEMENTS" "P_RECOBJS" "HDBC" "IDLDBDATABASE_BOTTOM") (link "api6.html"))
+    ("IDLitCommand" (tags "_PDATADICTIONARY" "_SIZEITEMS" "_STRIDTARGET" "_STRIDOPERATION") (inherits "IDLitComponent") (link "objects_it3.html"))
+    ("IDLffLangCat" (tags "FILENAMES" "_AVAILABLE_FILES" "LANGUAGE" "DEFAULT_LANGUAGE" "APPLICATIONS" "APPLICATION_PATH" "KEYS" "N_KEYS" "STRINGS" "DEF_KEYS" "N_DEF_KEYS" "DEF_STRINGS" "AVAILABLE_LANGUAGES" "VERBOSE" "STRICT" "IDLFFLANGCATVERSION") (link "objects_ff44.html"))
+    ("IDLitReader" (tags "_STRFILENAME" "_PEXTENSIONS") (inherits "IDLitComponent" "IDLitIMessaging") (link "objects_it169.html"))
+    ("IDLanROI" (tags "IDLANROI_TOP" "IDLANROIVERSION" "IDLANROIFLAGS" "NALLOCVERTS" "NUSEDVERTS" "BLOCKSIZE" "DATA" "TYPE" "PRECISION" "PLANE" "ROI_XRANGE" "ROI_YRANGE" "ROI_ZRANGE" "IDLANROI_BOTTOM") (link "objects_an3.html"))
+    ("IDLgrPalette" (tags "IDLGRPALETTE_TOP" "IDLGRPALETTE_SERIALNUM" "IDLGRPALETTEVERSION" "GAMMA" "BOTTOMSTRETCH" "TOPSTRETCH" "NENTRIES" "ORIGLUT" "CURRLUT" "INVTABLE" "UVALUE" "NAME" "IDLGRPALETTE_BOTTOM") (link "objects_gr101.html"))
+    ("IDLanROIGroup" (tags "IDLANROIGROUP_TOP" "IDLANROIGROUPVERSION" "IDLANROIGROUPFLAGS" "ROIGROUP_XRANGE" "ROIGROUP_YRANGE" "ROIGROUP_ZRANGE" "IDLANROIGROUP_BOTTOM") (inherits "IDL_Container") (link "objects_an18.html"))
+    ("IDLffXMLDOMDocument" (tags "IDLFFXMLDOMDOCUMENT_TOP" "_DOM_IMPLEMENTATION" "_DOM_PARSER" "_DOM_ERROR_REPORTER" "_DOM_MEMORY_MANAGER" "IDLFFXMLDOMDOCUMENT_BOTTOM") (inherits "IDLffXMLDOMNode") (link "objects_ff102.html"))
+    ("IDLitComponent" (tags "IDLITCOMPONENT_TOP" "IDLITCOMPONENTVERSION" "DESCRIPTION" "NAME" "ICON" "IDENTIFIER" "HELP" "UVALUE" "_PARENT" "PROPERTYDESCRIPTORS" "_FLAGS" "IDLITCOMPONENT_BOTTOM") (link "objects_it17.html"))
+    ("IDLgrSymbol" (tags "IDLGRSYMBOL_TOP" "IDLGRSYMBOLVERSION" "COLOR" "DATA" "SIZE" "THICK" "FLAGS" "UVALUE" "NAME" "ALPHA_CHANNEL" "IDLGRSYMBOL_BOTTOM") (link "objects_gr180.html"))
+    ("IDLgrFont" (tags "IDLGRFONT_TOP" "IDLGRFONTVERSION" "FONTFLAGS" "HERSHEY" "NAME" "SIZE" "SUBSTITUTE" "THICK" "ID" "UVALUE" "IDLGRFONT_BOTTOM") (link "objects_gr52.html"))
+    ("IDLgrPattern" (tags "IDLGRPATTERN_TOP" "IDLGRPATTERNVERSION" "ORIENTATION" "PATTERN" "SPACING" "STYLE" "THICK" "UVALUE" "NAME" "IDLGRPATTERN_BOTTOM") (link "objects_gr111.html"))
+    ("IDLffDXF" (tags "IDLFFDXF_TOP" "IDLFFDXFVERSION" "DXFREADVALID" "DXFHANDLEVALID" "DXFLUT" "SERIAL" "DXFHANDLE" "DXFHANDLEFILLER" "IDLFFDXF_BOTTOM") (link "objects_ff21.html"))
+    ("IDLffShape" (tags "IDLFFSHAPE_TOP" "IDLFFSHAPEVERSION" "FILENAME" "ISOPEN" "SHPTYPE" "PATTRIBUTE" "SHAPEHANDLE" "DBFHANDLE" "IDLFFSHAPE_BOTTOM") (link "objects_ff59.html"))
+    ("IDLffXMLSAX" (tags "IDLFFXMLSAX_TOP" "IDLFFXMLSAXVERSION" "VALIDATION_MODE" "HALT_PROCESSING" "FILENAME" "_XML_PARSER" "_XML_LOCATOR" "IDLFFXMLSAX_BOTTOM") (link "objects_ff209.html"))
+    ("IDLffDICOM" (tags "IDLFFDICOM_TOP" "IDLFFDICOMVERSION" "DICOMFLAGS" "DICOMELEMENTS" "DICOMPREAMBLE" "DICOMHANDLE" "DICOMHANDLEFILLER" "IDLFFDICOM_BOTTOM") (link "objects_ff3.html"))
+    ("TrackBall" (tags "BTNDOWN" "AXIS" "CONSTRAIN" "MOUSE" "CENTER" "RADIUS" "PT0" "PT1") (link "objects_misc33.html"))
+    ("IDLgrTessellator" (tags "IDLGRTESSELLATOR_TOP" "IDLGRTESSELLATORVERSION" "ITESSFLAGS" "IVERTS" "HVIDLIST" "IAUXSIZE" "IAUXTYPE" "IDLGRTESSELLATOR_BOTTOM") (link "objects_gr186.html"))
+    ("IDLffXMLDOMNode" (inherits "IDLffXMLDOMDocumentType") (link "objects_ff162.html"))
+    ("IDLffXMLDOMDocumentType" (inherits "IDLffXMLDOMElement") (link "objects_ff123.html"))
+    ("IDLffXMLDOMNamedNodeMap" (tags "IDLFFXMLDOMNAMEDNODEMAP_TOP" "IDLFFXMLDOMNAMEDNODEMAPVERSION" "_IDLFFXMLDOMNAMEDNODEMAPNODE" "_IDLFFXMLDOMNAMEDNODEMAPOWNEDNODES" "_IDLFFXMLDOMNAMEDNODEMAPOWNER" "_IDLFFXMLDOMNAMEDNODEMAPDOCUMENT" "IDLFFXMLDOMNAMEDNODEMAP_BOTTOM") (link "objects_ff153.html"))
+    ("IDLffXMLDOMElement" (inherits "IDLffXMLDOMNotation") (link "objects_ff130.html"))
+    ("IDLffXMLDOMNotation" (inherits "IDLffXMLDOMEntity") (link "objects_ff190.html"))
+    ("IDLffXMLDOMEntity" (inherits "IDLffXMLDOMCharacterData") (link "objects_ff142.html"))
+    ("IDLffXMLDOMCharacterData" (inherits "IDLffXMLDOMProcessingInstruction") (link "objects_ff86.html"))
+    ("IDLffXMLDOMProcessingInstruction" (inherits "IDLffXMLDOMText") (link "objects_ff196.html"))
+    ("IDLffXMLDOMText" (inherits "IDLffXMLDOMAttr") (link "objects_ff203.html"))
+    ("IDLffXMLDOMAttr" (tags "IDLFFXMLDOMNODE_TOP" "IDLFFXMLDOMNODEVERSION" "_IDLFFXMLDOMNODEDOMNODE" "_IDLFFXMLDOMNODEOWNEDNODES" "_IDLFFXMLDOMNODEOWNER" "_IDLFFXMLDOMNODEDOCUMENT" "IDLFFXMLDOMNODE_BOTTOM") (link "objects_ff74.html"))
+    ("IDLffXMLDOMNodeList" (tags "IDLFFXMLDOMNODELIST_TOP" "IDLFFXMLDOMNODELISTVERSION" "_IDLFFXMLDOMNODELISTNODE" "_IDLFFXMLDOMNODELISTOWNEDNODES" "_IDLFFXMLDOMNODELISTOWNER" "_IDLFFXMLDOMNODELISTDOCUMENT" "IDLFFXMLDOMNODELIST_BOTTOM") (link "objects_ff184.html"))
+    ("IDL_Container" (tags "IDL_CONTAINER_TOP" "IDLCONTAINERVERSION" "PHEAD" "PTAIL" "NLIST" "IDL_CONTAINER_BOTTOM") (link "objects_misc3.html"))
+    ("IDLffJPEG2000" (tags "IDLFFJPEG2000_TOP" "CJPEG2000PTR" "IDLFFJPEG2000_BOTTOM") (link "objects_ff34.html"))
+    ("IDLitParameter" (tags "_OPARAMETERDESCRIPTORS" "_OPARAMETERSET" "_PPARAMNAMES") (link "objects_it145.html"))
+    ("IDL_Savefile" (tags "IDL_SAVEFILE_FILENAME" "IDL_SAVEFILE_RELAXED_STRUCTURE_ASSIGNMENT") (link "objects_misc13.html"))
+    ("IDLitIMessaging" (tags "__OTOOL") (link "objects_it78.html"))
+    ("IDLjavaObject" (link "objects_misc28.html"))
+    ("IDLcomIDispatch" (link "objects_misc23.html"))
+    ("IDLffMrSID" (link "objects_ff52.html"))))
+
+
+(setq idlwave-executive-commands-alist '(
+    ("GO" . "symbols6.html")
+    ("OUT" . "symbols7.html")
+    ("RETURN" . "symbols9.html")
+    ("TRACE" . "symbols15.html")
+    ("RUN" . "symbols11.html")
+    ("SKIP" . "symbols12.html")
+    ("COMPILE" . "symbols2.html")
+    ("CONTINUE" . "symbols3.html")
+    ("RESET_SESSION" . "symbols8.html")
+    ("STEP" . "symbols13.html")
+    ("RNEW" . "symbols10.html")
+    ("FULL_RESET_SESSION" . "symbols5.html")
+    ("EDIT" . "symbols4.html")
+    ("STEPOVER" . "symbols14.html")
+))
+
+;; Special words with associated help topic files
+(defconst idlwave-help-special-topic-words
+  '(
+    ("begin" . "B2.html")
+    ("case" . "C8.html")
+    ("endcase" . "C8.html")
+    ("of" . "C8.html")
+    ("common" . "C29.html")
+    ("compile_opt" . "C30.html")
+    ("continue" . "C39.html")
+    ("endfor" . "F31.html")
+    ("for" . "F31.html")
+    ("else" . "I6.html")
+    ("endelse" . "I6.html")
+    ("endif" . "I6.html")
+    ("if" . "I6.html")
+    ("then" . "I6.html")
+    ("end" . "P28.html")
+    ("pro" . "P28.html")
+    ("endrep" . "R41.html")
+    ("repeat" . "R41.html")
+    ("until" . "R41.html")
+    ("return" . "R48.html")
+    ("endswitch" . "S82.html")
+    ("switch" . "S82.html")
+    ("do" . "W8.html")
+    ("endwhile" . "W8.html")
+    ("while" . "W8.html")
+)
+  "Association list of help files for special context words.")
 
 (provide 'idlw-rinfo)
 (provide 'idlwave-rinfo)
 
-;;; arch-tag: d0b65da3-7f5e-4992-b8dd-885800b5cd6b
+;; arch-tag: d0b65da3-7f5e-4992-b8dd-885800b5cd6b
 ;;; idlw-rinfo.el ends here
--- a/lisp/progmodes/idlw-shell.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/progmodes/idlw-shell.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1,10 +1,11 @@
 ;; idlw-shell.el --- run IDL as an inferior process of Emacs.
-;; Copyright (c) 1999, 2000, 2001,2002 Free Software Foundation
-
-;; Author: Carsten Dominik <dominik@astro.uva.nl>
-;;         Chris Chase <chase@att.com>
+;; Copyright (c) 1999,2000,2001,2002,2003,2004 Free Software Foundation
+
+;; Authors: J.D. Smith <jdsmith@as.arizona.edu>
+;;          Carsten Dominik <dominik@astro.uva.nl>
+;;          Chris Chase <chase@att.com>
 ;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu>
-;; Version: 4.15
+;; Version: 5.5
 ;; Keywords: processes
 
 ;; This file is part of GNU Emacs.
@@ -44,7 +45,7 @@
 ;;
 ;; INSTALLATION:
 ;; =============
-;;
+;; 
 ;; Follow the instructions in the INSTALL file of the distribution.
 ;; In short, put this file on your load path and add the following
 ;; lines to your .emacs file:
@@ -57,9 +58,9 @@
 ;;
 ;;   The newest version of this file can be found on the maintainers
 ;;   web site.
-;;
+;; 
 ;;     http://idlwave.org
-;;
+;; 
 ;; DOCUMENTATION
 ;; =============
 ;;
@@ -76,7 +77,7 @@
 ;; it is a bug in XEmacs.
 ;; The Debug menu in source buffers *does* display the bindings correctly.
 ;;
-;;
+;; 
 ;; CUSTOMIZATION VARIABLES
 ;; =======================
 ;;
@@ -100,12 +101,12 @@
   (condition-case () (require 'custom) (error nil))
   (if (and (featurep 'custom)
 	   (fboundp 'custom-declare-variable)
-	   (fboundp 'defface))
+	   (fboundp 'defface))	   
       ;; We've got what we needed
       (setq idlwave-shell-have-new-custom t)
     ;; We have the old or no custom-library, hack around it!
     (defmacro defgroup (&rest args) nil)
-    (defmacro defcustom (var value doc &rest args)
+    (defmacro defcustom (var value doc &rest args) 
       `(defvar ,var ,value ,doc))))
 
 ;;; Customizations: idlwave-shell group
@@ -117,10 +118,10 @@
   :group 'idlwave)
 
 (defcustom idlwave-shell-prompt-pattern "^ ?IDL> "
-  "*Regexp to match IDL prompt at beginning of a line.
-For example, \"^IDL> \" or \"^WAVE> \".
-The \"^\" means beginning of line.
-This variable is used to initialise `comint-prompt-regexp' in the
+  "*Regexp to match IDL prompt at beginning of a line. 
+For example, \"^IDL> \" or \"^WAVE> \". 
+The \"^\" means beginning of line, and is required.
+This variable is used to initialize `comint-prompt-regexp' in the 
 process buffer.
 
 This is a fine thing to set in your `.emacs' file."
@@ -208,6 +209,24 @@
   :group 'idlwave-shell-general-setup
   :type 'boolean)
 
+(defcustom idlwave-shell-automatic-electric-debug 'breakpoint
+  "Enter the electric-debug minor mode automatically.  
+This occurs at a breakpoint or any other halt.  The mode is exited
+upon return to the main level.  Can be set to 'breakpoint to enter
+electric debug mode only when breakpoints are tripped."
+  :group 'idlwave-shell-general-setup
+  :type '(choice
+	  (const :tag "never" nil)
+	  (const :tag "always" t)
+	  (const :tag "for breakpoints only" breakpoint)))
+
+(defcustom idlwave-shell-electric-zap-to-file t
+  "When entering electric debug mode, select the window displaying the
+file at which point is stopped.  This takes point away from the shell
+window, but is useful for stepping, etc."
+  :group 'idlwave-shell-general-setup
+  :type 'boolean)
+
 ;; (defcustom idlwave-shell-debug-modifiers... See idlwave.el
 
 (defvar idlwave-shell-activate-alt-keybindings nil
@@ -247,13 +266,14 @@
 	  (integer :tag "x size")
 	  (integer :tag "y size")))
 
+
 ;; Commands Sent to Shell... etc.
 (defgroup idlwave-shell-command-setup nil
   "Setup for command parameters of the Shell interaction for IDLWAVE."
   :prefix "idlwave-shell"
   :group 'idlwave)
 
-(defcustom idlwave-shell-initial-commands "!more=0"
+(defcustom idlwave-shell-initial-commands "!more=0 & defsysv,'!ERROR_STATE',EXISTS=__e & if __e then begin & !ERROR_STATE.MSG_PREFIX=\"% \" & delvar,__e & endif"
   "Initial commands, separated by newlines, to send to IDL.
 This string is sent to the IDL process by `idlwave-shell-mode' which is
 invoked by `idlwave-shell'."
@@ -267,7 +287,7 @@
   :group 'idlwave-shell-command-setup
   :type 'boolean)
 
-(defcustom idlwave-shell-command-history-file "~/.idlwhist"
+(defcustom idlwave-shell-command-history-file "idlwhist"
   "The file in which the command history of the idlwave shell is saved.
 In order to change the size of the history, see the variable
 `comint-input-ring-size'.
@@ -275,23 +295,23 @@
 is non-nil."
   :group 'idlwave-shell-command-setup
   :type 'file)
-
+  
 (defcustom idlwave-shell-show-commands
   '(run misc breakpoint)
   "*A list of command types to show output from in the shell.
-Possibilities are 'run, 'debug, 'breakpoint, and 'misc .  Unlisted
-types are not displayed in the shell.  The single type 'everything
-causes all the copious shell traffic to be displayed."
+Possibilities are 'run, 'debug, 'breakpoint, and 'misc.  Unselected
+types are not displayed in the shell.  The type 'everything causes all
+the copious shell traffic to be displayed."
   :group 'idlwave-shell-command-setup
   :type '(choice
 	  (const everything)
 	  (set :tag "Checklist" :greedy t
-	       (const :tag "All .run and .compile commands"  run)
-	       (const :tag "All breakpoint commands"         breakpoint)
-	       (const :tag "All debug and stepping commands" debug)
-	       (const :tag "Return, close, etc. commands"    misc))))
-
-(defcustom idlwave-shell-examine-alist
+	       (const :tag "All .run and .compile commands"  	   run)  
+	       (const :tag "All breakpoint commands"         	   breakpoint)
+	       (const :tag "All debug and stepping commands" 	   debug)
+	       (const :tag "Close, window, retall, etc. commands"  misc))))
+
+(defcustom idlwave-shell-examine-alist 
   '(("Print"          	. "print,___")
     ("Help"           	. "help,___")
     ("Structure Help"  	. "help,___,/STRUCTURE")
@@ -302,14 +322,14 @@
     ("Ptr Valid"      	. "print,ptr_valid(___)")
     ("Widget Valid"     . "print,widget_info(___,/VALID)")
     ("Widget Geometry"  . "help,widget_info(___,/GEOMETRY)"))
-  "Alist of special examine commands for popup selection.
+  "Alist of special examine commands for popup selection.  
 The keys are used in the selection popup created by
 `idlwave-shell-examine-select', and the corresponding value is sent as
 a command to the shell, with special sequence `___' replaced by the
 expression being examined."
   :group 'idlwave-shell-command-setup
   :type '(repeat
-	  (cons
+	  (cons 
 	   (string :tag "Label  ")
 	   (string :tag "Command"))))
 
@@ -320,7 +340,7 @@
   "*Non-nil mean, put output of examine commands in their own buffer."
   :group 'idlwave-shell-command-setup
   :type 'boolean)
-
+  
 (defcustom idlwave-shell-comint-settings
   '((comint-scroll-to-bottom-on-input . t)
     (comint-scroll-to-bottom-on-output . t)
@@ -353,7 +373,7 @@
   '("^<onechar>$" "^<chars>$" "^</chars>$")
   "The three regular expressions which match the magic spells for input modes.
 
-When the first regexp matches in the output streem of IDL, IDLWAVE
+When the first regexp matches in the output stream of IDL, IDLWAVE
 prompts for a single character and sends it immediately to IDL, similar
 to the command \\[idlwave-shell-send-char].
 
@@ -383,14 +403,14 @@
   answer = GET_KBRD(1)
 
 Since the IDLWAVE shell defines the system variable `!IDLWAVE_VERSION',
-you could actually check if you are running under Emacs before printing
+you could actually check if you are running under Emacs before printing 
 the magic strings.  Here is a procedure which uses this.
 
 Usage:
 ======
 idlwave_char_input               ; Make IDLWAVE send one character
 idlwave_char_input,/on           ; Start the loop to send characters
-idlwave_char_input,/off          ; End the loop to send chracters
+idlwave_char_input,/off          ; End the loop to send characters
 
 
 pro idlwave_char_input,on=on,off=off
@@ -400,7 +420,7 @@
       if keyword_set(on) then         print,'<chars>' $
         else if keyword_set(off) then print,'</chars>' $
         else                          print,'<onechar>'
-  endif
+  endif 
 end"
   :group 'idlwave-shell-command-setup
   :type '(list
@@ -453,6 +473,25 @@
   :group 'idlwave-shell-highlighting-and-faces
   :type 'symbol)
 
+(defcustom idlwave-shell-electric-stop-color "Violet"
+  "*The color for the default face or overlay arrow when stopped."
+  :group 'idlwave-shell-highlighting-and-faces
+  :type 'string)
+
+(defcustom idlwave-shell-electric-stop-line-face 
+  (prog1
+      (copy-face 'modeline 'idlwave-shell-electric-stop-line-face)
+    (set-face-background 'idlwave-shell-electric-stop-line-face 
+			 idlwave-shell-electric-stop-color)
+    (condition-case nil
+	(set-face-foreground 'idlwave-shell-electric-stop-line-face nil)
+      (error nil)))
+  "*The face for `idlwave-shell-stop-line-overlay' when in electric debug mode.
+Allows you to choose the font, color and other properties for the line
+where IDL is stopped, when in Electric Debug Mode."
+  :group 'idlwave-shell-highlighting-and-faces
+  :type 'symbol)
+
 (defcustom idlwave-shell-mark-breakpoints t
   "*Non-nil means, mark breakpoints in the source files.
 Legal values are:
@@ -483,11 +522,30 @@
     (defface idlwave-shell-bp-face
       '((((class color)) (:foreground "Black" :background "Pink"))
 	(t (:underline t)))
-      "Face for highlighting lines-with-breakpoints."
+      "Face for highlighting lines with breakpoints."
       :group 'idlwave-shell-highlighting-and-faces)
   ;; Just copy the underline face to be on the safe side.
   (copy-face 'underline 'idlwave-shell-bp-face))
 
+(defcustom idlwave-shell-disabled-breakpoint-face 
+  'idlwave-shell-disabled-bp-face
+  "*The face for disabled breakpoint lines in the source code.
+Allows you to choose the font, color and other properties for
+lines which have a breakpoint.  See also `idlwave-shell-mark-breakpoints'."
+  :group 'idlwave-shell-highlighting-and-faces
+  :type 'symbol)
+
+(if idlwave-shell-have-new-custom
+    ;; We have the new customize - use it to define a customizable face
+    (defface idlwave-shell-disabled-bp-face
+      '((((class color)) (:foreground "Black" :background "gray"))
+	(t (:underline t)))
+      "Face for highlighting lines with breakpoints."
+      :group 'idlwave-shell-highlighting-and-faces)
+  ;; Just copy the underline face to be on the safe side.
+  (copy-face 'underline 'idlwave-shell-disabled-bp-face))
+
+
 (defcustom idlwave-shell-expression-face 'secondary-selection
   "*The face for `idlwave-shell-expression-overlay'.
 Allows you to choose the font, color and other properties for
@@ -508,6 +566,7 @@
 (defvar comint-last-input-start)
 (defvar comint-last-input-end)
 
+;; Other variables
 (defvar idlwave-shell-temp-pro-file nil
   "Absolute pathname for temporary IDL file for compiling regions")
 
@@ -519,20 +578,20 @@
 (defun idlwave-shell-temp-file (type)
   "Return a temp file, creating it if necessary.
 
-TYPE is either `pro' or `rinfo', and `idlwave-shell-temp-pro-file' or
+TYPE is either 'pro' or 'rinfo', and `idlwave-shell-temp-pro-file' or
 `idlwave-shell-temp-rinfo-save-file' is set (respectively)."
-  (cond
+  (cond 
    ((eq type 'rinfo)
-    (or idlwave-shell-temp-rinfo-save-file
-	(setq idlwave-shell-temp-rinfo-save-file
+    (or idlwave-shell-temp-rinfo-save-file 
+	(setq idlwave-shell-temp-rinfo-save-file 
 	      (idlwave-shell-make-temp-file idlwave-shell-temp-pro-prefix))))
    ((eq type 'pro)
     (or idlwave-shell-temp-pro-file
-	(setq idlwave-shell-temp-pro-file
+	(setq idlwave-shell-temp-pro-file 
 	      (idlwave-shell-make-temp-file idlwave-shell-temp-pro-prefix))))
-   (t (error "Wrong argument (idlwave-shell-temp-file): %s"
+   (t (error "Wrong argument (idlwave-shell-temp-file): %s" 
 	     (symbol-name type)))))
-
+    
 
 (defun idlwave-shell-make-temp-file (prefix)
   "Create a temporary file."
@@ -558,15 +617,17 @@
 	nil)
       file)))
 
+
 (defvar idlwave-shell-dirstack-query "cd,current=___cur & print,___cur"
-  "Command used by `idlwave-shell-resync-dirs' to query IDL for
+  "Command used by `idlwave-shell-resync-dirs' to query IDL for 
 the directory stack.")
 
-(defvar idlwave-shell-path-query "__pa=expand_path(!path,/array)&for i=0,n_elements(__pa)-1 do print,'PATH:<'+__pa[i]+'>'&print,'SYSDIR:<'+!dir+'>'"
-  "The command which gets !PATH and !DIR infor from the shell.")
+(defvar idlwave-shell-path-query "print,'PATH:<'+transpose(expand_path(!PATH,/ARRAY))+'>' & print,'SYSDIR:<'+!dir+'>'"
+
+  "The command which gets !PATH and !DIR info from the shell.")
 
 (defvar idlwave-shell-mode-line-info nil
-  "Additional info displayed in the mode line")
+  "Additional info displayed in the mode line")  
 
 (defvar idlwave-shell-default-directory nil
   "The default directory in the idlwave-shell buffer, of outside use.")
@@ -617,7 +678,7 @@
 	    window-system)                ; Window systems always
     (progn
       (setq idlwave-shell-stop-line-overlay (make-overlay 1 1))
-      (overlay-put idlwave-shell-stop-line-overlay
+      (overlay-put idlwave-shell-stop-line-overlay 
 		   'face idlwave-shell-stop-line-face))))
 
  (t
@@ -625,7 +686,7 @@
   (if window-system
       (progn
 	(setq idlwave-shell-stop-line-overlay (make-overlay 1 1))
-	(overlay-put idlwave-shell-stop-line-overlay
+	(overlay-put idlwave-shell-stop-line-overlay 
 		     'face idlwave-shell-stop-line-face)))))
 
 ;; Now the expression and output overlays
@@ -652,7 +713,11 @@
 
 (defvar idlwave-shell-hide-output nil
   "If non-nil the process output is not inserted into the output
-  buffer.")
+buffer.")
+
+(defvar idlwave-shell-show-if-error nil
+  "If non-nil the process output is inserted into the output buffer if
+it contains an error message, even if hide-output is non-nil.")
 
 (defvar idlwave-shell-accumulation nil
   "Accumulate last line of output.")
@@ -682,7 +747,7 @@
 
 ;;; The following are the types of messages we attempt to catch to
 ;;; resync our idea of where IDL execution currently is.
-;;;
+;;; 
 
 (defvar idlwave-shell-halt-frame nil
   "The frame associated with halt/breakpoint messages.")
@@ -694,26 +759,25 @@
   "The frame associated with trace messages.")
 
 (defconst idlwave-shell-halt-messages
-  '("^% Execution halted at"
-    "^% Interrupted at:"
+  '("^% Interrupted at:"
     "^% Stepped to:"
-    "^% At "
+    "^% Skipped to:"
     "^% Stop encountered:"
     )
   "*A list of regular expressions matching IDL messages.
 These are the messages containing file and line information where
 IDL is currently stopped.")
 
+
 (defconst idlwave-shell-halt-messages-re
   (mapconcat 'identity idlwave-shell-halt-messages "\\|")
   "The regular expression computed from idlwave-shell-halt-messages")
 
-(defconst idlwave-shell-trace-messages
-  '("^% At "    ;; First line of a trace message
-    )
-  "*A list of regular expressions matching IDL trace messages.
-These are the messages containing file and line information where
-IDL will begin looking for the next statement to execute.")
+(defconst idlwave-shell-trace-message-re
+  "^% At "    ;; First line of a trace message
+  "*A regular expression matching IDL trace messages.  These are the
+messages containing file and line information of a current
+traceback.")
 
 (defconst idlwave-shell-step-messages
   '("^% Stepped to:"
@@ -725,6 +789,43 @@
 (defvar idlwave-shell-break-message "^% Breakpoint at:"
   "*Regular expression matching an IDL breakpoint message line.")
 
+(defconst idlwave-shell-electric-debug-help
+  "   ==> IDLWAVE Electric Debug Mode Help <==
+ 
+ Break Point Setting and Clearing:
+  b   	     Set breakpoint ([C-u b] for conditional, [C-n b] nth hit, etc.).
+  d   	     Clear nearby breakpoint.
+  a          Clear all breakpoints.
+  i   	     Set breakpoint in routine named here.
+  j          Set breakpoint at beginning of containing routine.
+  \\          Toggle breakpoint disable
+  ]          Go to next breakpoint in file.
+  [          Go to previous breakpoint in file.
+
+ Stepping, Continuing, and the Stack:
+  s or SPACE Step, into function calls.
+  n   	     Step, over function calls.
+  k   	     Skip one statement.
+  m   	     Continue to end of function.
+  o   	     Continue past end of function.
+  u   	     Continue to end of block.
+  h   	     Continue to line at cursor position.
+  r   	     Continue execution to next breakpoint, if any.
+  + or =     Show higher level in calling stack.
+  - or _     Show lower level in calling stack.
+
+ Examining Expressions (with prefix for examining the region):
+  p   	     Print expression near point or in region ([C-u p]).
+  ?          Help on expression near point or in region ([C-u ?]).
+  x          Examine expression near point or in region ([C-u x]) with 
+             letter completion of the examine type.
+
+ Miscellaneous:
+  q   	     Quit - end debugging session and return to the Shell's main level.
+  v   	     Turn Electric Debugging Mode off (C-c C-d C-v to return).
+  t   	     Print a calling-level traceback in the shell.
+  z   	     Reset IDL.
+  C-?        Show this help menu.")
 
 (defvar idlwave-shell-bp-alist)
 ;(defvar idlwave-shell-post-command-output)
@@ -768,18 +869,18 @@
    `\\[idlwave-routine-info]' displays information about an IDL routine near point,
    just like in `idlwave-mode'.  The module used is the one at point or
    the one whose argument list is being edited.
-   To update IDLWAVE's knowledge about compiled or edited modules, use
+   To update IDLWAVE's knowledge about compiled or edited modules, use 
    \\[idlwave-update-routine-info].
    \\[idlwave-find-module] find the source of a module.
    \\[idlwave-resolve] tells IDL to compile an unresolved module.
    \\[idlwave-context-help] shows the online help on the item at
    point, if online help has been installed.
-
+  
 
 4. Debugging
    ---------
    A complete set of commands for compiling and debugging IDL programs
-   is available from the menu.  Also keybindings starting with a
+   is available from the menu.  Also keybindings starting with a 
    `C-c C-d' prefix are available for most commands in the *idl* buffer
    and also in source buffers.  The best place to learn about the
    keybindings is again the menu.
@@ -794,12 +895,24 @@
    \\[idlwave-shell-resync-dirs] queries IDL in order to change Emacs current directory
    to correspond to the IDL process current directory.
 
-5. Hooks
+5. Expression Examination
+   ----------------------
+
+   Expressions near point can be examined with print,
+   \\[idlwave-shell-print] or \\[idlwave-shell-mouse-print] with the
+   mouse, help, \\[idlwave-shell-help-expression] or
+   \\[idlwave-shell-mouse-help] with the mouse, or with a
+   configureable set of custom examine commands using
+   \\[idlwave-shell-examine-select].  The mouse examine commands can
+   also work by click and drag, to select an expression for
+   examination.
+
+6. Hooks
    -----
    Turning on `idlwave-shell-mode' runs `comint-mode-hook' and
    `idlwave-shell-mode-hook' (in that order).
 
-6. Documentation and Customization
+7. Documentation and Customization
    -------------------------------
    Info documentation for this package is available.  Use \\[idlwave-info]
    to display (complain to your sysadmin if that does not work).
@@ -807,15 +920,22 @@
    homepage at `http://idlwave.org'.
    IDLWAVE has customize support - see the group `idlwave'.
 
-7. Keybindings
+8. Keybindings
    -----------
 \\{idlwave-shell-mode-map}"
 
   (interactive)
+  (idlwave-setup) ; Make sure config files and paths, etc. are available.
+  (unless (file-name-absolute-p idlwave-shell-command-history-file)
+    (setq idlwave-shell-command-history-file
+	  (expand-file-name idlwave-shell-command-history-file
+			    idlwave-config-directory)))
+
   ;; We don't do `kill-all-local-variables' here, because this is done by
-  ;; comint - idlwave-shell-mode only add on top of that.
+  ;; comint
   (setq comint-prompt-regexp idlwave-shell-prompt-pattern)
   (setq comint-process-echoes t)
+
   ;; Can not use history expansion because "!" is used for system variables.
   (setq comint-input-autoexpand nil)
 ;  (setq comint-input-ring-size 64)
@@ -851,6 +971,10 @@
         idlwave-shell-step-frame nil)
   (idlwave-shell-display-line nil)
   (setq idlwave-shell-calling-stack-index 0)
+  (setq idlwave-shell-only-prompt-pattern
+	(concat "\\`[ \t\n]*" 
+		(substring idlwave-shell-prompt-pattern 1) 
+		"[ \t\n]*\\'"))
 
   (when idlwave-shell-query-for-class
       (add-to-list (make-local-variable 'idlwave-determine-class-special)
@@ -884,6 +1008,29 @@
       (while (setq entry (pop list))
 	(set (make-local-variable (car entry)) (cdr entry)))))
 
+  
+  (unless (memq 'comint-carriage-motion 
+		(default-value 'comint-output-filter-functions))
+    ;; Strip those pesky ctrl-m's.
+    (add-hook 'comint-output-filter-functions
+	      (lambda (string)
+		(when (string-match "\r" string)
+		  (let ((pmark (process-mark (get-buffer-process 
+					      (current-buffer)))))
+		    (save-excursion
+		      ;; bare CR -> delete preceding line
+		      (goto-char comint-last-output-start)
+		      (while (search-forward "\r" pmark t)
+			(delete-region (point) (line-beginning-position)))))))
+		'append 'local)
+    (add-hook 'comint-output-filter-functions 'comint-strip-ctrl-m nil 'local))
+
+  ;; Python-mode, bundled with many Emacs installs, quite cavalierly
+  ;; adds this function to the global default hook.  It interferes
+  ;; with overlay-arrows.
+  (remove-hook 'comint-output-filter-functions 'py-pdbtrack-track-stack-file)
+
+
   ;; IDLWAVE syntax, and turn on abbreviations
   (setq local-abbrev-table idlwave-mode-abbrev-table)
   (set-syntax-table idlwave-mode-syntax-table)
@@ -902,26 +1049,51 @@
     (if (file-regular-p idlwave-shell-command-history-file)
 	(comint-read-input-ring)))
 
+  ;; Turn off the non-debug toolbar buttons (open,save,etc.)
+  (set (make-local-variable 'tool-bar-map) nil)
+
   ;; Run the hooks.
   (run-hooks 'idlwave-shell-mode-hook)
   (idlwave-shell-send-command idlwave-shell-initial-commands nil 'hide)
-  ;; Define a system variable which knows the version of IDLWAVE
-  (idlwave-shell-send-command
-   (format "defsysv,'!idlwave_version','%s',1" idlwave-mode-version)
+  ;; Turn off IDL's ^d interpreting, and define a system
+  ;; variable which knows the version of IDLWAVE
+  (idlwave-shell-send-command 
+   (format "defsysv,'!idlwave_version','%s',1" 
+	   idlwave-mode-version)
    nil 'hide)
+  ;; Get the paths if they weren't read in from file
   (if (and (not idlwave-path-alist)
-	   (not idlwave-sys-dir))
+	   (or (not (stringp idlwave-system-directory))
+	       (eq (length idlwave-system-directory) 0)))
       (idlwave-shell-send-command idlwave-shell-path-query
 				  'idlwave-shell-get-path-info
 				  'hide)))
 
-(defun idlwave-shell-get-path-info ()
+(defun idlwave-shell-get-path-info (&optional no-write)
+  "Get the path lists, writing to file unless NO-WRITE is set."
   (let* ((rpl (idlwave-shell-path-filter))
 	 (sysdir (car rpl))
-	 (dirs (cdr rpl)))
-    (setq idlwave-sys-dir sysdir)
-    (setq idlwave-path-alist (mapcar (lambda(x) (cons x nil))
-				     dirs))))
+	 (dirs (cdr rpl))
+	 (old-path-alist idlwave-path-alist))
+    (when sysdir
+      (setq idlwave-system-directory sysdir)
+      (put 'idlwave-system-directory 'from-shell t))
+    ;; Preserve any existing flags
+    (setq idlwave-path-alist 
+	  (mapcar (lambda (x)
+		    (let ((old-entry (assoc x old-path-alist)))
+		      (if old-entry
+			  (cons x (cdr old-entry))
+			(list x))))
+		  dirs))
+    (put 'idlwave-path-alist 'from-shell t)
+    (if idlwave-path-alist 
+	(if (and idlwave-auto-write-paths
+		 (not idlwave-library-path)
+		 (not no-write) )
+	    (idlwave-write-paths))
+      ;; Fall back
+      (setq idlwave-path-alist old-path-alist))))
 
 (if (not (fboundp 'idl-shell))
     (fset 'idl-shell 'idlwave-shell))
@@ -951,8 +1123,8 @@
 			 (frame (selected-frame)))
 		     (catch 'exit
 		       (while flist
-			 (if (not (eq (car flist)
-				      idlwave-shell-idl-wframe))
+			 (if (not (eq (car flist) 
+				      idlwave-shell-idl-wframe)) 
 			     (throw 'exit (car flist))
 			   (setq flist (cdr flist))))))
 		   (make-frame))
@@ -970,9 +1142,9 @@
 	    ;; We do not have a source frame, so we use this one.
 	    (setq idlwave-shell-display-wframe (selected-frame)))
 	;; Return a new frame
-	(setq idlwave-shell-idl-wframe
+	(setq idlwave-shell-idl-wframe 
 	      (make-frame idlwave-shell-frame-parameters)))))
-
+  
 ;;;###autoload
 (defun idlwave-shell (&optional arg quick)
   "Run an inferior IDL, with I/O through buffer `(idlwave-shell-buffer)'.
@@ -999,14 +1171,14 @@
 	  (delete-other-windows))
 	(and idlwave-shell-use-dedicated-frame
 	     (setq idlwave-shell-idl-wframe (selected-frame)))
-	(add-hook 'idlwave-shell-sentinel-hook
+	(add-hook 'idlwave-shell-sentinel-hook 
 		  'save-buffers-kill-emacs t))
 
     ;; A non-nil arg means, we want a dedicated frame.  This will last
     ;; for the current editing session.
     (if arg (setq idlwave-shell-use-dedicated-frame t))
     (if (equal arg '(16)) (setq idlwave-shell-use-dedicated-frame nil))
-
+    
     ;; Check if the process still exists.  If not, create it.
     (unless (comint-check-proc (idlwave-shell-buffer))
       (let* ((prg (or idlwave-shell-explicit-file-name "idl"))
@@ -1031,8 +1203,16 @@
       (if idlwave-shell-ready
 	  (raise-frame (window-frame window)))
       (if (eq (selected-frame) (window-frame window))
-	  (select-window window))
-      )))
+	  (select-window window))))
+  ;; Save the paths at the end
+  (add-hook 'idlwave-shell-sentinel-hook 
+	    (lambda ()
+	      (if (and 
+		   idlwave-auto-write-paths
+		   idlwave-path-alist
+		   (not idlwave-library-path)
+		   (get 'idlwave-path-alist 'from-shell))
+		  (idlwave-write-paths)))))
 
 (defun idlwave-shell-recenter-shell-window (&optional arg)
   "Run `idlwave-shell', but make sure the current window stays selected."
@@ -1041,34 +1221,56 @@
     (idlwave-shell arg)
     (select-window window)))
 
-(defun idlwave-shell-hide-p (type)
+(defun idlwave-shell-hide-p (type &optional list)
   "Whether to hide this type of command.
 Return either nil or 'hide."
+  (let ((list (or list idlwave-shell-show-commands)))
+    (if (listp list)
+      (if (not (memq type list)) 'hide))))
+
+(defun idlwave-shell-add-or-remove-show (type)
+  "Add or remove a show command from the list."
   (if (listp idlwave-shell-show-commands)
-      (if (not (memq type idlwave-shell-show-commands)) 'hide)))
-
-(defun idlwave-shell-send-command (&optional cmd pcmd hide preempt)
+      (setq idlwave-shell-show-commands
+	    (if (memq type idlwave-shell-show-commands)
+		(delq type idlwave-shell-show-commands)
+	      (add-to-list'idlwave-shell-show-commands type)))
+    (setq idlwave-shell-show-commands (list type))))
+
+
+(defun idlwave-shell-send-command (&optional cmd pcmd hide preempt 
+					     show-if-error)
   "Send a command to IDL process.
 
-\(CMD PCMD HIDE\) are placed at the end of
-` idlwave-shell-pending-commands'.  If IDL is ready the first command,
+\(CMD PCMD HIDE\) are placed at the end of `
+idlwave-shell-pending-commands'.  If IDL is ready the first command,
 CMD, in `idlwave-shell-pending-commands' is sent to the IDL process.
+
 If optional second argument PCMD is non-nil it will be placed on
-`idlwave-shell-post-command-hook' when CMD is executed.  If the
-optional third argument HIDE is non-nil, then hide output from CMD.
+`idlwave-shell-post-command-hook' when CMD is executed.
+
+If the optional third argument HIDE is non-nil, then hide output from
+CMD, unless it is the symbol 'mostly, in which case only output
+beginning with \"%\" is hidden, and all other output (i.e., the
+results of a PRINT command), is shown.  This helps with, e.g.,
+stepping through code with output.
+
 If optional fourth argument PREEMPT is non-nil CMD is put at front of
 `idlwave-shell-pending-commands'.  If PREEMPT is 'wait, wait for all
 output to complete and the next prompt to arrive before returning
 \(useful if you need an answer now\). IDL is considered ready if the
-prompt is present and if `idlwave-shell-ready' is non-nil."
+prompt is present and if `idlwave-shell-ready' is non-nil.  
+
+If SHOW-IF-ERROR is non-nil, show the output it it contains an error
+message, independent of what HIDE is set to."
 
 ;  (setq hide nil)  ;  FIXME: turn this on for debugging only
-;  (if (null cmd)
+;  (if (null cmd) 
 ;      (progn
-;	(message "SENDING Pending commands: %s"
+;	(message "SENDING Pending commands: %s" 
 ;		 (prin1-to-string idlwave-shell-pending-commands)))
 ;    (message "SENDING %s|||%s" cmd pcmd))
-  (if (and (symbolp idlwave-shell-show-commands)
+  (if (and (symbolp idlwave-shell-show-commands) 
 	   (eq idlwave-shell-show-commands 'everything))
       (setq hide nil))
   (let ((save-buffer (current-buffer))
@@ -1093,11 +1295,11 @@
 	  (setq idlwave-shell-pending-commands
 		(if preempt
 		    ;; Put at front.
-		    (append (list (list cmd pcmd hide))
+		    (append (list (list cmd pcmd hide show-if-error))
 			    idlwave-shell-pending-commands)
 		  ;; Put at end.
-		  (append idlwave-shell-pending-commands
-			  (list (list cmd pcmd hide))))))
+		  (append idlwave-shell-pending-commands 
+			  (list (list cmd pcmd hide show-if-error))))))
       ;; Check if IDL ready
       (let ((save-point (point-marker)))
 	(goto-char (process-mark proc))
@@ -1112,7 +1314,8 @@
 	    (let* ((lcmd (car idlwave-shell-pending-commands))
 		   (cmd (car lcmd))
 		   (pcmd (nth 1 lcmd))
-		   (hide (nth 2 lcmd)))
+		   (hide (nth 2 lcmd))
+		   (show-if-error (nth 3 lcmd)))
 	      ;; If this is an executive command, reset the stack pointer
 	      (if (eq (string-to-char cmd) ?.)
 		  (setq idlwave-shell-calling-stack-index 0))
@@ -1120,6 +1323,8 @@
 	      (setq idlwave-shell-post-command-hook pcmd)
 	      ;; Output hiding
 	      (setq idlwave-shell-hide-output hide)
+	      ;;Showing errors
+	      (setq idlwave-shell-show-if-error show-if-error)
 	      ;; Pop command
 	      (setq idlwave-shell-pending-commands
 		    (cdr idlwave-shell-pending-commands))
@@ -1142,7 +1347,7 @@
     (if (or (not (setq buf (get-buffer (idlwave-shell-buffer))))
 	    (not (setq proc (get-buffer-process buf))))
 	(funcall errf "Shell is not running"))
-    (if (equal c ?\C-g)
+    (if (equal c ?\C-g)	
 	(funcall errf "Abort")
       (comint-send-string proc (char-to-string c)))))
 
@@ -1183,7 +1388,7 @@
     (if idlwave-shell-ready
 	(funcall errf "No IDL program seems to be waiting for input"))
 
-    ;; OK, start the loop
+    ;; OK, start the loop 
     (message "Character mode on:  Sending single chars (`C-g' to exit)")
     (message
      (catch 'exit
@@ -1224,8 +1429,9 @@
     (if (and idlwave-shell-arrows-do-history
 	     (>= (1+ (save-excursion (end-of-line) (point))) proc-pos))
 	(progn
-	  (goto-char proc-pos)
-	  (and (not (eolp)) (kill-line nil))
+	  ;;(goto-char proc-pos)
+	  (goto-char (point-max))
+	  ;;(and (not (eolp)) (kill-line nil))
 	  (comint-previous-input arg))
       (previous-line arg))))
 
@@ -1252,44 +1458,46 @@
   "Return t if the shell process is running."
   (eq (process-status idlwave-shell-process-name) 'run))
 
+(defvar idlwave-shell-only-prompt-pattern nil)
+(defun idlwave-shell-filter-hidden-output (output)
+  "Filter hidden output, leaving the good stuff.
+
+Remove everything to the first newline, and all lines with % in front
+of them, with optional follow-on lines starting with two spaces.  This
+works well enough, since any print output typically arrives before
+error messages, etc."
+  (setq output (substring output (string-match "\n" output)))
+  (while (string-match "\\(\n\\|\\`\\)%.*\\(\n  .*\\)*" output)
+    (setq output (replace-match "" nil t output)))
+  (unless 
+      (string-match idlwave-shell-only-prompt-pattern output)
+    output))
+
 (defvar idlwave-shell-hidden-output-buffer " *idlwave-shell-hidden-output*"
   "Buffer containing hidden output from IDL commands.")
-
+  
 (defun idlwave-shell-filter (proc string)
-  "Replace Carriage returns in output. Watch for prompt.
+  "Watch for IDL prompt and filter incoming text.
 When the IDL prompt is received executes `idlwave-shell-post-command-hook'
 and then calls `idlwave-shell-send-command' for any pending commands."
   ;; We no longer do the cleanup here - this is done by the process sentinel
   (when (eq (process-status idlwave-shell-process-name) 'run)
     ;; OK, process is still running, so we can use it.
-    (let ((data (match-data)) p)
+    (let ((data (match-data)) p full-output)
       (unwind-protect
           (progn
-            ;; May change the original match data.
-	    (while (setq p (string-match "\C-M" string))
-	      (aset string p ?\  ))
-
-            ;;
-            ;; Keep output
-
-; Should not keep output because the concat is costly.  If hidden put
-; the output in a hide-buffer.  Then when the output is needed in post
-; processing can access either the hide buffer or the idlwave-shell
-; buffer.  Then watching for the prompt is easier.  Furthermore, if it
-; is hidden and there is no post command, could throw away output.
-;           (setq idlwave-shell-command-output
-;                 (concat idlwave-shell-command-output string))
-            ;; Insert the string. Do this before getting the
-            ;; state.
+	    ;; Ring the bell if necessary
 	    (while (setq p (string-match "\C-G" string))
 	      (ding)
 	      (aset string p ?\C-j ))
             (if idlwave-shell-hide-output
-                (save-excursion
-                  (set-buffer
-                   (get-buffer-create idlwave-shell-hidden-output-buffer))
-                  (goto-char (point-max))
-                  (insert string))
+		(save-excursion
+		  (while (setq p (string-match "\C-M" string))
+		    (aset string p ?\  ))
+		  (set-buffer
+		   (get-buffer-create idlwave-shell-hidden-output-buffer))
+		  (goto-char (point-max))
+		  (insert string))
 	      (idlwave-shell-comint-filter proc string))
             ;; Watch for magic - need to accumulate the current line
             ;; since it may not be sent all at once.
@@ -1299,39 +1507,35 @@
 		      (idlwave-shell-input-mode-magic
 		       (concat idlwave-shell-accumulation string)))
 		  (setq idlwave-shell-accumulation
-			(substring string
-				   (progn (string-match "\\(.*\n\\)*" string)
+			(substring string 
+				   (progn (string-match "\\(.*[\n\r]+\\)*" 
+							string)
 					  (match-end 0)))))
               (setq idlwave-shell-accumulation
                     (concat idlwave-shell-accumulation string)))
-
-
+	    
+	    
 ;;; Test/Debug code
-;	     (save-excursion (set-buffer
-;			      (get-buffer-create "*idlwave-shell-output*"))
-;			     (goto-char (point-max))
-;			     (insert "\nSTRING===>\n" string "\n<====\n"))
-
+;	      (save-excursion (set-buffer
+;			       (get-buffer-create "*idlwave-shell-output*"))
+;			      (goto-char (point-max))
+;			      (insert "\nSTRING===>\n" string "\n<====\n"))
+	    
 	    ;; Check for prompt in current accumulating output
 	    (if (setq idlwave-shell-ready
 		      (string-match idlwave-shell-prompt-pattern
 				    idlwave-shell-accumulation))
 		(progn
+		  ;; Gather the command output
 		  (if idlwave-shell-hide-output
 		      (save-excursion
 			(set-buffer idlwave-shell-hidden-output-buffer)
+			(setq full-output (buffer-string))
 			(goto-char (point-max))
 			(re-search-backward idlwave-shell-prompt-pattern nil t)
 			(goto-char (match-end 0))
 			(setq idlwave-shell-command-output
 			      (buffer-substring (point-min) (point)))
-
-;;; Test/Debug
-;			 (save-excursion (set-buffer
-;					  (get-buffer-create "*idlwave-shell-output*"))
-;					 (goto-char (point-max))
-;					 (insert "\nOUPUT===>\n" idlwave-shell-command-output "\n<===\n"))
-
 			(delete-region (point-min) (point)))
                     (setq idlwave-shell-command-output
 			  (with-current-buffer (process-buffer proc)
@@ -1342,22 +1546,42 @@
 			       (point))
 			     comint-last-input-end))))
 
-                  ;; Scan for state and do post command - bracket them
-                  ;; with idlwave-shell-ready=nil since they
-                  ;; may call idlwave-shell-send-command.
+                  ;; Scan for state and do post commands - bracket
+                  ;; them with idlwave-shell-ready=nil since they may
+                  ;; call idlwave-shell-send-command themselves.
                   (let ((idlwave-shell-ready nil))
-                    (idlwave-shell-scan-for-state)
-                    ;; Unset idlwave-shell-ready to prevent sending
-                    ;; commands to IDL while running hook.
+		    (idlwave-shell-scan-for-state)
+		    ;; Show the output in the shell if it contains an error
+		    (if idlwave-shell-hide-output
+			(if (and idlwave-shell-show-if-error
+				 (eq idlwave-shell-current-state 'error))
+			    (idlwave-shell-comint-filter proc full-output)
+			  ;; If it's only *mostly* hidden, filter % lines, 
+			  ;; and show anything that remains
+			  (if (eq idlwave-shell-hide-output 'mostly)
+			      (let ((filtered
+				     (idlwave-shell-filter-hidden-output 
+				      full-output)))
+				(if filtered 
+				    (idlwave-shell-comint-filter 
+				     proc filtered))))))
+		    
+		    ;; Call the post-command hook
                     (if (listp idlwave-shell-post-command-hook)
-                        (eval idlwave-shell-post-command-hook)
+                        (progn
+			  ;(message "Calling list")
+			  ;(prin1 idlwave-shell-post-command-hook)
+			  (eval idlwave-shell-post-command-hook))
+		      ;(message "Calling command function")
                       (funcall idlwave-shell-post-command-hook))
-                    ;; Reset to default state for next command.
+
+		    ;; Reset to default state for next command.
                     ;; Also we do not want to find this prompt again.
                     (setq idlwave-shell-accumulation nil
                           idlwave-shell-command-output nil
                           idlwave-shell-post-command-hook nil
                           idlwave-shell-hide-output nil
+			  idlwave-shell-show-if-error nil
 			  idlwave-shell-wait-for-output nil))
                   ;; Done with post command. Do pending command if
                   ;; any.
@@ -1369,7 +1593,7 @@
 ;				 (get-buffer-create "*idlwave-shell-output*"))
 ;				(goto-char (point-max))
 ;				(insert "\n<=== WAITING ON OUTPUT ==>\n"))
-		  (accept-process-output proc nil 100))))
+		  (accept-process-output proc 1))))
         (store-match-data data)))))
 
 (defun idlwave-shell-sentinel (process event)
@@ -1386,7 +1610,7 @@
 	    (condition-case nil
 		(comint-write-input-ring)
 	      (error nil)))))
-
+	    
     (when (and (> (length (frame-list)) 1)
 	       (frame-live-p idlwave-shell-idl-wframe))
       (delete-frame idlwave-shell-idl-wframe)
@@ -1403,68 +1627,99 @@
 	  (run-hooks 'idlwave-shell-sentinel-hook))
       (run-hooks 'idlwave-shell-sentinel-hook))))
 
+(defvar idlwave-shell-current-state nil)
 (defun idlwave-shell-scan-for-state ()
-  "Scan for state info.
-Looks for messages in output from last IDL command indicating where
-IDL has stopped. The types of messages we are interested in are
-execution halted, stepped, breakpoint, interrupted at and trace
-messages.  We ignore error messages otherwise.
-For breakpoint messages process any attached count or command
-parameters.
-Update the windows if a message is found."
-  (cond
-   ;; Make sure we have output
-   ((not idlwave-shell-command-output))
-
-   ;; First Priority: Syntax and other errors
-   ((or
-     (string-match idlwave-shell-syntax-error idlwave-shell-command-output)
-     (string-match idlwave-shell-other-error idlwave-shell-command-output))
-    (save-excursion
-      (set-buffer
-       (get-buffer-create idlwave-shell-error-buffer))
-      (erase-buffer)
-      (insert idlwave-shell-command-output)
-      (goto-char (point-min))
-      (setq idlwave-shell-error-last (point)))
-    (idlwave-shell-goto-next-error))
-
-   ;; Second Priority: Various types of HALT messages.
-   ((string-match idlwave-shell-halt-messages-re
-		  idlwave-shell-command-output)
-    ;; Grab the file and line state info.
-    (setq idlwave-shell-calling-stack-index 0)
-    (setq idlwave-shell-halt-frame
-	  (idlwave-shell-parse-line
-	   (substring idlwave-shell-command-output (match-end 0))))
-    (idlwave-shell-display-line (idlwave-shell-pc-frame)))
-
-   ;; Last Priority: Breakpoints
-   ((string-match idlwave-shell-break-message
-		  idlwave-shell-command-output)
-    (setq idlwave-shell-calling-stack-index 0)
-    (setq idlwave-shell-halt-frame
-	  (idlwave-shell-parse-line
-	   (substring idlwave-shell-command-output (match-end 0))))
-    ;; We used to count hits on breakpoints
-    ;; this is no longer supported since IDL breakpoints
-    ;; have learned counting.
-    ;; Do breakpoint command processing
-    (let ((bp (assoc
-	       (list
-		(nth 0 idlwave-shell-halt-frame)
-		(nth 1 idlwave-shell-halt-frame))
-	       idlwave-shell-bp-alist)))
-      (if bp
-	  (let ((cmd (idlwave-shell-bp-get bp 'cmd)))
-	    (if cmd
-		;; Execute command
-		(if (listp cmd) (eval cmd) (funcall cmd))))
-	;; A breakpoint that we did not know about - perhaps it was
-	;; set by the user or IDL isn't reporting breakpoints like
-	;; we expect.  Lets update our list.
-	(idlwave-shell-bp-query)))
-    (idlwave-shell-display-line (idlwave-shell-pc-frame)))))
+  "Scan for state info.  Looks for messages in output from last IDL
+command indicating where IDL has stopped. The types of messages we are
+interested in are execution halted, stepped, breakpoint, interrupted
+at and trace messages.  For breakpoint messages process any attached
+count or command parameters.  Update the stop line if a message is
+found.  The variable `idlwave-shell-current-state' is set to 'error,
+'halt, or 'breakpoint, which describes the status, or nil for none of
+the above."
+  (let (trace)
+    (cond
+     ;; Make sure we have output
+     ((not idlwave-shell-command-output))
+     
+     ;; First Priority: Syntax and other errors
+     ((or 
+       (string-match idlwave-shell-syntax-error
+		     idlwave-shell-command-output)
+       (string-match idlwave-shell-other-error
+		     idlwave-shell-command-output))
+      (save-excursion
+	(set-buffer
+	 (get-buffer-create idlwave-shell-error-buffer))
+	(erase-buffer)
+	(insert idlwave-shell-command-output)
+	(goto-char (point-min))
+	(setq idlwave-shell-error-last (point)))
+      (setq idlwave-shell-current-state 'error)
+      (idlwave-shell-goto-next-error))
+   
+     ;; Second Priority: Halting errors
+     ((string-match idlwave-shell-halting-error
+		    idlwave-shell-command-output)
+      ;; Grab the file and line state info.
+      (setq idlwave-shell-calling-stack-index 0)
+      (setq idlwave-shell-halt-frame
+	    (idlwave-shell-parse-line 
+	     (substring idlwave-shell-command-output 
+			(match-beginning 2)))
+	    idlwave-shell-current-state 'error)
+      (idlwave-shell-display-line (idlwave-shell-pc-frame)))
+     
+     ;; Third Priority: Various types of innocuous HALT and
+     ;; TRACEBACK messages.
+     ((or (setq trace (string-match idlwave-shell-trace-message-re
+				    idlwave-shell-command-output))
+	  (string-match idlwave-shell-halt-messages-re
+			idlwave-shell-command-output))
+      ;; Grab the file and line state info.
+      (setq idlwave-shell-calling-stack-index 0)
+      (setq idlwave-shell-halt-frame
+	    (idlwave-shell-parse-line 
+	     (substring idlwave-shell-command-output (match-end 0))))
+      (setq idlwave-shell-current-state 'halt)
+      ;; Don't debug trace messages
+      (idlwave-shell-display-line (idlwave-shell-pc-frame) nil
+				  (if trace 'no-debug)))
+     
+     ;; Fourth Priority: Breakpoints 
+     ((string-match idlwave-shell-break-message
+		    idlwave-shell-command-output)
+      (setq idlwave-shell-calling-stack-index 0)
+      (setq idlwave-shell-halt-frame 
+	    (idlwave-shell-parse-line 
+	     (substring idlwave-shell-command-output (match-end 0))))
+      ;; We used to count hits on breakpoints
+      ;; this is no longer supported since IDL breakpoints
+      ;; have learned counting.
+      ;; Do breakpoint command processing
+      (let ((bp (assoc 
+		 (list
+		  (nth 0 idlwave-shell-halt-frame)
+		  (nth 1 idlwave-shell-halt-frame))
+		 idlwave-shell-bp-alist)))
+	;(message "Scanning with %s" bp)
+	(if bp
+	    (let ((cmd (idlwave-shell-bp-get bp 'cmd)))
+	      (if cmd ;; Execute any breakpoint command
+		  (if (listp cmd) (eval cmd) (funcall cmd))))
+	  ;; A breakpoint that we did not know about - perhaps it was
+	  ;; set by the user...  Let's update our list.
+	  (idlwave-shell-bp-query)))
+      (setq idlwave-shell-current-state 'breakpoint)      
+      (idlwave-shell-display-line (idlwave-shell-pc-frame)))
+     
+     ;; Last Priority: Can't Step errors
+     ((string-match idlwave-shell-cant-continue-error
+		    idlwave-shell-command-output)
+      (setq idlwave-shell-current-state 'breakpoint))
+
+     ;; Otherwise, no particular state
+     (t (setq idlwave-shell-current-state nil)))))
 
 (defvar idlwave-shell-error-buffer " *idlwave-shell-errors*"
   "Buffer containing syntax errors from IDL compilations.")
@@ -1473,21 +1728,28 @@
 ;; in module and file names.  I am not sure if it will be necessary to
 ;; change this.  Currently it seems to work the way it is.
 (defvar idlwave-shell-syntax-error
-  "^% Syntax error.\\s-*\n\\s-*At:\\s-*\\(.*\\),\\s-*Line\\s-*\\(.*\\)"
-  "A regular expression to match an IDL syntax error.
-The first \(..\) pair should match the file name.  The second pair
-should match the line number.")
+  "^% Syntax error.\\s-*\n\\s-*At:\\s-*\\(.*\\),\\s-*Line\\s-*\\(.*\\)" 
+  "A regular expression to match an IDL syntax error.  
+The 1st pair matches the file name, the second pair matches the line
+number.")
 
 (defvar idlwave-shell-other-error
   "^% .*\n\\s-*At:\\s-*\\(.*\\),\\s-*Line\\s-*\\(.*\\)"
-  "A regular expression to match any IDL error.
-The first \(..\) pair should match the file name.  The second pair
-should match the line number.")
+  "A regular expression to match any IDL error.")
+
+(defvar idlwave-shell-halting-error 
+  "^% .*\n\\([^%].*\n\\)*% Execution halted at:\\(\\s-*\\S-+\\s-*[0-9]+\\s-*.*\\)\n"
+  "A regular expression to match errors which halt execution.")
+
+(defvar idlwave-shell-cant-continue-error 
+  "^% Can't continue from this point.\n"
+  "A regular expression to match errors stepping errors.")
 
 (defvar idlwave-shell-file-line-message
-  (concat
+  (concat 
    "\\("                                 ; program name group (1)
-   "\\<[a-zA-Z][a-zA-Z0-9_$:]*"          ; start with a letter, followed by [..]
+   "\\$MAIN\\$\\|"                   	 ; main level routine
+   "\\<[a-zA-Z][a-zA-Z0-9_$:]*"          ; start with a letter followed by [..]
    "\\([ \t]*\n[ \t]*[a-zA-Z0-9_$:]+\\)*"; continuation lines program name (2)
    "\\)"                                 ; end program name group (1)
    "[ \t\n]+"                            ; white space
@@ -1502,19 +1764,19 @@
    "\\)"                                 ; end line number group (5)
    )
   "*A regular expression to parse out the file name and line number.
-The 1st group should match the subroutine name.
+The 1st group should match the subroutine name.  
 The 3rd group is the line number.
 The 5th group is the file name.
 All parts may contain linebreaks surrounded by spaces.  This is important
 in IDL5 which inserts random linebreaks in long module and file names.")
 
-(defun idlwave-shell-parse-line (string)
+(defun idlwave-shell-parse-line (string &optional skip-main)
   "Parse IDL message for the subroutine, file name and line number.
 We need to work hard here to remove the stupid line breaks inserted by
 IDL5.  These line breaks can be right in the middle of procedure
 or file names.
 It is very difficult to come up with a robust solution.  This one seems
-to be pretty good though.
+to be pretty good though.  
 
 Here is in what ways it improves over the previous solution:
 
@@ -1528,15 +1790,18 @@
 However, the function checks the existence of the files with and
 without this last part - thus the function only breaks if file name
 plus garbage match an existing regular file.  This is hopefully very
-unlikely."
+unlikely.
+
+If optional arg SKIP-MAIN is non-nil, don't parse $MAIN$ routine stop
+statements."
 
   (let (number procedure file)
-    (when (and (not (string-match ":\\s-*\\$MAIN" string))
-		(string-match idlwave-shell-file-line-message string))
+    (when (and (not (if skip-main (string-match ":\\s-*\\$MAIN" string)))
+	       (string-match idlwave-shell-file-line-message string))
       (setq procedure (match-string 1 string)
 	    number (match-string 3 string)
 	    file (match-string 5 string))
-
+	
       ;; Repair the strings
       (setq procedure (idlwave-shell-repair-string procedure))
       (setq number (idlwave-shell-repair-string number))
@@ -1562,7 +1827,7 @@
 file name."
   (let ((file1 "") (file2 "") (start 0))
     ;; We scan no further than to the next "^%" line
-    (if (string-match "^%" file)
+    (if (string-match "^%" file) 
 	(setq file (substring file 0 (match-beginning 0))))
     ;; Take out the line breaks
     (while (string-match "[ \t]*\n[ \t]*" file start)
@@ -1617,10 +1882,10 @@
 The size is given by `idlwave-shell-graphics-window-size'."
   (interactive "P")
   (let ((n (if n (prefix-numeric-value n) 0)))
-    (idlwave-shell-send-command
+    (idlwave-shell-send-command 
      (apply 'format "window,%d,xs=%d,ys=%d"
 	    n idlwave-shell-graphics-window-size)
-     nil (idlwave-shell-hide-p 'misc))))
+     nil (idlwave-shell-hide-p 'misc) nil t)))
 
 (defun idlwave-shell-resync-dirs ()
   "Resync the buffer's idea of the current directory.
@@ -1633,14 +1898,21 @@
 			      'hide 'wait))
 
 (defun idlwave-shell-retall (&optional arg)
-  "Return from the entire calling stack."
+  "Return from the entire calling stack.
+Also get rid of widget events in the queue."
   (interactive "P")
-  (idlwave-shell-send-command "retall" nil (idlwave-shell-hide-p 'misc)))
+  (save-selected-window
+    ;;if (widget_info(/MANAGED))[0] gt 0 then for i=0,n_elements(widget_info(/MANAGED))-1 do widget_control,(widget_info(/MANAGED))[i],/clear_events & 
+    (idlwave-shell-send-command "retall" nil 
+				(if (idlwave-shell-hide-p 'misc) 'mostly) 
+				nil t)
+    (idlwave-shell-display-line nil)))
 
 (defun idlwave-shell-closeall (&optional arg)
   "Close all open files."
   (interactive "P")
-  (idlwave-shell-send-command "close,/all" nil (idlwave-shell-hide-p 'misc)))
+  (idlwave-shell-send-command "close,/all" nil 
+			      (idlwave-shell-hide-p 'misc) nil t))
 
 (defun idlwave-shell-quit (&optional arg)
   "Exit the idl process after confirmation.
@@ -1655,7 +1927,7 @@
 
 (defun idlwave-shell-reset (&optional hidden)
   "Reset IDL.  Return to main level and destroy the leftover variables.
-This issues the following commands:
+This issues the following commands:  
 RETALL
 WIDGET_CONTROL,/RESET
 CLOSE, /ALL
@@ -1691,7 +1963,7 @@
   (let ((text idlwave-shell-command-output)
 	(start 0)
 	sep sep-re file type spec specs name cs key keys class entry)
-;    (message "GOT: %s" text) ;??????????????????????
+    ;;    (message "GOT: %s" text) ;??????????????????????
     ;; Initialize variables
     (setq idlwave-compiled-routines nil
 	  idlwave-unresolved-routines nil)
@@ -1704,12 +1976,16 @@
 	      text (substring text (match-end 0)))
       ;; Set dummy values and kill the text
       (setq sep "@" sep-re "@ *" text "")
-      (message "Routine Info warning: No match for BEGIN line in \n>>>>\n%s\n<<<<\n"
-	       idlwave-shell-command-output))
+      (if idlwave-idlwave_routine_info-compiled
+	  (message 
+	   "Routine Info warning: No match for BEGIN line in \n>>>\n%s\n<<<\n" 
+	   idlwave-shell-command-output)))
     (if (string-match "^>>>END OF IDLWAVE ROUTINE INFO.*" text)
 	(setq text (substring text 0 (match-beginning 0)))
-      (message "Routine Info warning: No match for END line in \n>>>>\n%s\n<<<<\n"
-	       idlwave-shell-command-output))
+      (if idlwave-idlwave_routine_info-compiled
+	  (message 
+	   "Routine Info warning: No match for END line in \n>>>\n%s\n<<<\n" 
+	   idlwave-shell-command-output)))
     (if (string-match "\\S-" text)
 	;; Obviously, the pro worked.  Make a note that we have it now.
 	(setq idlwave-idlwave_routine_info-compiled t))
@@ -1726,55 +2002,61 @@
 	    key (nth 4 specs)
 	    keys (if (and (stringp key)
 			  (not (string-match "\\` *\\'" key)))
-		     (mapcar 'list
+		     (mapcar 'list 
 			     (delete "" (idlwave-split-string key " +")))))
       (setq name (idlwave-sintern-routine-or-method name class t)
 	    class (idlwave-sintern-class class t)
 	    file (if (equal file "") nil file)
-	    keys (mapcar (lambda (x)
+	    keys (mapcar (lambda (x) 
 			   (list (idlwave-sintern-keyword (car x) t))) keys))
-      ;; Make sure we use the same string object for the same file
-      (setq file (idlwave-sintern-file file t))
-      ;; FIXME: What should I do with routines from the temp file???
-      ;;        Maybe just leave it in - there is a chance that the
-      ;;        routine is still in there.
-      ;;      (if (equal file idlwave-shell-temp-pro-file)
-      ;;	  (setq file nil))
-
+      
       ;; In the following ignore routines already defined in buffers,
       ;; assuming that if the buffer stuff differs, it is a "new"
-      ;; version.
+      ;; version, not yet compiled, and should take precedence.
       ;; We could do the same for the library to avoid duplicates -
       ;; but I think frequently a user might have several versions of
-      ;; the same function in different programs, and in this case the
-      ;; compiled one will be the best guess of all version.
+      ;; the same function in different programs, and in this case the 
+      ;; compiled one will be the best guess of all versions.
       ;; Therefore, we leave duplicates of library routines in.
-
       (cond ((string= name "$MAIN$"))    ; ignore this one
 	    ((and (string= type "PRO")
 		  ;; FIXME: is it OK to make the buffer routines dominate?
 		  (or t (null file)
-		      (not (idlwave-rinfo-assq name 'pro class
+		      (not (idlwave-rinfo-assq name 'pro class 
 					       idlwave-buffer-routines)))
 		  ;; FIXME: is it OK to make the library routines dominate?
-		  ;;(not (idlwave-rinfo-assq name 'pro class
+		  ;;(not (idlwave-rinfo-assq name 'pro class 
 		  ;;			   idlwave-library-routines))
 		  )
-	     (setq entry (list name 'pro class (cons 'compiled file) cs keys))
-	     (if file
+	     (setq entry (list name 'pro class 
+			       (cons 'compiled 
+				     (if file
+					 (list
+					  (file-name-nondirectory file)
+					  (idlwave-sintern-dir 
+					   (file-name-directory file)))))
+			       cs (cons nil keys)))
+	     (if file 
 		 (push entry idlwave-compiled-routines)
 	       (push entry idlwave-unresolved-routines)))
-
+	    
 	    ((and (string= type "FUN")
 		  ;; FIXME: is it OK to make the buffer routines dominate?
 		  (or t (not file)
-		      (not (idlwave-rinfo-assq name 'fun class
+		      (not (idlwave-rinfo-assq name 'fun class 
 					       idlwave-buffer-routines)))
 		  ;; FIXME: is it OK to make the library routines dominate?
-		  ;; (not (idlwave-rinfo-assq name 'fun class
+		  ;; (not (idlwave-rinfo-assq name 'fun class 
 		  ;;			   idlwave-library-routines))
 		  )
-	     (setq entry (list name 'fun class (cons 'compiled file) cs keys))
+	     (setq entry (list name 'fun class 
+			       (cons 'compiled
+				     (if file
+					 (list
+					  (file-name-nondirectory file)
+					  (idlwave-sintern-dir 
+					   (file-name-directory file)))))
+			       cs (cons nil keys)))
 	     (if file
 		 (push entry idlwave-compiled-routines)
 	       (push entry idlwave-unresolved-routines))))))
@@ -1789,7 +2071,7 @@
     (set-buffer (idlwave-shell-buffer))
     (if (string-match ",___cur[\n\r]\\(\\S-*\\) *[\n\r]"
 		      idlwave-shell-command-output)
-	(let ((dir (substring idlwave-shell-command-output
+	(let ((dir (substring idlwave-shell-command-output 
 			      (match-beginning 1) (match-end 1))))
 ;	  (message "Setting Emacs working dir to %s" dir)
 	  (setq idlwave-shell-default-directory dir)
@@ -1803,10 +2085,10 @@
 	expression)
     (save-excursion
       (goto-char apos)
-      (setq expression (buffer-substring
+      (setq expression (buffer-substring 
 			(catch 'exit
 			  (while t
-			    (if (not (re-search-backward
+			    (if (not (re-search-backward 
 				      "[^][.A-Za-z0-9_() ]" bos t))
 				(throw 'exit bos)) ;ran into bos
 			    (if (not (idlwave-is-pointer-dereference bol))
@@ -1820,23 +2102,25 @@
        'hide 'wait)
       ;; If we don't know anything about the class, update shell routines
       (if (and idlwave-shell-get-object-class
-	       (not (assoc-string idlwave-shell-get-object-class
-				  (idlwave-class-alist) t)))
+	       (not (assoc-ignore-case idlwave-shell-get-object-class
+				       (idlwave-class-alist))))
 	  (idlwave-shell-maybe-update-routine-info))
       idlwave-shell-get-object-class)))
 
 (defun idlwave-shell-parse-object-class ()
   "Parse the output of the obj_class command."
-  (let ((match "print,obj_class([^\n\r]+[\n\r ]+"))
+  (let ((match "print,obj_class([^\n\r]+[\n\r ]"))
     (if (and
 	 (not (string-match (concat match match "\\s-*^[\n\r]+"
 				    "% Syntax error")
 			    idlwave-shell-command-output))
 	 (string-match (concat match "\\([A-Za-z_0-9]+\\)")
 		       idlwave-shell-command-output))
-	(setq idlwave-shell-get-object-class
+	(setq idlwave-shell-get-object-class 
 	      (match-string 1 idlwave-shell-command-output)))))
 
+(defvar idlwave-sint-sysvars nil)
+(idlwave-new-sintern-type 'execcomm)
 
 (defun idlwave-shell-complete (&optional arg)
   "Do completion in the idlwave-shell buffer.
@@ -1844,36 +2128,59 @@
 in strings.  Otherwise, calls `idlwave-complete' to complete modules and
 keywords."
   (interactive "P")
-  (let (cmd)
+  (let (exec-cmd)
     (cond
-     ((setq cmd (idlwave-shell-executive-command))
+     ((and 
+       (setq exec-cmd (idlwave-shell-executive-command))
+       (cdr exec-cmd)
+       (member (upcase (cdr exec-cmd))
+	       '(".R" ".RU" ".RUN" ".RN" ".RNE" ".RNEW"
+		 ".COM" ".COMP" ".COMPI" ".COMPIL" ".COMPILE")))
       ;; We are in a command line with an executive command
-      (if (member (upcase cmd)
-		  '(".R" ".RU" ".RUN" ".RN" ".RNE" ".RNEW"
-		    ".COM" ".COMP" ".COMPI" ".COMPIL" ".COMPILE"))
-	  ;; This command expects file names
-	  (idlwave-shell-complete-filename)))
+      (idlwave-shell-complete-filename))
+
+     ((car-safe exec-cmd)
+      (setq idlwave-completion-help-info 
+	    '(idlwave-shell-complete-execcomm-help))
+      (idlwave-complete-in-buffer 'execcomm 'execcomm
+				  idlwave-executive-commands-alist nil
+				  "Select an executive command"
+				  "system variable"))
 
      ((idlwave-shell-batch-command)
       (idlwave-shell-complete-filename))
 
+     ((idlwave-shell-shell-command)
+      (idlwave-shell-complete-filename))
+
      ((and (idlwave-shell-filename-string)
 	   (save-excursion
 	     (beginning-of-line)
 	     (let ((case-fold-search t))
 	       (not (looking-at ".*obj_new")))))
       (idlwave-shell-complete-filename))
-
+     
      (t
       ;; Default completion of modules and keywords
       (idlwave-complete arg)))))
 
+;; Get rid of opaque dynamic variable passing of link?
+(defun idlwave-shell-complete-execcomm-help (mode word)
+  (let ((word (or (nth 1 idlwave-completion-help-info) word))
+	(entry (assoc-ignore-case word idlwave-executive-commands-alist)))
+    (cond
+     ((eq mode 'test)
+      (and (stringp word) entry (cdr entry)))
+     ((eq mode 'set)
+      (if entry (setq link (cdr entry)))) ;; setting dynamic variable!!!
+     (t (error "This should not happen")))))
+
 (defun idlwave-shell-complete-filename (&optional arg)
   "Complete a file name at point if after a file name.
 We assume that we are after a file name when completing one of the
 args of an executive .run, .rnew or .compile."
   ;; CWD might have changed, resync, to set default directory
-  (idlwave-shell-resync-dirs)
+  (idlwave-shell-resync-dirs) 
   (let ((comint-file-name-chars idlwave-shell-file-name-chars))
     (comint-dynamic-complete-as-filename)))
 
@@ -1881,8 +2188,9 @@
   "Return the name of the current executive command, if any."
   (save-excursion
     (idlwave-beginning-of-statement)
-    (if (looking-at "[ \t]*\\([.][^ \t\n\r]+\\)")
-	(match-string 1))))
+    (cons (looking-at "[ \t]*\\.")
+	  (if (looking-at "[ \t]*[.]\\([^ \t\n\r]+\\)[ \t]")
+	      (match-string 1)))))
 
 (defun idlwave-shell-filename-string ()
   "Return t if in a string and after what could be a file name."
@@ -1902,13 +2210,17 @@
       (skip-chars-backward " \t" limit)
       (and (eq (preceding-char) ?@) (not (idlwave-in-quote))))))
 
-;;;
-;;; This section contains code for debugging IDL programs. --------------------
-;;;
+(defun idlwave-shell-shell-command ()
+  "Returns t if we're in a shell command statement like $ls"
+  (save-excursion
+    (idlwave-beginning-of-statement)
+    (looking-at "\\$")))
+
+;; Debugging Commands ------------------------------------------------------
 
 (defun idlwave-shell-redisplay (&optional hide)
   "Tries to resync the display with where execution has stopped.
-Issues a \"help,/trace\" command followed by a call to
+Issues a \"help,/trace\" command followed by a call to 
 `idlwave-shell-display-line'.  Also updates the breakpoint
 overlays."
   (interactive)
@@ -1921,7 +2233,7 @@
   (idlwave-shell-bp-query))
 
 (defun idlwave-shell-display-level-in-calling-stack (&optional hide)
-  (idlwave-shell-send-command
+  (idlwave-shell-send-command 
    "help,/trace"
    `(progn
       ;; scanning for the state will reset the stack level - restore it
@@ -1952,11 +2264,14 @@
       (setq idlwave-shell-calling-stack-index nmin
 	    message (format "%d is the current calling stack level - can't go further down"
 			    (- nmin)))))
-    (setq idlwave-shell-calling-stack-routine
+    (setq idlwave-shell-calling-stack-routine 
 	  (nth 2 (nth idlwave-shell-calling-stack-index stack)))
-    (idlwave-shell-display-line
-     (nth idlwave-shell-calling-stack-index stack))
-    (message (or message
+
+    ;; only edebug if in that mode already
+    (idlwave-shell-display-line 
+     (nth idlwave-shell-calling-stack-index stack) nil
+     (unless idlwave-shell-electric-debug-mode 'no-debug)) 
+    (message (or message 
 		 (format "In routine %s (stack level %d)"
 			 idlwave-shell-calling-stack-routine
 			 (- idlwave-shell-calling-stack-index))))))
@@ -1987,7 +2302,7 @@
 (defun idlwave-shell-pc-frame ()
   "Returns the frame for IDL execution."
   (and idlwave-shell-halt-frame
-       (list (nth 0 idlwave-shell-halt-frame)
+       (list (nth 0 idlwave-shell-halt-frame) 
 	     (nth 1 idlwave-shell-halt-frame)
 	     (nth 2 idlwave-shell-halt-frame))))
 
@@ -1995,19 +2310,26 @@
   "Check that frame is for an existing file."
   (file-readable-p (car frame)))
 
-(defun idlwave-shell-display-line (frame &optional col)
+(defvar idlwave-shell-suppress-electric-debug nil)
+(defun idlwave-shell-display-line (frame &optional col no-debug)
   "Display FRAME file in other window with overlay arrow.
 
-FRAME is a list of file name, line number, and subroutine name.
-If FRAME is nil then remove overlay."
+FRAME is a list of file name, line number, and subroutine name.  If
+FRAME is nil then remove overlay.  If COL is set, move point to that
+column in the line.  If NO-DEBUG is non-nil, do *not* toggle the electric
+debug mode."
   (if (not frame)
       ;; Remove stop-line overlay from old position
-      (progn
+      (progn 
         (setq overlay-arrow-string nil)
 	(setq idlwave-shell-mode-line-info nil)
 	(setq idlwave-shell-is-stopped nil)
         (if idlwave-shell-stop-line-overlay
-            (delete-overlay idlwave-shell-stop-line-overlay)))
+            (delete-overlay idlwave-shell-stop-line-overlay))
+	;; Turn off electric debug everywhere, if it's on
+	(if (and (not no-debug)
+		 idlwave-shell-automatic-electric-debug)
+	    (idlwave-shell-electric-debug-all-off)))
     (if (not (idlwave-shell-valid-frame frame))
 	;; FIXME: errors are dangerous in shell filters.  But I think I
 	;; have never encountered this one.
@@ -2015,15 +2337,15 @@
 ;;;
 ;;; buffer : the buffer to display a line in.
 ;;; select-shell: current buffer is the shell.
-;;;
+;;; 
       (setq idlwave-shell-mode-line-info
 	    (if (nth 2 frame)
-		(format "[%d:%s]"
+		(format "[%d:%s]" 
 			(- idlwave-shell-calling-stack-index)
 			(nth 2 frame))))
       (let* ((buffer (idlwave-find-file-noselect (car frame) 'shell))
              (select-shell (equal (buffer-name) (idlwave-shell-buffer)))
-             window pos)
+             window pos electric)
 
 	;; First make sure the shell window is visible
 	(idlwave-display-buffer (idlwave-shell-buffer)
@@ -2039,8 +2361,10 @@
           (save-restriction
             (widen)
             (goto-line (nth 1 frame))
+	    (forward-line 0)
             (setq pos (point))
 	    (setq idlwave-shell-is-stopped t)
+	    
             (if idlwave-shell-stop-line-overlay
                 ;; Move overlay
 		(move-overlay idlwave-shell-stop-line-overlay
@@ -2051,7 +2375,7 @@
 		  (setq overlay-arrow-string idlwave-shell-overlay-arrow))
               (or overlay-arrow-position  ; create the marker if necessary
                   (setq overlay-arrow-position (make-marker)))
-              (set-marker overlay-arrow-position (point) buffer)))
+	      (set-marker overlay-arrow-position (point) buffer)))
 
 	  ;; If the point is outside the restriction, widen the buffer.
           (if (or (< pos (point-min)) (> pos (point-max)))
@@ -2061,15 +2385,29 @@
 
 	  ;; If we have the column of the error, move the cursor there.
           (if col (move-to-column col))
-          (setq pos (point)))
-
+          (setq pos (point))
+	  
+	  ;; Enter electric debug mode, if not prohibited and not in
+	  ;; it already
+	  (when (and (or 
+		      (eq idlwave-shell-automatic-electric-debug t)
+		      (and 
+		       (eq idlwave-shell-automatic-electric-debug 'breakpoint)
+		       (not (eq idlwave-shell-current-state 'error))))
+		     (not no-debug)
+		     (not idlwave-shell-suppress-electric-debug)
+		     (not idlwave-shell-electric-debug-mode))
+	    (idlwave-shell-electric-debug-mode)
+	    (setq electric t)))
+	
 	;; Make sure pos is really displayed in the window.
-        (set-window-point window pos)
-
-	;; If we came from the shell, go back there.  Otherwise select
+	(set-window-point window pos)
+	
+	;; If we came from the shell, go back there.  Otherwise select 
 	;; the window where the error is displayed.
-        (if (and (equal (buffer-name) (idlwave-shell-buffer))
-		 (not select-shell))
+        (if (or (and idlwave-shell-electric-zap-to-file electric)
+		(and (equal (buffer-name) (idlwave-shell-buffer)) 
+		     (not select-shell)))
             (select-window window))))))
 
 
@@ -2078,42 +2416,43 @@
   (interactive "p")
   (or (not arg) (< arg 1)
       (setq arg 1))
-  (idlwave-shell-send-command
+  (idlwave-shell-send-command 
    (concat ".s " (if (integerp arg) (int-to-string arg) arg))
-   nil (idlwave-shell-hide-p 'debug)))
+   nil (if (idlwave-shell-hide-p 'debug) 'mostly) nil t))
 
 (defun idlwave-shell-stepover (arg)
   "Stepover one source line.
-If given prefix argument ARG, step ARG source lines.
+If given prefix argument ARG, step ARG source lines. 
 Uses IDL's stepover executive command which does not enter called functions."
   (interactive "p")
   (or (not arg) (< arg 1)
       (setq arg 1))
-  (idlwave-shell-send-command
+  (idlwave-shell-send-command 
    (concat ".so " (if (integerp arg) (int-to-string arg) arg))
-   nil (idlwave-shell-hide-p 'debug)))
-
-(defun idlwave-shell-break-here (&optional count cmd condition)
-  "Set breakpoint at current line.
+   nil (if (idlwave-shell-hide-p 'debug) 'mostly) nil t))
+
+(defun idlwave-shell-break-here (&optional count cmd condition no-show)
+  "Set breakpoint at current line.  
 
 If Count is nil then an ordinary breakpoint is set.  We treat a count
 of 1 as a temporary breakpoint using the ONCE keyword.  Counts greater
 than 1 use the IDL AFTER=count keyword to break only after reaching
 the statement count times.
 
-Optional argument CMD is a list or function to evaluate upon reaching
+Optional argument CMD is a list or function to evaluate upon reaching 
 the breakpoint."
-
+  
   (interactive "P")
   (when (listp count)
-    (if (equal (car count) 4)
+    (if (equal (car count) 4) 
 	(setq condition (read-string "Break Condition: ")))
     (setq count nil))
   (idlwave-shell-set-bp
    ;; Create breakpoint
    (idlwave-shell-bp (idlwave-shell-current-frame)
-		     (list count cmd condition)
-		     (idlwave-shell-current-module))))
+		     (list count cmd condition nil)
+		     (idlwave-shell-current-module))
+   no-show))
 
 (defun idlwave-shell-set-bp-check (bp)
   "Check for failure to set breakpoint.
@@ -2128,7 +2467,7 @@
       (progn
         (if (progn
               (beep)
-              (y-or-n-p
+              (y-or-n-p 
                (concat "Okay to recompile file "
                        (idlwave-shell-bp-get bp 'file) " ")))
             ;; Recompile
@@ -2136,8 +2475,8 @@
               ;; Clean up before retrying
               (idlwave-shell-command-failure)
               (idlwave-shell-send-command
-               (concat ".run " (idlwave-shell-bp-get bp 'file)) nil
-	       (idlwave-shell-hide-p 'run))
+               (concat ".run " (idlwave-shell-bp-get bp 'file)) nil 
+	       (if (idlwave-shell-hide-p 'run) 'mostly) nil t)
               ;; Try setting breakpoint again
               (idlwave-shell-set-bp bp))
           (beep)
@@ -2157,29 +2496,34 @@
   ;; Clear pending commands
   (setq idlwave-shell-pending-commands nil))
 
-(defun idlwave-shell-cont ()
+(defun idlwave-shell-cont (&optional no-show)
   "Continue executing."
   (interactive)
-  (idlwave-shell-send-command ".c" '(idlwave-shell-redisplay 'hide)
-			      (idlwave-shell-hide-p 'debug)))
+  (idlwave-shell-send-command ".c" (unless no-show 
+				     '(idlwave-shell-redisplay 'hide))
+			      (if (idlwave-shell-hide-p 'debug) 'mostly) 
+			      nil t))
 
 (defun idlwave-shell-go ()
   "Run .GO.  This starts the main program of the last compiled file."
   (interactive)
   (idlwave-shell-send-command ".go" '(idlwave-shell-redisplay 'hide)
-			      (idlwave-shell-hide-p 'debug)))
+			      (if (idlwave-shell-hide-p 'debug) 'mostly)
+			      nil t))
 
 (defun idlwave-shell-return ()
   "Run .RETURN (continue to next return, but stay in subprogram)."
   (interactive)
   (idlwave-shell-send-command ".return" '(idlwave-shell-redisplay 'hide)
-			      (idlwave-shell-hide-p 'debug)))
+			      (if (idlwave-shell-hide-p 'debug) 'mostly)
+			      nil t))
 
 (defun idlwave-shell-skip ()
   "Run .SKIP (skip one line, then step)."
   (interactive)
   (idlwave-shell-send-command ".skip" '(idlwave-shell-redisplay 'hide)
-			      (idlwave-shell-hide-p 'debug)))
+			      (if (idlwave-shell-hide-p 'debug) 'mostly)
+			      nil t))
 
 (defun idlwave-shell-clear-bp (bp)
   "Clear breakpoint BP.
@@ -2188,9 +2532,8 @@
     (if index
         (progn
           (idlwave-shell-send-command
-           (concat "breakpoint,/clear,"
-		   (if (integerp index) (int-to-string index) index))
-	   nil (idlwave-shell-hide-p 'breakpoint))
+           (concat "breakpoint,/clear," (int-to-string index))
+	   nil (idlwave-shell-hide-p 'breakpoint) nil t)
 	  (idlwave-shell-bp-query)))))
 
 (defun idlwave-shell-current-frame ()
@@ -2225,43 +2568,62 @@
 This command can be called from the shell buffer if IDL is currently stopped
 at a breakpoint."
   (interactive)
-  (let ((bp (idlwave-shell-find-bp (idlwave-shell-current-frame))))
-    (if bp (idlwave-shell-clear-bp bp)
-      ;; Try moving to beginning of statement
-      (save-excursion
-        (idlwave-shell-goto-frame)
-        (idlwave-beginning-of-statement)
-        (setq bp (idlwave-shell-find-bp (idlwave-shell-current-frame)))
-        (if bp (idlwave-shell-clear-bp bp)
-          (beep)
-          (message "Cannot identify breakpoint for this line"))))))
-
-(defun idlwave-shell-disable-all-bp (&optional enable)
-  "Disable all breakpoints we know about.
+  (let ((bp (idlwave-shell-find-current-bp)))
+    (if bp (idlwave-shell-clear-bp bp))))
+
+
+(defun idlwave-shell-toggle-enable-current-bp (&optional bp force
+							 no-update)
+  "Disable or enable current bp."
+  (interactive)
+  (let* ((bp (or bp (idlwave-shell-find-current-bp)))
+	 (disabled (idlwave-shell-bp-get bp 'disabled)))
+    (cond ((eq force 'disable) (setq disabled nil))
+	  ((eq force 'enable) (setq disabled t)))
+    (when bp
+      (setf (nth 3 (cdr (cdr bp))) (not disabled))
+      (idlwave-shell-send-command 
+       (concat "breakpoint,"
+	       (if disabled "/enable," "/disable,")
+	       (int-to-string (idlwave-shell-bp-get bp)))
+       nil (idlwave-shell-hide-p 'breakpoint) nil t)
+      (unless no-update (idlwave-shell-bp-query)))))
+
+(defun idlwave-shell-enable-all-bp (&optional enable no-update bpl)
+  "Disable all breakpoints we know about which need disabling.
 If ENABLE is non-nil, enable them instead."
-  (let  ((bpl idlwave-shell-bp-alist))
+  (let  ((bpl (or bpl idlwave-shell-bp-alist)) disabled modified)
     (while bpl
-      (idlwave-shell-send-command
-       (concat "breakpoint,"
-	       (if enable "/enable," "/disable," )
-	       (idlwave-shell-bp-get (car bpl)))
-       nil (idlwave-shell-hide-p 'breakpoint))
-      (setq bpl (cdr bpl)))))
-
+      (setq disabled (idlwave-shell-bp-get (car bpl) 'disabled))
+      (when (idlwave-xor (not disabled) (eq enable 'enable))
+	(idlwave-shell-toggle-enable-current-bp 
+	 (car bpl) (if (eq enable 'enable) 'enable 'disable) no-update)
+	(push (car bpl) modified))
+      (setq bpl (cdr bpl)))
+    (unless no-update (idlwave-shell-bp-query))
+    modified))
+  
 (defun idlwave-shell-to-here ()
   "Set a breakpoint with count 1 then continue."
   (interactive)
-  (idlwave-shell-disable-all-bp)
-  (idlwave-shell-break-here 1)
-  (idlwave-shell-cont)
-  (idlwave-shell-disable-all-bp 'enable))
-
-(defun idlwave-shell-break-in (&optional module)
+  (let ((disabled (idlwave-shell-enable-all-bp 'disable 'no-update)))
+    (idlwave-shell-break-here 1 nil nil 'no-show)
+    (idlwave-shell-cont 'no-show)
+    (idlwave-shell-enable-all-bp 'enable 'no-update disabled))
+  (idlwave-shell-redisplay)) ; sync up everything at the end
+
+(defun idlwave-shell-break-this-module (&optional arg)
+  (interactive "P")
+  (save-excursion
+    (idlwave-beginning-of-subprogram)
+    (idlwave-shell-break-here arg)))
+
+(defun idlwave-shell-break-in ()
   "Look for a module name near point and set a break point for it.
 The command looks for an identifier near point and sets a breakpoint
-for the first line of the corresponding module."
+for the first line of the corresponding module.  If MODULE is `t', set
+in the current routine."
   (interactive)
-  ;; get the identifier
   (let (module)
     (save-excursion
       (skip-chars-backward "a-zA-Z0-9_$")
@@ -2278,7 +2640,7 @@
 (defun idlwave-shell-set-bp-in-module (module)
   "Set breakpoint in module.  Assumes that `idlwave-shell-sources-alist'
 contains an entry for that module."
-  (let ((source-file (car-safe
+  (let ((source-file (car-safe 
 		      (cdr-safe
 		       (assoc (upcase module)
 			      idlwave-shell-sources-alist))))
@@ -2297,7 +2659,7 @@
 	(save-excursion
 	  (goto-char (point-min))
 	  (let ((case-fold-search t))
-	    (if (re-search-forward
+	    (if (re-search-forward 
 		 (concat "^[ \t]*\\(pro\\|function\\)[ \t]+"
 			 (downcase module)
 			 "[ \t\n,]") nil t)
@@ -2339,7 +2701,40 @@
   "Attempt to run until this procedure exits.
 Runs to the last statement and then steps 1 statement.  Use the .out command."
   (interactive)
-  (idlwave-shell-send-command ".o" nil (idlwave-shell-hide-p 'debug)))
+  (idlwave-shell-send-command ".o" nil 
+			      (if (idlwave-shell-hide-p 'debug) 'mostly)
+			      nil t))
+
+(defun idlwave-shell-goto-previous-bp ()
+  "Move to the previous breakpoint in the buffer."
+  (interactive)
+  (idlwave-shell-move-to-bp -1))
+(defun idlwave-shell-goto-next-bp ()
+  "Move to the next breakpoint in the buffer."
+  (interactive)
+  (idlwave-shell-move-to-bp 1))
+
+(defun idlwave-shell-move-to-bp (dir)
+  "Move to the next or previous breakpoint, depending on direction DIR."
+  (let* ((frame (idlwave-shell-current-frame))
+	 (file (car frame))
+	 (orig-bp-line (nth 1 frame))
+	 (bp-alist idlwave-shell-bp-alist)
+	 (orig-func (if (> dir 0) '> '<))
+	 (closer-func (if (> dir 0) '< '>))
+	 bp got-bp bp-line cur-line)
+    (while (setq bp (pop bp-alist))
+      (when (string= file (car (car bp)))
+	(setq got-bp 1)
+	(setq cur-line (nth 1 (car bp)))
+	(if (and
+	     (funcall orig-func cur-line orig-bp-line)
+	     (or (not bp-line) (funcall closer-func cur-line bp-line)))
+	    (setq bp-line cur-line))))
+    (unless bp-line (error "No further breakpoints."))
+    (goto-line bp-line)))
+
+;; Examine Commands ------------------------------------------------------
 
 (defun idlwave-shell-help-expression (arg)
   "Print help on current expression.  See `idlwave-shell-print'."
@@ -2353,12 +2748,30 @@
      (interactive "e")
      (let ((transient-mark-mode t)
 	   (zmacs-regions t)
-	   (tracker (if (featurep 'xemacs) 'mouse-track
+	   (tracker (if (featurep 'xemacs) 
+			(if (fboundp 'default-mouse-track-event-is-with-button)
+			    'idlwave-xemacs-hack-mouse-track
+			  'mouse-track)
 		      'mouse-drag-region)))
        (funcall tracker event)
-       (idlwave-shell-print (if (idlwave-region-active-p) '(16) nil)
+       (idlwave-shell-print (if (idlwave-region-active-p) '(4) nil)
 			    ,help ,ev))))
 
+;;; Begin terrible hack section -- XEmacs tests for button2 explicitly
+;;; on drag events, calling drag-n-drop code if detected.  Ughhh...
+(defun idlwave-default-mouse-track-event-is-with-button (event n)
+  t)
+
+(defun idlwave-xemacs-hack-mouse-track (event)
+  (let ((oldfunc (symbol-function 'default-mouse-track-event-is-with-button)))
+    (unwind-protect
+	(progn
+	  (fset 'default-mouse-track-event-is-with-button 
+		'idlwave-default-mouse-track-event-is-with-button)
+	  (mouse-track event))
+      (fset 'default-mouse-track-event-is-with-button oldfunc))))
+;;; End terrible hack section
+
 (defun idlwave-shell-mouse-print (event)
   "Print value of variable at the mouse position, with `help'"
   (interactive "e")
@@ -2380,22 +2793,21 @@
      (interactive)
      (idlwave-shell-print nil ,help)))
 
-(defun idlwave-shell-define-key-both (key hook)
-  "Define a key in both the shell and buffer mode maps."
-  (define-key idlwave-mode-map key hook)
-  (define-key idlwave-shell-mode-map key hook))
-
 (defvar idlwave-shell-examine-label nil
-  "Label to include with examine text if separate.")
-
-(defun idlwave-shell-print (arg &optional help ev)
-  "Print current expression.
+  "Label to include with examine text if in a separate buffer.")
+(defvar idlwave-shell-examine-completion-list nil)
+
+(defun idlwave-shell-print (arg &optional help ev complete-help-type)
+  "Print current expression.  
 
 With HELP non-nil, show help on expression.  If HELP is a string,
 the expression will be put in place of ___, e.g.:
 
    print,size(___,/DIMENSIONS)
 
+HELP can also be a cons cell ( NAME . STRING ) in which case NAME will
+be used to label the help print-out.
+
 Otherwise, print is called on the expression.
 
 An expression is an identifier plus 1 pair of matched parentheses
@@ -2406,30 +2818,33 @@
 return the inner-most containing expression, otherwise, return the
 preceding expression.
 
-With prefix arg ARG prompt for an expression.
-
-With double prefix arg, use the current region.
+With prefix arg, or if transient mode set and the region is defined,
+use the current region as the expression.
+
+With double prefix arg ARG prompt for an expression.
 
 If EV is a valid event passed, pop-up a list from
-idlw-shell-examine-alist from which to select the help command text."
+idlw-shell-examine-alist from which to select the help command text.
+If instead COMPLETE-HELP-TYPE is non-nil, choose from
+idlw-shell-examine-alist via mini-buffer shortcut key."
   (interactive "P")
   (save-excursion
     (let* ((process (get-buffer-process (current-buffer)))
 	   (process-mark (if process (process-mark process)))
-	   (stack-label
+	   (stack-label 
 	    (if (and (integerp idlwave-shell-calling-stack-index)
 		     (> idlwave-shell-calling-stack-index 0))
-		(format "  [-%d:%s]"
-			idlwave-shell-calling-stack-index
+		(format "  [-%d:%s]" 
+			idlwave-shell-calling-stack-index 
 			idlwave-shell-calling-stack-routine)))
 	   expr beg end cmd examine-hook)
       (cond
-       ((and (equal arg '(16))
+       ((equal arg '(16))
+	(setq expr (read-string "Expression: ")))
+       ((and (or arg (idlwave-region-active-p))
 	     (< (- (region-end) (region-beginning)) 2000))
 	(setq beg (region-beginning)
 	      end (region-end)))
-       (arg
-	(setq expr (read-string "Expression: ")))
        (t
 	(idlwave-with-special-syntax
 	 ;; Move to beginning of current or previous expression
@@ -2450,7 +2865,7 @@
 	   ;; an array
 	   (forward-sexp))
 	 (setq end (point)))))
-
+      
       ;; Get expression, but first move the begin mark if a
       ;; process-mark is inside the region, to keep the overlay from
       ;; wandering in the Shell.
@@ -2461,17 +2876,17 @@
 
       ;; Show the overlay(s) and attach any necessary hooks and filters
       (when (and beg end idlwave-shell-expression-overlay)
-	(move-overlay idlwave-shell-expression-overlay beg end
+	(move-overlay idlwave-shell-expression-overlay beg end 
 		      (current-buffer))
-	(add-hook 'pre-command-hook
+	(add-hook 'pre-command-hook 
 		  'idlwave-shell-delete-expression-overlay))
-      (setq examine-hook
+      (setq examine-hook 
 	    (if idlwave-shell-separate-examine-output
 		'idlwave-shell-examine-display
 	      'idlwave-shell-examine-highlight))
       (add-hook 'pre-command-hook
 		'idlwave-shell-delete-output-overlay)
-
+      
       ;; Remove empty or comment-only lines
       (while (string-match "\n[ \t]*\\(;.*\\)?\r*\n" expr)
 	(setq expr (replace-match "\n" t t expr)))
@@ -2481,41 +2896,57 @@
       ;; Remove final newline
       (if (string-match "\n[ \t\r]*\\'" expr)
 	  (setq expr (replace-match "" t t expr)))
-      ;; Pop-up the examine selection list, if appropriate
-      (if (and ev idlwave-shell-examine-alist)
-	  (let* ((help-cons
-		  (assoc
-		   (idlwave-popup-select
-		    ev (mapcar 'car idlwave-shell-examine-alist)
-		    "Examine with")
-		   idlwave-shell-examine-alist)))
-	    (setq help (cdr help-cons))
-	    (if idlwave-shell-separate-examine-output
-		(setq idlwave-shell-examine-label
-		      (concat
-		       (format "==>%s<==\n%s:" expr (car help-cons))
-		       stack-label "\n"))))
-	(setq idlwave-shell-examine-label
-	      (concat
-	       (format "==>%s<==\n%s:" expr
-		       (cond ((null help) "print")
-			     ((stringp help) help)
-			     (t (symbol-name help))))
-	       stack-label "\n")))
-
-      ;; Send the command
-      (if stack-label
-	  (setq cmd (idlwave-retrieve-expression-from-level
-		     expr
-		     idlwave-shell-calling-stack-index
-		     idlwave-shell-calling-stack-routine
-		     help))
-	(setq cmd (idlwave-shell-help-statement help expr)))
-      ;(idlwave-shell-recenter-shell-window)
-      (idlwave-shell-send-command
-       cmd
-       examine-hook
-       (if idlwave-shell-separate-examine-output 'hide)))))
+      
+      (catch 'exit
+	;; Pop-up or complete on the examine selection list, if appropriate
+	(if (or
+	     complete-help-type
+	     (and ev idlwave-shell-examine-alist)
+	     (consp help))
+	    (let ((help-cons 
+		   (if (consp help) help
+		     (assoc 
+		      ;; A cons from either a pop-up or mini-buffer completion
+		      (if complete-help-type
+			  (idlwave-one-key-select 'idlwave-shell-examine-alist
+						  "Examine with: " 1.5)
+;; 			  (idlwave-completing-read
+;; 			   "Examine with: " 
+;; 			   idlwave-shell-examine-alist nil nil nil
+;; 			   'idlwave-shell-examine-completion-list
+;; 			   "Print")
+			(idlwave-popup-select 
+			 ev 
+			 (mapcar 'car idlwave-shell-examine-alist) 
+			 "Examine with"))
+		      idlwave-shell-examine-alist))))
+	      (setq help (cdr help-cons))
+	      (if (null help) (throw 'exit nil))
+	      (if idlwave-shell-separate-examine-output
+		  (setq idlwave-shell-examine-label 
+			(concat 
+			 (format "==>%s<==\n%s:" expr (car help-cons))
+			 stack-label "\n"))))
+	  ;; The regular help label (no popups, cons cells, etc.)
+	  (setq idlwave-shell-examine-label
+		(concat
+		 (format "==>%s<==\n%s:" expr 
+			 (cond ((null help) "print")
+			       ((stringp help) help)
+			       (t (symbol-name help))))
+		 stack-label "\n")))
+
+	;; Send the command
+	(if stack-label
+	    (setq expr (idlwave-retrieve-expression-from-level
+			expr
+			idlwave-shell-calling-stack-index)))
+	(setq cmd (idlwave-shell-help-statement help expr))
+	;;(idlwave-shell-recenter-shell-window)
+	(idlwave-shell-send-command 
+	 cmd 
+	 examine-hook 
+	 (if idlwave-shell-separate-examine-output 'hide))))))
 
 (defvar idlwave-shell-examine-window-alist nil
   "Variable to hold the win/height pairs for all *Examine* windows.")
@@ -2541,9 +2972,9 @@
 	  (let* ((end (or
 		       (re-search-backward idlwave-shell-prompt-pattern nil t)
 		       (point-max)))
-		 (beg (progn
+		 (beg (progn 
 			(goto-char
-			 (or (progn (if (re-search-backward
+			 (or (progn (if (re-search-backward 
 					 idlwave-shell-prompt-pattern nil t)
 					(match-end 0)))
 			     (point-min)))
@@ -2560,21 +2991,21 @@
 	(setq buffer-read-only t)
 	(move-overlay idlwave-shell-output-overlay cur-beg cur-end
 		      (current-buffer))
-
+	
 	;; Look for the examine buffer in all windows.  If one is
 	;; found in a frame all by itself, use that, otherwise, switch
 	;; to or create an examine window in this frame, and resize if
 	;; it's a newly created window
 	(let* ((winlist (get-buffer-window-list "*Examine*" nil 'visible)))
-	  (setq win (idlwave-display-buffer
-		     "*Examine*"
+	  (setq win (idlwave-display-buffer 
+		     "*Examine*" 
 		     nil
 		     (let ((list winlist) thiswin)
 		       (catch 'exit
 			 (save-selected-window
 			   (while (setq thiswin (pop list))
 			     (select-window thiswin)
-			     (if (one-window-p)
+			     (if (one-window-p) 
 				 (throw 'exit (window-frame thiswin)))))))))
 	  (set-window-start win (point-min)) ; Ensure the point is visible.
 	  (save-selected-window
@@ -2595,7 +3026,7 @@
 		;; And add the new value.
 		(if (setq elt (assoc win idlwave-shell-examine-window-alist))
 		    (setcdr elt (window-height))
-		  (add-to-list 'idlwave-shell-examine-window-alist
+		  (add-to-list 'idlwave-shell-examine-window-alist 
 			       (cons win (window-height)))))))))
       ;; Recenter for maximum output, after widened
       (save-selected-window
@@ -2613,7 +3044,7 @@
 
 (defun idlwave-shell-examine-display-clear ()
   (interactive)
-  (save-excursion
+  (save-excursion 
     (let ((buf (get-buffer "*Examine*")))
       (when (bufferp buf)
 	(set-buffer buf)
@@ -2621,33 +3052,30 @@
 	(erase-buffer)
 	(setq buffer-read-only t)))))
 
-(defun idlwave-retrieve-expression-from-level (expr level routine help)
+(defun idlwave-retrieve-expression-from-level (expr level)
   "Return IDL command to print the expression EXPR from stack level LEVEL.
 
-It does not seem possible to evaluate an expression on a differnt
-level than the current.  Therefore, this function retrieves *copies* of
-the variables involved in the expression from the desired level in the
-calling stack.  The copies are given some unlikely names on the
-*current* level, and the expression is then evaluated on the *current*
-level.
-
-Since this function depends upon the undocumented IDL routine routine_names,
-there is no guarantee that this will work with future versions of IDL."
-  (let ((prefix "___")         ;; No real variables should starts with this.
-	(fetch (- 0 level))
+It does not seem possible to evaluate an expression on a different
+level than the current.  Therefore, this function retrieves variables
+by reference from other levels, and then includes that variable in
+place of the chosen one.
+
+Since this function depends upon the undocumented IDL routine
+routine_names, there is no guarantee that this will work with future
+versions of IDL."
+  (let ((fetch (- 0 level))
 	(start 0)
-        var tvar fetch-vars pre post)
-
-     ;; FIXME: In the following we try to find the variables in expression
+        var rnvar pre post)
+
+    ;; FIXME: In the following we try to find the variables in expression
     ;; This is quite empirical - I don't know in what situations this will
     ;; break.  We will look for identifiers and exclude cases where we
     ;; know it is not a variable.  To distinguish array references from
     ;; function calls, we require that arrays use [] instead of ()
-
+    
     (while (string-match
-	    "\\(\\`\\|[^a-zA-Z0-9$_]\\)\\([a-zA-Z][a-zA-Z0-9$_]*\\)\\([^a-zA-Z0-9$_]\\|\\'\\)" expr start)
+	    "\\(\\`\\|[^a-zA-Z0-9$_][ \t]*\\)\\([a-zA-Z][a-zA-Z0-9$_]*\\)\\([ \t]*[^a-zA-Z0-9$_]\\|\\'\\)" expr start)
       (setq var (match-string 2 expr)
-	    tvar (concat prefix var)
 	    start (match-beginning 2)
 	    pre (substring expr 0 (match-beginning 2))
 	    post (substring expr (match-end 2)))
@@ -2659,22 +3087,16 @@
        ((string-match "\\`(" post))              ;; a function
        ((string-match "->[ \t]*\\'" pre))        ;; a method
        ((string-match "\\.\\'" pre))             ;; structure member
-       (t ;; seems to be a variable - arrange to get it and replace
-	;; its name in the expression with the temproary name.
-	(push (cons var tvar) fetch-vars)
-	(setq expr (concat pre tvar post))))
-      (if (= start 0) (setq start 1)))
-    ;; Make a command line that first copies the relevant variables
-    ;; and then prints the expression.
-    (concat
-     (mapconcat
-      (lambda (x)
-	(format "%s = routine_names('%s',fetch=%d)" (cdr x) (car x) fetch))
-      (nreverse fetch-vars)
-      " & ")
-     "\n"
-     (idlwave-shell-help-statement help expr)
-     (format " ; [-%d:%s]" level routine))))
+       ((and (string-match "\\([\"\']\\)[^\1]*$" pre)
+	     (string-match (concat "^[^" (match-string 1 pre) "]*" 
+				   (match-string 1 pre)) post)))
+       (t ;; seems to be a variable - replace its name in the
+	  ;; expression with the fetch.
+	(setq rnvar (format "(routine_names('%s',fetch=%d))" var fetch)
+	      expr  (concat pre rnvar post)
+	      start (+ start (length rnvar))))))
+    expr))
+
 
 (defun idlwave-shell-help-statement (help expr)
   "Construct a help statement for printing expression EXPR.
@@ -2684,13 +3106,13 @@
 size(___,/DIMENSIONS)"
   (cond
    ((null help) (concat "print, " expr))
-   ((stringp help)
+   ((stringp help) 
     (if (string-match "\\(^\\|[^_]\\)\\(___\\)\\([^_]\\|$\\)" help)
 	(concat (substring help 0 (match-beginning 2))
 		expr
 		(substring help (match-end 2)))))
    (t (concat "help, " expr))))
-
+   
 
 (defun idlwave-shell-examine-highlight ()
   "Highlight the most recent IDL output."
@@ -2698,7 +3120,7 @@
 	 (process (get-buffer-process buffer))
 	 (process-mark (if process (process-mark process)))
 	 output-begin output-end)
-    (save-excursion
+    (save-excursion 
       (set-buffer buffer)
       (goto-char process-mark)
       (beginning-of-line)
@@ -2706,26 +3128,26 @@
       (re-search-backward idlwave-shell-prompt-pattern nil t)
       (beginning-of-line 2)
       (setq output-begin (point)))
-
+	    
     ;; First make sure the shell window is visible
     (idlwave-display-buffer (idlwave-shell-buffer)
 			    nil (idlwave-shell-shell-frame))
     (if (and idlwave-shell-output-overlay process-mark)
-	(move-overlay idlwave-shell-output-overlay
+	(move-overlay idlwave-shell-output-overlay 
 		      output-begin output-end buffer))))
 
 (defun idlwave-shell-delete-output-overlay ()
-  (if (eq this-command 'idlwave-shell-mouse-nop)
-      nil
+  (unless (or (eq this-command 'idlwave-shell-mouse-nop)
+	      (eq this-command 'handle-switch-frame))
     (condition-case nil
 	(if idlwave-shell-output-overlay
 	    (delete-overlay idlwave-shell-output-overlay))
       (error nil))
     (remove-hook 'pre-command-hook 'idlwave-shell-delete-output-overlay)))
-
+  
 (defun idlwave-shell-delete-expression-overlay ()
-  (if (eq this-command 'idlwave-shell-mouse-nop)
-      nil
+  (unless (or (eq this-command 'idlwave-shell-mouse-nop)
+	      (eq this-command 'handle-switch-frame))
     (condition-case nil
 	(if idlwave-shell-expression-overlay
 	    (delete-overlay idlwave-shell-expression-overlay))
@@ -2736,7 +3158,7 @@
   "Alist of breakpoints.
 A breakpoint is a cons cell \(\(file line\) . \(\(index module\) data\)\)
 
-The car is the frame for the breakpoint:
+The car is the `frame' for the breakpoint:
 file - full path file name.
 line - line number of breakpoint - integer.
 
@@ -2746,13 +3168,18 @@
 
 Remaining elements of the cdr:
 data - Data associated with the breakpoint by idlwave-shell currently
-contains two items:
+contains four items:
 
 count - number of times to execute breakpoint. When count reaches 0
-the breakpoint is cleared and removed from the alist.
-command - command to execute when breakpoint is reached, either a
-lisp function to be called with `funcall' with no arguments or a
-list to be evaluated with `eval'.")
+  the breakpoint is cleared and removed from the alist.
+
+command - command to execute when breakpoint is reached, either a 
+  lisp function to be called with `funcall' with no arguments or a
+  list to be evaluated with `eval'.
+
+condition - any condition to apply to the breakpoint.
+
+disabled - whether the bp is disabled")
 
 (defun idlwave-shell-run-region (beg end &optional n)
   "Compile and run the region using the IDL process.
@@ -2779,9 +3206,11 @@
           (insert "\nend\n"))
       (save-buffer 0)))
   (idlwave-shell-send-command (concat ".run " idlwave-shell-temp-pro-file)
-			      nil (idlwave-shell-hide-p 'run))
+			      nil 
+			      (if (idlwave-shell-hide-p 'run) 'mostly)
+			      nil t)
   (if n
-      (idlwave-display-buffer (idlwave-shell-buffer)
+      (idlwave-display-buffer (idlwave-shell-buffer) 
 			      nil (idlwave-shell-shell-frame))))
 
 (defun idlwave-shell-evaluate-region (beg end &optional n)
@@ -2792,7 +3221,7 @@
   (interactive "r\nP")
   (idlwave-shell-send-command (buffer-substring beg end))
   (if n
-      (idlwave-display-buffer (idlwave-shell-buffer)
+      (idlwave-display-buffer (idlwave-shell-buffer) 
 			      nil (idlwave-shell-shell-frame))))
 
 (defun idlwave-shell-delete-temp-files ()
@@ -2816,41 +3245,43 @@
       (display-buffer buf not-this-window-p frame)
     ;; For Emacs, we need to force the frame ourselves.
     (let ((this-frame (selected-frame)))
-      (if (frame-live-p frame)
-          (select-frame frame))
-      (if (eq this-frame (selected-frame))
-          ;; same frame:  use display buffer, to make sure the current
-          ;; window stays.
-          (display-buffer buf)
-        ;; different frame
-        (if (one-window-p)
-            ;; only window:  switch
-            (progn
-              (switch-to-buffer buf)
-              (selected-window))   ; must return the window.
-	  ;; several windows - use display-buffer
-          (display-buffer buf not-this-window-p))))))
+      (save-excursion ;; make sure we end up in the same buffer
+	(if (frame-live-p frame)
+	    (select-frame frame))
+	(if (eq this-frame (selected-frame))
+	    ;; same frame:  use display buffer, to make sure the current
+	    ;; window stays.
+	    (display-buffer buf)
+	  ;; different frame
+	  (if (one-window-p)
+	      ;; only window:  switch
+	      (progn
+		(switch-to-buffer buf)
+		(selected-window))   ; must return the window.
+	    ;; several windows - use display-buffer
+	    (display-buffer buf not-this-window-p)))))))
 ;  (if (not (frame-live-p frame)) (setq frame nil))
 ;  (display-buffer buf not-this-window-p frame))
 
 (defvar idlwave-shell-bp-buffer " *idlwave-shell-bp*"
   "Scratch buffer for parsing IDL breakpoint lists and other stuff.")
 
-(defun idlwave-shell-bp-query ()
+(defun idlwave-shell-bp-query (&optional no-show)
   "Reconcile idlwave-shell's breakpoint list with IDL's.
 Queries IDL using the string in `idlwave-shell-bp-query'."
   (interactive)
   (idlwave-shell-send-command idlwave-shell-bp-query
-			      'idlwave-shell-filter-bp
+			      `(progn
+				(idlwave-shell-filter-bp (quote ,no-show)))
 			      'hide))
 
 (defun idlwave-shell-bp-get (bp &optional item)
-  "Get a value for a breakpoint.
-BP has the form of elements in idlwave-shell-bp-alist.
-Optional second arg ITEM is the particular value to retrieve.
-ITEM can be 'file, 'line, 'index, 'module, 'count, 'cmd, or 'data.
-'data returns a list of 'count and 'cmd.
-Defaults to 'index."
+  "Get a value for a breakpoint.  
+BP has the form of elements in idlwave-shell-bp-alist.  Optional
+second arg ITEM is the particular value to retrieve.  ITEM can be
+'file, 'line, 'index, 'module, 'count, 'cmd, 'condition, 'disabled or
+'data.  'data returns a list of 'count, 'cmd and 'condition.  Defaults
+to 'index."
   (cond
    ;; Frame
    ((eq item 'line) (nth 1 (car bp)))
@@ -2860,15 +3291,17 @@
    ((eq item 'count) (nth 0 (cdr (cdr bp))))
    ((eq item 'cmd) (nth 1 (cdr (cdr bp))))
    ((eq item 'condition) (nth 2 (cdr (cdr bp))))
+   ((eq item 'disabled) (nth 3 (cdr (cdr bp))))
    ;; IDL breakpoint info
    ((eq item 'module) (nth 1 (car (cdr bp))))
    ;;    index - default
    (t (nth 0 (car (cdr bp))))))
 
-(defun idlwave-shell-filter-bp ()
-  "Get the breakpoints from `idlwave-shell-command-output'.
-Create `idlwave-shell-bp-alist' updating breakpoint count and command data
-from previous breakpoint list."
+(defun idlwave-shell-filter-bp (&optional no-show)
+  "Get the breakpoints from `idlwave-shell-command-output'.  Create
+`idlwave-shell-bp-alist' updating breakpoint count and command data
+from previous breakpoint list.  If NO-SHOW is set, don't update the
+breakpoint overlays."
   (save-excursion
     (set-buffer (get-buffer-create idlwave-shell-bp-buffer))
     (erase-buffer)
@@ -2878,54 +3311,71 @@
 	  ;; Searching the breakpoints
 	  ;; In IDL 5.5, the breakpoint reporting format changed.
 	  (bp-re54 "^[ \t]*\\([0-9]+\\)[ \t]+\\(\\S-+\\)?[ \t]+\\([0-9]+\\)[ \t]+\\(\\S-+\\)")
-	  (bp-re55 "^\\s-*\\([0-9]+\\)\\s-+\\([0-9]+\\)\\s-+\\(Uncompiled\\|Func=\\|Pro=\\)\\([a-zA-Z][a-zA-Z0-9$_:]*\\)\\(,[^\n]*\n\\)?\\s-+\\(\\S-+\\)")
+	  (bp-re55 
+	   (concat 
+	    "^\\s-*\\([0-9]+\\)"    ; 1 index
+	    "\\s-+\\([0-9]+\\)"     ; 2 line number
+	    "\\s-+\\(Uncompiled\\|" ; 3-6 either uncompiled or routine name
+	    "\\(\\(Func=\\|Pro=\\)\\(\\$?[a-zA-Z][a-zA-Z0-9$_:]*\\$?\\)\\)\\)"
+	    "\\(\\s-*,\\s-*After=[0-9]+/\\([0-9]+\\)?\\)?" ; 7-8 After part
+	    "\\(\\s-*,\\s-*\\(BreakOnce\\)\\)?"            ; 9-10 BreakOnce
+	    "\\(\\s-*,\\s-*\\(Condition='\\(.*\\)'\\)\n?\\)?" ; 11-13 Condition
+	    "\\(\\s-*,\\s-*\\(Disabled\\)\n?\\)?"          ; 14-15 Disabled
+	    "\\s-+\\(\\S-+\\)"))                           ; 16 File name
 	  file line index module
+	  count condition disabled
 	  bp-re indmap)
       (setq idlwave-shell-bp-alist (list nil))
       ;; Search for either header type, and set the correct regexp
-      (when (or
+      (when (or 
 	     (if (re-search-forward "^\\s-*Index.*\n\\s-*-" nil t)
-		 (setq bp-re bp-re54    ; versions <= 5.4
-		       indmap '(1 2 3 4)))
-	     (if (re-search-forward
+		 (setq bp-re bp-re54    ; versions <= 5.4 
+		       indmap '(1 2 3 4))) ;index module line file
+	     (if (re-search-forward 
 		  "^\\s-*Index\\s-*Line\\s-*Attributes\\s-*File" nil t)
 		 (setq bp-re bp-re55    ; versions >= 5.5
-		       indmap '(1 4 2 6))))
-	;; There seems to be a breakpoint listing here.
-	;; Parse breakpoint lines.
-	;; Breakpoints have the form
-        ;;    for IDL<=v5.4:
-	;;  Index Module Line File
-	;;  All separated by whitespace.
-	;;  Module may be missing if the file is not compiled.
-        ;;    for IDL>=v5.5:
-	;;  Index Line Attributes File
-	;;    (attributes replaces module, "Uncompiled" included)
+		       indmap '(1 6 2 16)))) ; index module line file
+	;; There seems to be a breakpoint listing here, parse breakpoint lines.
 	(while (re-search-forward bp-re nil t)
-	  (setq index (match-string (nth 0 indmap))
+	  (setq index (string-to-int (match-string (nth 0 indmap)))
 		module (match-string (nth 1 indmap))
 		line (string-to-int (match-string (nth 2 indmap)))
 		file (idlwave-shell-file-name (match-string (nth 3 indmap))))
+	  (if (eq bp-re bp-re55)
+	      (setq count (if (match-string 10) 1 
+			    (if (match-string 8)
+				(string-to-int (match-string 8))))
+		    condition (match-string 13)
+		    disabled (not (null (match-string 15)))))
+		    
 	  ;; Add the breakpoint info to the list
 	  (nconc idlwave-shell-bp-alist
 		 (list (cons (list file line)
 			     (list
 			      (list index module)
-			      ;; idlwave-shell data: count, command
-			      nil nil))))))
+			      ;; bp data: count, command, condition, disabled
+			      count nil condition disabled))))))
       (setq idlwave-shell-bp-alist (cdr idlwave-shell-bp-alist))
-      ;; Update count, commands of breakpoints
-      (mapcar 'idlwave-shell-update-bp old-bp-alist)))
+      ;; Update breakpoint data
+      (if (eq bp-re bp-re54) 
+	  (mapcar 'idlwave-shell-update-bp old-bp-alist)
+	(mapcar 'idlwave-shell-update-bp-command-only old-bp-alist))))
   ;; Update the breakpoint overlays
-  (idlwave-shell-update-bp-overlays)
+  (unless no-show (idlwave-shell-update-bp-overlays))
   ;; Return the new list
   idlwave-shell-bp-alist)
 
-(defun idlwave-shell-update-bp (bp)
+(defun idlwave-shell-update-bp-command-only (bp)
+  (idlwave-shell-update-bp bp t))
+
+(defun idlwave-shell-update-bp (bp &optional command-only)
   "Update BP data in breakpoint list.
 If BP frame is in `idlwave-shell-bp-alist' updates the breakpoint data."
   (let ((match (assoc (car bp) idlwave-shell-bp-alist)))
-    (if match (setcdr (cdr match) (cdr (cdr bp))))))
+    (if match 
+	(if command-only 
+	    (setf (nth 1 (cdr (cdr match))) (nth 1 (cdr (cdr match))))
+	  (setcdr (cdr match) (cdr (cdr bp)))))))
 
 (defun idlwave-shell-set-bp-data (bp data)
   "Set the data of BP to DATA."
@@ -2948,42 +3398,40 @@
   (let*
       ((bp-file (idlwave-shell-bp-get bp 'file))
        (bp-module (idlwave-shell-bp-get bp 'module))
-       (internal-file-list (cdr (assoc bp-module idlwave-shell-sources-alist))))
+       (internal-file-list 
+	(cdr (assoc bp-module idlwave-shell-sources-alist))))
     (if (and internal-file-list
 	     (equal bp-file (nth 0 internal-file-list)))
         (nth 1 internal-file-list)
       bp-file)))
 
-(defun idlwave-shell-set-bp (bp)
-  "Try to set a breakpoint BP.
-
+(defun idlwave-shell-set-bp (bp &optional no-show)
+  "Try to set a breakpoint BP.  
 The breakpoint will be placed at the beginning of the statement on the
 line specified by BP or at the next IDL statement if that line is not
-a statement.
-Determines IDL's internal representation for the breakpoint which may
-have occurred at a different line then used with the breakpoint
-command."
-
+a statement.  Determines IDL's internal representation for the
+breakpoint, which may have occurred at a different line than
+specified.  If NO-SHOW is non-nil, don't do any updating."
   ;; Get and save the old breakpoints
-  (idlwave-shell-send-command
+  (idlwave-shell-send-command 
    idlwave-shell-bp-query
-   '(progn
-      (idlwave-shell-filter-bp)
-      (setq idlwave-shell-old-bp idlwave-shell-bp-alist))
+   `(progn
+     (idlwave-shell-filter-bp (quote ,no-show))
+     (setq idlwave-shell-old-bp idlwave-shell-bp-alist))
    'hide)
   ;; Get sources for IDL compiled procedures followed by setting
   ;; breakpoint.
   (idlwave-shell-send-command
    idlwave-shell-sources-query
    `(progn
-      (idlwave-shell-sources-filter)
-      (idlwave-shell-set-bp2 (quote ,bp)))
+     (idlwave-shell-sources-filter)
+     (idlwave-shell-set-bp2 (quote ,bp) (quote ,no-show)))
    'hide))
 
-(defun idlwave-shell-set-bp2 (bp)
+(defun idlwave-shell-set-bp2 (bp &optional no-show)
   "Use results of breakpoint and sources query to set bp.
 Use the count argument with IDLs breakpoint command.
-We treat a count of 1 as a temporary breakpoint.
+We treat a count of 1 as a temporary breakpoint. 
 Counts greater than 1 use the IDL AFTER=count keyword to break
 only after reaching the statement count times."
   (let*
@@ -2995,28 +3443,30 @@
               ((> arg 1)
                (format ",after=%d" arg))))
        (condition (idlwave-shell-bp-get bp 'condition))
-       (key (concat key
+       (key (concat key 
 		    (if condition (concat ",CONDITION=\"" condition "\""))))
        (line (idlwave-shell-bp-get bp 'line)))
     (idlwave-shell-send-command
-     (concat "breakpoint,'"
+     (concat "breakpoint,'" 
 	     (idlwave-shell-sources-bp bp) "',"
 	     (if (integerp line) (setq line (int-to-string line)))
 	     key)
      ;; Check for failure and look for breakpoint in IDL's list
      `(progn
-       (if (idlwave-shell-set-bp-check (quote ,bp))
-           (idlwave-shell-set-bp3 (quote ,bp))))
+	(if (idlwave-shell-set-bp-check (quote ,bp))
+           (idlwave-shell-set-bp3 (quote ,bp) (quote ,no-show))))
      ;; hide output?
      (idlwave-shell-hide-p 'breakpoint)
-     'preempt)))
-
-(defun idlwave-shell-set-bp3 (bp)
+     'preempt t)))
+
+(defun idlwave-shell-set-bp3 (bp &optional no-show)
   "Find the breakpoint in IDL's internal list of breakpoints."
   (idlwave-shell-send-command idlwave-shell-bp-query
 			      `(progn
-                                (idlwave-shell-filter-bp)
-                                (idlwave-shell-new-bp (quote ,bp)))
+				 (idlwave-shell-filter-bp (quote ,no-show))
+				 (idlwave-shell-new-bp (quote ,bp))
+				 (unless (quote ,no-show)
+				   (idlwave-shell-update-bp-overlays)))
 			      'hide
 			      'preempt))
 
@@ -3025,6 +3475,20 @@
 Returns nil if frame not found."
   (assoc frame idlwave-shell-bp-alist))
 
+(defun idlwave-shell-find-current-bp ()
+  "Find breakpoint here, or at halt location."
+  (let ((bp (idlwave-shell-find-bp (idlwave-shell-current-frame))))
+    (when (not bp)
+      ;; Try moving to beginning of halted-at statement
+      (save-excursion
+	(idlwave-shell-goto-frame)
+	(idlwave-beginning-of-statement)
+	(setq bp (idlwave-shell-find-bp (idlwave-shell-current-frame))))
+      (unless bp
+	(beep)
+	(message "Cannot identify breakpoint for this line")))
+    bp))
+
 (defun idlwave-shell-new-bp (bp)
   "Find the new breakpoint in IDL's list and update with DATA.
 The actual line number for a breakpoint in IDL may be different than
@@ -3052,71 +3516,159 @@
       (message "Failed to identify breakpoint in IDL"))))
 
 (defvar idlwave-shell-bp-overlays nil
-  "List of overlays marking breakpoints")
+  "Alist of overlays marking breakpoints")
 
 (defun idlwave-shell-update-bp-overlays ()
   "Update the overlays which mark breakpoints in the source code.
 Existing overlays are recycled, in order to minimize consumption."
+  ;(message "Updating Overlays")
   (when idlwave-shell-mark-breakpoints
-    (let ((bp-list idlwave-shell-bp-alist)
-	  (ov-list idlwave-shell-bp-overlays)
-	  ov bp)
+    (let ((ov-alist (copy-alist idlwave-shell-bp-overlays))
+	  (bp-list idlwave-shell-bp-alist)
+	  (use-glyph (and (memq idlwave-shell-mark-breakpoints '(t glyph))
+			  idlwave-shell-bp-glyph))
+	  ov ov-list bp buf old-buffers win)
+
       ;; Delete the old overlays from their buffers
-      (while (setq ov (pop ov-list))
-	(delete-overlay ov))
-      (setq ov-list idlwave-shell-bp-overlays
-	    idlwave-shell-bp-overlays nil)
+      (if ov-alist 
+	  (while (setq ov-list (pop ov-alist))
+	    (while (setq ov (pop (cdr ov-list)))
+	      (add-to-list 'old-buffers (overlay-buffer ov))
+	      (delete-overlay ov))))
+      
+      (setq ov-alist idlwave-shell-bp-overlays
+	    idlwave-shell-bp-overlays 
+	    (if idlwave-shell-bp-glyph
+		(mapcar 'list (mapcar 'car idlwave-shell-bp-glyph))
+	      (list (list 'bp))))
       (while (setq bp (pop bp-list))
 	(save-excursion
 	  (idlwave-shell-goto-frame (car bp))
 	  (let* ((end (progn (end-of-line 1) (point)))
 		 (beg (progn (beginning-of-line 1) (point)))
-		 (ov (or (pop ov-list)
-			 (idlwave-shell-make-new-bp-overlay))))
+		 (condition (idlwave-shell-bp-get bp 'condition))
+		 (count (idlwave-shell-bp-get bp 'count))
+		 (disabled (idlwave-shell-bp-get bp 'disabled))
+		 (type (if idlwave-shell-bp-glyph
+			   (cond
+			    (condition 'bp-cond )
+			    (count
+			     (cond
+			      ((<= count 0) 'bp)
+			      ((<= count 4)
+			       (intern
+				(concat "bp-" (number-to-string count))))
+			      (t 'bp-n)))
+			    (t 'bp))
+			 'bp))
+		 (help-list 
+		  (delq nil
+			(list
+			 (if count
+			     (concat "n=" (int-to-string count)))
+			 (if condition
+			     (concat "condition: " condition))
+			 (if disabled "disabled"))))
+		 (help-text (if help-list 
+				(mapconcat 'identity help-list ",")))
+		 (full-type (if disabled
+				(intern (concat (symbol-name type)
+						"-disabled"))
+			      type))
+		 (ov-existing (assq full-type ov-alist))
+		 (ov (or (and (cdr ov-existing)
+			      (pop (cdr ov-existing)))
+			 (idlwave-shell-make-new-bp-overlay 
+			  type disabled help-text)))
+		 match)
 	    (move-overlay ov beg end)
-	    (push ov idlwave-shell-bp-overlays)))))))
+	    (if (setq match (assq full-type idlwave-shell-bp-overlays))
+		(push ov (cdr match))
+	      (nconc idlwave-shell-bp-overlays
+		     (list (list full-type ov)))))
+	  ;; Take care of margins if using a glyph
+	  (when use-glyph
+	    (if old-buffers 
+		(setq old-buffers (delq (current-buffer) old-buffers)))
+	    (if (fboundp 'set-specifier) ;; XEmacs
+		(set-specifier left-margin-width (cons (current-buffer) 2))
+	      (setq left-margin-width 2))
+	    (if (setq win (get-buffer-window (current-buffer) t))
+		(set-window-buffer win (current-buffer))))))
+      (if use-glyph
+	  (while (setq buf (pop old-buffers))
+	    (with-current-buffer buf
+	      (if (fboundp 'set-specifier) ;; XEmacs
+		  (set-specifier left-margin-width (cons (current-buffer) 0))
+		(setq left-margin-width 0))
+	      (if (setq win (get-buffer-window buf t))
+		  (set-window-buffer win buf))))))))
+
 
 (defvar idlwave-shell-bp-glyph)
-(defun idlwave-shell-make-new-bp-overlay ()
-  "Make a new overlay for highlighting breakpoints.
-This stuff is stringly dependant upon the version of Emacs."
-  (let ((ov (make-overlay 1 1)))
+(defun idlwave-shell-make-new-bp-overlay (&optional type disabled help)
+  "Make a new overlay for highlighting breakpoints.  
+
+This stuff is strongly dependant upon the version of Emacs.  If TYPE
+is passed, make an overlay of that type ('bp or 'bp-cond, currently
+only for glyphs).  If HELP is set, use it to make a tooltip with that
+text popup."
+  (let ((ov (make-overlay 1 1))
+	(use-glyph (and (memq idlwave-shell-mark-breakpoints '(t glyph))
+			idlwave-shell-bp-glyph))
+	(type (or type 'bp))
+	(face (if disabled 
+		  idlwave-shell-disabled-breakpoint-face
+		idlwave-shell-breakpoint-face)))
     (if (featurep 'xemacs)
 	;; This is XEmacs
 	(progn
-	  (cond
+	  (cond 
+	   ;; tty's cannot display glyphs
 	   ((eq (console-type) 'tty)
-	    ;; tty's cannot display glyphs
-	    (set-extent-property ov 'face idlwave-shell-breakpoint-face))
-	   ((and (memq idlwave-shell-mark-breakpoints '(t glyph))
-		 idlwave-shell-bp-glyph)
-	    ;; use the glyph
-	    (set-extent-property ov 'begin-glyph idlwave-shell-bp-glyph))
+	    (set-extent-property ov 'face face))
+	    
+	   ;; use the glyph
+	   (use-glyph
+	    (let ((glyph (cdr (assq type idlwave-shell-bp-glyph))))
+	      (if disabled (setq glyph (car glyph)) (setq glyph (nth 1 glyph)))
+	      (set-extent-property ov 'begin-glyph glyph)
+	      (set-extent-property ov 'begin-glyph-layout 'outside-margin)))
+
+	   ;; use the face
 	   (idlwave-shell-mark-breakpoints
-	    ;; use the face
-	    (set-extent-property ov 'face idlwave-shell-breakpoint-face))
-	   (t
-	    ;; no marking
-	    nil))
+	    (set-extent-property ov 'face face))
+
+	   ;; no marking
+	   (t nil))
 	  (set-extent-priority ov -1))  ; make stop line face prevail
       ;; This is Emacs
       (cond
        (window-system
-	(if (and (memq idlwave-shell-mark-breakpoints '(t glyph))
-		 idlwave-shell-bp-glyph)   ; this var knows if glyph's possible
-	    ;; use a glyph
-	    (let ((string "@"))
-	      (put-text-property 0 1
-				 'display idlwave-shell-bp-glyph
-				 string)
+	(if use-glyph
+	    (let ((image-props (cdr (assq type idlwave-shell-bp-glyph)))
+		  string)
+	      
+	      (if disabled (setq image-props
+				 (append image-props 
+					 (list :conversion 'disabled))))
+	      (setq string 
+		   (propertize "@" 
+			       'display 
+			       (list (list 'margin 'left-margin)
+				     image-props)
+			       'mouse-face 'highlight
+			       'help-echo help))
 	      (overlay-put ov 'before-string string))
-	  (overlay-put ov 'face idlwave-shell-breakpoint-face)))
+	  ;; just the face
+	  (overlay-put ov 'face face)))
+
+       ;; use a face
        (idlwave-shell-mark-breakpoints
-	;; use a face
-	(overlay-put ov 'face idlwave-shell-breakpoint-face))
-       (t
-	;; No marking
-	nil)))
+	(overlay-put ov 'face face))
+
+       ;; No marking
+       (t nil)))
     ov))
 
 (defun idlwave-shell-edit-default-command-line (arg)
@@ -3127,22 +3679,27 @@
 
 (defun idlwave-shell-execute-default-command-line (arg)
   "Execute a command line.  On first use, ask for the command.
-Also with prefix arg, ask for the command.  You can also uase the command
+Also with prefix arg, ask for the command.  You can also use the command
 `idlwave-shell-edit-default-command-line' to edit the line."
   (interactive "P")
-  (if (or (not idlwave-shell-command-line-to-execute)
-	  arg)
-      (setq idlwave-shell-command-line-to-execute
-	    (read-string "IDL> " idlwave-shell-command-line-to-execute)))
+  (cond 
+   ((equal arg '(16))
+    (setq idlwave-shell-command-line-to-execute nil))
+   ((equal arg '(4))
+    (setq idlwave-shell-command-line-to-execute 
+	  (read-string "IDL> " idlwave-shell-command-line-to-execute))))
   (idlwave-shell-reset 'hidden)
-  (idlwave-shell-send-command idlwave-shell-command-line-to-execute
-			      '(idlwave-shell-redisplay 'hide)))
+  (idlwave-shell-send-command 
+   (or idlwave-shell-command-line-to-execute
+       (with-current-buffer (idlwave-shell-buffer)
+	 (ring-ref comint-input-ring 0)))
+   '(idlwave-shell-redisplay 'hide)))
 
 (defun idlwave-shell-save-and-run ()
   "Save file and run it in IDL.
 Runs `save-buffer' and sends a '.RUN' command for the associated file to IDL.
 When called from the shell buffer, re-run the file which was last handled by
-one of the save-and-.. commands."
+one of the save-and-.. commands."  
   (interactive)
   (idlwave-shell-save-and-action 'run))
 
@@ -3158,7 +3715,7 @@
   "Save file and batch it in IDL.
 Runs `save-buffer' and sends a '@file' command for the associated file to IDL.
 When called from the shell buffer, re-batch the file which was last handled by
-one of the save-and-.. commands."
+one of the save-and-.. commands."  
   (interactive)
   (idlwave-shell-save-and-action 'batch))
 
@@ -3170,6 +3727,8 @@
   ;; Remove the stop overlay.
   (if idlwave-shell-stop-line-overlay
       (delete-overlay idlwave-shell-stop-line-overlay))
+  (if idlwave-shell-is-stopped
+      (idlwave-shell-electric-debug-all-off))
   (setq idlwave-shell-is-stopped nil)
   (setq overlay-arrow-string nil)
   (let (buf)
@@ -3194,9 +3753,9 @@
 		       (t (error "Unknown action %s" action)))
 		 idlwave-shell-last-save-and-action-file)
 	 'idlwave-shell-maybe-update-routine-info
-	 (idlwave-shell-hide-p 'run))
+	 (if (idlwave-shell-hide-p 'run) 'mostly) nil t)
 	(idlwave-shell-bp-query))
-    (let ((msg (format "No such file %s"
+    (let ((msg (format "No such file %s" 
 		       idlwave-shell-last-save-and-action-file)))
       (setq idlwave-shell-last-save-and-action-file nil)
       (error msg))))
@@ -3208,7 +3767,7 @@
 	       (memq 'compile-buffer idlwave-auto-routine-info-updates))
 	   idlwave-query-shell-for-routine-info
 	   idlwave-routines)
-      (idlwave-shell-update-routine-info t nil 'wait)))
+      (idlwave-shell-update-routine-info t nil wait)))
 
 (defvar idlwave-shell-sources-query "help,/source,/full"
   "IDL command to obtain source files for compiled procedures.")
@@ -3222,14 +3781,14 @@
 (defun idlwave-shell-sources-query ()
   "Determine source files for IDL compiled procedures.
 Queries IDL using the string in `idlwave-shell-sources-query'."
-  (interactive)
+'  (interactive)
   (idlwave-shell-send-command idlwave-shell-sources-query
 			      'idlwave-shell-sources-filter
 			      'hide))
 
 (defun idlwave-shell-sources-filter ()
   "Get source files from `idlwave-shell-sources-query' output.
-Create `idlwave-shell-sources-alist' consisting of
+Create `idlwave-shell-sources-alist' consisting of 
 list elements of the form:
  (module name . (source-file-truename idlwave-internal-filename))."
   (save-excursion
@@ -3306,14 +3865,16 @@
     (save-excursion
       (set-buffer idlwave-shell-error-buffer)
       (goto-char idlwave-shell-error-last)
-      (if (or (re-search-forward idlwave-shell-syntax-error nil t)
-              (re-search-forward idlwave-shell-other-error nil t))
+      (if (or
+	   (re-search-forward idlwave-shell-syntax-error nil t)
+	   (re-search-forward idlwave-shell-other-error nil t))
           (progn
             (setq frame
                   (list
                    (save-match-data
                      (idlwave-shell-file-name
-                      (buffer-substring (match-beginning 1) (match-end 1))))
+                      (buffer-substring (match-beginning 1 ) 
+					(match-end 1))))
                    (string-to-int
                     (buffer-substring (match-beginning 2)
                                       (match-end 2)))))
@@ -3326,7 +3887,7 @@
       (setq idlwave-shell-error-last (point)))
     (if frame
         (progn
-          (idlwave-shell-display-line frame col))
+          (idlwave-shell-display-line frame col 'no-debug))
       (beep)
       (message "No more errors."))))
 
@@ -3340,12 +3901,20 @@
 	(file-truename name def-dir)
       (expand-file-name name def-dir))))
 
-;; Keybindings --------------------------------------------------------------
+;; Keybindings ------------------------------------------------------------
 
 (defvar idlwave-shell-mode-map (copy-keymap comint-mode-map)
   "Keymap for idlwave-mode.")
+(defvar idlwave-shell-electric-debug-mode-map (make-sparse-keymap))
 (defvar idlwave-shell-mode-prefix-map (make-sparse-keymap))
 (fset 'idlwave-shell-mode-prefix-map idlwave-shell-mode-prefix-map)
+(defvar idlwave-mode-prefix-map (make-sparse-keymap))
+(fset 'idlwave-mode-prefix-map idlwave-mode-prefix-map)
+
+(defun idlwave-shell-define-key-both (key hook)
+  "Define a key in both the shell and buffer mode maps."
+  (define-key idlwave-mode-map key hook)
+  (define-key idlwave-shell-mode-map key hook))
 
 ;(define-key idlwave-shell-mode-map "\M-?" 'comint-dynamic-list-completions)
 ;(define-key idlwave-shell-mode-map "\t" 'comint-dynamic-complete)
@@ -3371,13 +3940,13 @@
 
 ;; The mouse bindings for PRINT and HELP
 (idlwave-shell-define-key-both
- (if (featurep 'xemacs)
-     [(shift button2)]
+ (if (featurep 'xemacs) 
+     [(shift button2)] 
    [(shift down-mouse-2)])
  'idlwave-shell-mouse-print)
 (idlwave-shell-define-key-both
- (if (featurep 'xemacs)
-     [(control meta button2)]
+ (if (featurep 'xemacs) 
+     [(control meta button2)] 
    [(control meta down-mouse-2)])
   'idlwave-shell-mouse-help)
 (idlwave-shell-define-key-both
@@ -3386,14 +3955,14 @@
    [(control shift down-mouse-2)])
  'idlwave-shell-examine-select)
 ;; Add this one from the idlwave-mode-map
-(define-key idlwave-shell-mode-map
+(define-key idlwave-shell-mode-map 
   (if (featurep 'xemacs)
       [(shift button3)]
     [(shift mouse-3)])
   'idlwave-mouse-context-help)
 
 ;; For Emacs, we need to turn off the button release events.
-(defun idlwave-shell-mouse-nop (event)
+(defun idlwave-shell-mouse-nop (event) 
   (interactive "e"))
 (unless (featurep 'xemacs)
   (idlwave-shell-define-key-both
@@ -3403,43 +3972,51 @@
   (idlwave-shell-define-key-both
    [(control meta mouse-2)] 'idlwave-shell-mouse-nop))
 
-
+  
 ;; The following set of bindings is used to bind the debugging keys.
-;; If `idlwave-shell-activate-prefix-keybindings' is non-nil, the first key
-;; in the list gets bound the C-c C-d prefix map.
-;; If `idlwave-shell-debug-modifiers' is non-nil, the second key
-;; in the list gets bound with the specified modifiers in both
-;; `idlwave-mode-map' and `idlwave-shell-mode-map'.
-
-;; Used keys:   abcdef hi klmnopqrs u wxyz
-;; Unused keys:       g  j         t v
+;; If `idlwave-shell-activate-prefix-keybindings' is non-nil, the
+;; first key in the list gets bound the C-c C-d prefix map.  If
+;; `idlwave-shell-debug-modifiers' is non-nil, the second key in the
+;; list gets bound with the specified modifiers in both
+;; `idlwave-mode-map' and `idlwave-shell-mode-map'.  The next list
+;; item, if non-nil, means to bind this as a single key in the
+;; electric-debug-mode-map.
+;; 
+;; [C-c C-d]-binding   debug-modifier-key command bind-electric-debug buf-only
+;; Used keys:   abcdef hijklmnopqrstuvwxyz 
+;; Unused keys:       g             
 (let* ((specs
-	'(([(control ?b)]   ?b   idlwave-shell-break-here)
-	  ([(control ?i)]   ?i   idlwave-shell-break-in)
-	  ([(control ?d)]   ?d   idlwave-shell-clear-current-bp)
-	  ([(control ?a)]   ?a   idlwave-shell-clear-all-bp)
-	  ([(control ?s)]   ?s   idlwave-shell-step)
-	  ([(control ?n)]   ?n   idlwave-shell-stepover)
-	  ([(control ?k)]   ?k   idlwave-shell-skip)
-	  ([(control ?u)]   ?u   idlwave-shell-up)
-	  ([(control ?o)]   ?o   idlwave-shell-out)
-	  ([(control ?m)]   ?m   idlwave-shell-return)
-	  ([(control ?h)]   ?h   idlwave-shell-to-here)
-	  ([(control ?r)]   ?r   idlwave-shell-cont)
+	'(([(control ?b)]   ?b   idlwave-shell-break-here t t)
+	  ([(control ?i)]   ?i   idlwave-shell-break-in t t)
+	  ([(control ?j)]   ?j   idlwave-shell-break-this-module t t)
+	  ([(control ?d)]   ?d   idlwave-shell-clear-current-bp t)
+	  ([(control ?a)]   ?a   idlwave-shell-clear-all-bp t)
+	  ([(control ?\\)]  ?\\  idlwave-shell-toggle-enable-current-bp t)
+	  ([(control ?s)]   ?s   idlwave-shell-step t)
+	  ([(control ?n)]   ?n   idlwave-shell-stepover t)
+	  ([(control ?k)]   ?k   idlwave-shell-skip t)
+	  ([(control ?u)]   ?u   idlwave-shell-up t)
+	  ([(control ?o)]   ?o   idlwave-shell-out t)
+	  ([(control ?m)]   ?m   idlwave-shell-return t)
+	  ([(control ?h)]   ?h   idlwave-shell-to-here t t)
+	  ([(control ?r)]   ?r   idlwave-shell-cont t)
 	  ([(control ?y)]   ?y   idlwave-shell-execute-default-command-line)
-	  ([(control ?z)]   ?z   idlwave-shell-reset)
+	  ([(control ?z)]   ?z   idlwave-shell-reset t)
 	  ([(control ?q)]   ?q   idlwave-shell-quit)
-	  ([(control ?p)]   ?p   idlwave-shell-print)
-	  ([(??)]           ??   idlwave-shell-help-expression)
-	  ([(control ?c)]   ?c   idlwave-shell-save-and-run)
+	  ([(control ?p)]   ?p   idlwave-shell-print t)
+	  ([(        ??)]   ??   idlwave-shell-help-expression t)
+	  ([(control ?v)]   ?v   idlwave-shell-toggle-electric-debug-mode t t)
+	  ([(control ?x)]   ?x   idlwave-shell-goto-next-error)
+	  ([(control ?c)]   ?c   idlwave-shell-save-and-run t)
 	  ([(        ?@)]   ?@   idlwave-shell-save-and-batch)
-	  ([(control ?x)]   ?x   idlwave-shell-goto-next-error)
 	  ([(control ?e)]   ?e   idlwave-shell-run-region)
 	  ([(control ?w)]   ?w   idlwave-shell-resync-dirs)
-	  ([(control ?l)]   ?l   idlwave-shell-redisplay)
+	  ([(control ?l)]   ?l   idlwave-shell-redisplay t)
 	  ([(control ?t)]   ?t   idlwave-shell-toggle-toolbar)
 	  ([(control up)]   up   idlwave-shell-stack-up)
 	  ([(control down)] down idlwave-shell-stack-down)
+	  ([(        ?[)]   ?[   idlwave-shell-goto-previous-bp t t)
+	  ([(        ?])]   ?]   idlwave-shell-goto-next-bp t t)
 	  ([(control ?f)]   ?f   idlwave-shell-window)))
        (mod (cond ((and idlwave-shell-debug-modifiers
 			(listp idlwave-shell-debug-modifiers)
@@ -3449,79 +4026,154 @@
 		   '(alt))))
        (shift (memq 'shift mod))
        (mod-noshift (delete 'shift (copy-sequence mod)))
-       s k1 c2 k2 cmd)
+       s k1 c2 k2 cmd cannotshift)
   (while (setq s (pop specs))
     (setq k1  (nth 0 s)
 	  c2  (nth 1 s)
-	  cmd (nth 2 s))
-    (when idlwave-shell-activate-prefix-keybindings
-      (and k1 (define-key idlwave-shell-mode-prefix-map k1 cmd)))
+	  cmd (nth 2 s)
+	  electric (nth 3 s)
+	  only-buffer (nth 4 s)
+	  cannotshift (and shift (char-valid-p c2) (eq c2 (upcase c2))))
+    
+    ;; The regular prefix keymap.
+    (when (and idlwave-shell-activate-prefix-keybindings k1)
+      (unless only-buffer 
+	(define-key idlwave-shell-mode-prefix-map k1 cmd))
+      (define-key idlwave-mode-prefix-map k1 cmd))
+    ;; The debug modifier map
     (when (and mod window-system)
       (if (char-or-string-p c2)
 	  (setq k2 (vector (append mod-noshift
 				   (list (if shift (upcase c2) c2)))))
 	(setq k2 (vector (append mod (list c2)))))
-      (define-key idlwave-mode-map       k2 cmd)
-      (define-key idlwave-shell-mode-map k2 cmd))))
-
-;; Enter the prefix map at the two places.
-(fset 'idlwave-debug-map       idlwave-shell-mode-prefix-map)
+      (unless cannotshift
+	(define-key idlwave-mode-map k2 cmd)
+	(unless only-buffer (define-key idlwave-shell-mode-map k2 cmd))))
+    ;; The electric debug single-keystroke map
+    (if (and electric (char-or-string-p c2))
+	(define-key idlwave-shell-electric-debug-mode-map (char-to-string c2) 
+	  cmd))))
+
+;; A few extras in the electric debug map
+(define-key idlwave-shell-electric-debug-mode-map " " 'idlwave-shell-step)
+(define-key idlwave-shell-electric-debug-mode-map "+" 'idlwave-shell-stack-up)
+(define-key idlwave-shell-electric-debug-mode-map "=" 'idlwave-shell-stack-up)
+(define-key idlwave-shell-electric-debug-mode-map "-" 
+  'idlwave-shell-stack-down)
+(define-key idlwave-shell-electric-debug-mode-map "_" 
+  'idlwave-shell-stack-down)
+(define-key idlwave-shell-electric-debug-mode-map "q" 'idlwave-shell-retall)
+(define-key idlwave-shell-electric-debug-mode-map "t" 
+  '(lambda () (interactive) (idlwave-shell-send-command "help,/TRACE")))
+(define-key idlwave-shell-electric-debug-mode-map [(control ??)]
+  'idlwave-shell-electric-debug-help)
+(define-key idlwave-shell-electric-debug-mode-map "x" 
+  '(lambda (arg) (interactive "P") 
+     (idlwave-shell-print arg nil nil t)))
+
+
+; Enter the prefix map in two places.
+(fset 'idlwave-debug-map       idlwave-mode-prefix-map)
 (fset 'idlwave-shell-debug-map idlwave-shell-mode-prefix-map)
 
+;; The Electric Debug Minor Mode --------------------------------------------
+
+(defun idlwave-shell-toggle-electric-debug-mode ()
+  "Toggle electric-debug-mode, suppressing re-entry into mode if turned off."
+  (interactive)
+  ;; If turning it off, make sure it stays off throughout the debug
+  ;; session until we return or hit $MAIN$.  Cancel this suppression
+  ;; if it's explicitly turned on.
+  (if idlwave-shell-electric-debug-mode
+      (setq idlwave-shell-suppress-electric-debug t)
+    (setq idlwave-shell-suppress-electric-debug nil))
+  (idlwave-shell-electric-debug-mode))
+
+(easy-mmode-define-minor-mode idlwave-shell-electric-debug-mode
+  "Toggle Electric Debug mode.
+With no argument, this command toggles the mode. 
+Non-null prefix argument turns on the mode.
+Null prefix argument turns off the mode.
+
+When Electric Debug mode is enabled, the many debugging commands are
+available as single key sequences."
+nil
+" *Debugging*"
+idlwave-shell-electric-debug-mode-map)
+
+(add-hook 
+ 'idlwave-shell-electric-debug-mode-on-hook
+ (lambda ()
+   (set (make-local-variable 'idlwave-shell-electric-debug-read-only)
+	buffer-read-only)
+   (setq buffer-read-only t)
+   (add-to-list 'idlwave-shell-electric-debug-buffers (current-buffer))
+   (if idlwave-shell-stop-line-overlay
+       (overlay-put idlwave-shell-stop-line-overlay 'face 
+		    idlwave-shell-electric-stop-line-face))
+   (if (facep 'fringe)
+       (set-face-foreground 'fringe idlwave-shell-electric-stop-color
+			    (selected-frame)))))
+
+(add-hook 
+ 'idlwave-shell-electric-debug-mode-off-hook
+ (lambda ()
+   ;; Return to previous read-only state
+   (setq buffer-read-only (if (boundp 'idlwave-shell-electric-debug-read-only)
+			      idlwave-shell-electric-debug-read-only))
+   (setq idlwave-shell-electric-debug-buffers
+	 (delq (current-buffer) idlwave-shell-electric-debug-buffers))
+   (if idlwave-shell-stop-line-overlay
+       (overlay-put idlwave-shell-stop-line-overlay 'face 
+		    idlwave-shell-stop-line-face)
+     (if (facep 'fringe)
+	 (set-face-foreground 'fringe (face-foreground 'default))))))
+
+;; easy-mmode defines electric-debug-mode for us, so we need to advise it.
+(defadvice idlwave-shell-electric-debug-mode (after print-enter activate)
+  "Print out an entrance message"
+  (when idlwave-shell-electric-debug-mode
+    (message
+     "Electric Debugging mode entered.  Press [C-?] for help, [q] to quit"))
+  (force-mode-line-update))
+
+;; Turn it off in all relevant buffers
+(defvar idlwave-shell-electric-debug-buffers nil)
+(defun idlwave-shell-electric-debug-all-off ()
+  (setq idlwave-shell-suppress-electric-debug nil)
+  (let ((buffers idlwave-shell-electric-debug-buffers)
+	buf)
+    (save-excursion
+      (while (setq buf (pop buffers))
+	(when (buffer-live-p buf)
+	  (set-buffer buf)
+	  (when (and (eq major-mode 'idlwave-mode)
+		     buffer-file-name
+		     idlwave-shell-electric-debug-mode)
+	    (idlwave-shell-electric-debug-mode))))))
+  (setq idlwave-shell-electric-debug-buffers nil))
+
+;; Show the help text
+(defun idlwave-shell-electric-debug-help ()
+  (interactive)
+  (with-output-to-temp-buffer "*IDLWAVE Electric Debug Help*" 
+    (princ idlwave-shell-electric-debug-help))
+  (let* ((current-window (selected-window))
+	 (window (get-buffer-window "*IDLWAVE Electric Debug Help*"))
+	 (window-lines (window-height window)))
+    (select-window window)
+    (enlarge-window (1+ (- (count-lines 1 (point-max)) window-lines)))
+    (select-window current-window)))
+
+
 ;; The Menus --------------------------------------------------------------
-
 (defvar idlwave-shell-menu-def
-  '("Debug"
-    ["Save and .RUN" idlwave-shell-save-and-run
-     (or (eq major-mode 'idlwave-mode)
-	 idlwave-shell-last-save-and-action-file)]
-    ["Save and .COMPILE" idlwave-shell-save-and-compile
-     (or (eq major-mode 'idlwave-mode)
-	 idlwave-shell-last-save-and-action-file)]
-    ["Save and @Batch" idlwave-shell-save-and-batch
-     (or (eq major-mode 'idlwave-mode)
-	 idlwave-shell-last-save-and-action-file)]
-    ["Goto Next Error" idlwave-shell-goto-next-error t]
-    "--"
-    ["Execute Default Cmd" idlwave-shell-execute-default-command-line t]
-    ["Edit Default Cmd" idlwave-shell-edit-default-command-line t]
-    "--"
-    ["Set Breakpoint" idlwave-shell-break-here
-     (eq major-mode 'idlwave-mode)]
-    ["Break in Module" idlwave-shell-break-in t]
-    ["Clear Breakpoint" idlwave-shell-clear-current-bp t]
-    ["Clear All Breakpoints" idlwave-shell-clear-all-bp t]
-    ["List  All Breakpoints" idlwave-shell-list-all-bp t]
+  `("Debug"
+    ["Electric Debug Mode"
+     idlwave-shell-electric-debug-mode
+     :style toggle :selected idlwave-shell-electric-debug-mode 
+     :included (eq major-mode 'idlwave-mode) :keys "C-c C-d C-v"]
     "--"
-    ["Step (into)" idlwave-shell-step t]
-    ["Step (over)" idlwave-shell-stepover t]
-    ["Skip One Statement" idlwave-shell-skip t]
-    ["Continue" idlwave-shell-cont t]
-    ("Continue to"
-     ["End of Block" idlwave-shell-up t]
-     ["End of Subprog" idlwave-shell-return t]
-     ["End of Subprog+1" idlwave-shell-out t]
-     ["Here (Cursor Line)" idlwave-shell-to-here
-      (eq major-mode 'idlwave-mode)])
-    "--"
-    ["Print expression" idlwave-shell-print t]
-    ["Help on expression" idlwave-shell-help-expression t]
-    ["Evaluate Region" idlwave-shell-evaluate-region
-     (eq major-mode 'idlwave-mode)]
-    ["Run Region" idlwave-shell-run-region (eq major-mode 'idlwave-mode)]
-    "--"
-    ["Redisplay" idlwave-shell-redisplay t]
-    ["Stack Up" idlwave-shell-stack-up t]
-    ["Stack Down" idlwave-shell-stack-down t]
-    "--"
-    ["Update Working Dir" idlwave-shell-resync-dirs t]
-    ["Reset IDL" idlwave-shell-reset t]
-    "--"
-    ["Toggle Toolbar" idlwave-shell-toggle-toolbar t]
-    ["Exit IDL" idlwave-shell-quit t]))
-
-(setq idlwave-shell-menu-def
-  '("Debug"
     ("Compile & Run"
      ["Save and .RUN" idlwave-shell-save-and-run
       (or (eq major-mode 'idlwave-mode)
@@ -3532,19 +4184,41 @@
      ["Save and @Batch" idlwave-shell-save-and-batch
       (or (eq major-mode 'idlwave-mode)
 	  idlwave-shell-last-save-and-action-file)]
+     "--"
      ["Goto Next Error" idlwave-shell-goto-next-error t]
      "--"
-     ["Run Region" idlwave-shell-run-region (eq major-mode 'idlwave-mode)]
+     ["Compile and Run Region" idlwave-shell-run-region 
+      (eq major-mode 'idlwave-mode)]
+     ["Evaluate Region" idlwave-shell-evaluate-region 
+      (eq major-mode 'idlwave-mode)]
      "--"
      ["Execute Default Cmd" idlwave-shell-execute-default-command-line t]
      ["Edit Default Cmd" idlwave-shell-edit-default-command-line t])
     ("Breakpoints"
-     ["Set Breakpoint" idlwave-shell-break-here
-      (eq major-mode 'idlwave-mode)]
-     ["Break in Module" idlwave-shell-break-in t]
+     ["Set Breakpoint" idlwave-shell-break-here 
+      :keys "C-c C-d C-c" :active (eq major-mode 'idlwave-mode)]
+     ("Set Special Breakpoint"
+      ["Set After Count Breakpoint"
+       (progn
+	(let ((count (string-to-int (read-string "Break after count: "))))
+	      (if (integerp count) (idlwave-shell-break-here count))))
+       :active (eq major-mode 'idlwave-mode)]
+      ["Set Condition Breakpoint"
+       (idlwave-shell-break-here '(4))
+       :active (eq major-mode 'idlwave-mode)])
+     ["Break in Module" idlwave-shell-break-in 
+      :keys "C-c C-d C-i" :active (eq major-mode 'idlwave-mode)]
+     ["Break in this Module" idlwave-shell-break-this-module
+      :keys "C-c C-d C-j" :active (eq major-mode 'idlwave-mode)]
      ["Clear Breakpoint" idlwave-shell-clear-current-bp t]
      ["Clear All Breakpoints" idlwave-shell-clear-all-bp t]
-     ["List  All Breakpoints" idlwave-shell-list-all-bp t])
+     ["Disable/Enable Breakpoint" idlwave-shell-toggle-enable-current-bp t]
+     ["Goto Previous Breakpoint" idlwave-shell-goto-previous-bp 
+      :keys "C-c C-d [" :active (eq major-mode 'idlwave-mode)]
+     ["Goto Next Breakpoint" idlwave-shell-goto-next-bp 
+      :keys "C-c C-d ]" :active (eq major-mode 'idlwave-mode)]
+     ["List All Breakpoints" idlwave-shell-list-all-bp t]
+     ["Resync Breakpoints" idlwave-shell-bp-query t])
     ("Continue/Step"
      ["Step (into)" idlwave-shell-step t]
      ["Step (over)" idlwave-shell-stepover t]
@@ -3554,16 +4228,60 @@
      ["... to End of Subprog" idlwave-shell-return t]
      ["... to End of Subprog+1" idlwave-shell-out t]
      ["... to Here (Cursor Line)" idlwave-shell-to-here
-      (eq major-mode 'idlwave-mode)])
-    ("Print Expression"
+      :keys "C-c C-d C-h" :active (eq major-mode 'idlwave-mode)])
+    ("Examine Expressions"
      ["Print expression" idlwave-shell-print t]
      ["Help on expression" idlwave-shell-help-expression t]
-     ["Evaluate Region" idlwave-shell-evaluate-region
-      (eq major-mode 'idlwave-mode)]
+     ("Examine nearby expression with"
+      ,@(mapcar (lambda(x)
+		  `[ ,(car x) (idlwave-shell-print nil ',x) t ])
+		idlwave-shell-examine-alist))
+     ("Examine region with"
+      ,@(mapcar (lambda(x)
+		  `[ ,(car x) (idlwave-shell-print '(4) ',x) t ])
+		idlwave-shell-examine-alist)))
+    ("Call Stack"
+     ["Stack Up" idlwave-shell-stack-up t]
+     ["Stack Down" idlwave-shell-stack-down t]
      "--"
-     ["Redisplay" idlwave-shell-redisplay t]
-     ["Stack Up" idlwave-shell-stack-up t]
-     ["Stack Down" idlwave-shell-stack-down t])
+     ["Redisplay and Sync" idlwave-shell-redisplay t])
+    ("Show Commands"
+     ["Everything" (if (eq idlwave-shell-show-commands 'everything)
+		       (progn 
+			 (setq idlwave-shell-show-commands
+			       (get 'idlwave-shell-show-commands 'last-val))
+			 (put 'idlwave-shell-show-commands 'last-val nil))
+		     (put 'idlwave-shell-show-commands 'last-val 
+			  idlwave-shell-show-commands)
+		     (setq idlwave-shell-show-commands 'everything))
+      :style toggle :selected (and (not (listp idlwave-shell-show-commands))
+				   (eq idlwave-shell-show-commands 
+				       'everything))]
+     "--"
+     ["Compiling Commands" (idlwave-shell-add-or-remove-show 'run)
+      :style toggle 
+      :selected (not (idlwave-shell-hide-p 
+		      'run
+		      (get 'idlwave-shell-show-commands 'last-val)))
+      :active (not (eq idlwave-shell-show-commands 'everything))]
+     ["Breakpoint Commands" (idlwave-shell-add-or-remove-show 'breakpoint)
+      :style toggle 
+      :selected (not (idlwave-shell-hide-p 
+		      'breakpoint
+		      (get 'idlwave-shell-show-commands 'last-val)))
+      :active (not (eq idlwave-shell-show-commands 'everything))]
+     ["Debug Commands" (idlwave-shell-add-or-remove-show 'debug)
+      :style toggle 
+      :selected (not (idlwave-shell-hide-p 
+		      'debug
+		      (get 'idlwave-shell-show-commands 'last-val)))
+      :active (not (eq idlwave-shell-show-commands 'everything))]
+     ["Miscellaneous Commands" (idlwave-shell-add-or-remove-show 'misc)
+      :style toggle 
+      :selected (not (idlwave-shell-hide-p 
+		      'misc
+		      (get 'idlwave-shell-show-commands 'last-val)))
+      :active (not (eq idlwave-shell-show-commands 'everything))])
     ("Input Mode"
      ["Send one char" idlwave-shell-send-char t]
      ["Temporary Character Mode" idlwave-shell-char-mode-loop t]
@@ -3574,6 +4292,11 @@
       :style toggle :selected idlwave-shell-use-input-mode-magic])
     "--"
     ["Update Working Dir" idlwave-shell-resync-dirs t]
+    ["Save Path Info" 
+     (idlwave-shell-send-command idlwave-shell-path-query
+				 'idlwave-shell-get-path-info
+				 'hide)
+     t]
     ["Reset IDL" idlwave-shell-reset t]
     "--"
     ["Toggle Toolbar" idlwave-shell-toggle-toolbar t]
@@ -3581,12 +4304,12 @@
 
 (if (or (featurep 'easymenu) (load "easymenu" t))
     (progn
+      (easy-menu-define 
+       idlwave-mode-debug-menu idlwave-mode-map "IDL debugging menus"
+       idlwave-shell-menu-def)
       (easy-menu-define
        idlwave-shell-mode-menu idlwave-shell-mode-map "IDL shell menus"
        idlwave-shell-menu-def)
-      (easy-menu-define
-       idlwave-mode-debug-menu idlwave-mode-map "IDL debugging menus"
-       idlwave-shell-menu-def)
       (save-excursion
 	(mapcar (lambda (buf)
 		  (set-buffer buf)
@@ -3599,43 +4322,165 @@
 ;; The Breakpoint Glyph -------------------------------------------------------
 
 (defvar idlwave-shell-bp-glyph nil
-  "The glyph to mark breakpoint lines in the source code.")
-
-(let ((image-string "/* XPM */
+  "The glyphs to mark breakpoint lines in the source code.")
+
+(let ((image-alist 
+       '((bp . "/* XPM */
 static char * file[] = {
 \"14 12 3 1\",
 \" 	c None s backgroundColor\",
 \".	c #4B4B4B4B4B4B\",
 \"R	c #FFFF00000000\",
 \"              \",
+\"     ....     \",
+\"    .RRRR.    \",
+\"   .RRRRRR.   \",
+\"  .RRRRRRRR.  \",
+\"  .RRRRRRRR.  \",
+\"  .RRRRRRRR.  \",
+\"  .RRRRRRRR.  \",
+\"   .RRRRRR.   \",
+\"    .RRRR.    \",
+\"     ....     \",
+\"              \"};")
+	 (bp-cond . "/* XPM */
+static char * file[] = {
+\"14 12 4 1\",
+\" 	c None s backgroundColor\",
+\".	c #4B4B4B4B4B4B\",
+\"R	c #FFFF00000000\",
+\"B     c #000000000000\",
 \"              \",
-\"    RRRR      \",
-\"   RRRRRR     \",
-\"  RRRRRRRR    \",
-\"  RRRRRRRR    \",
-\"  RRRRRRRR    \",
-\"  RRRRRRRR    \",
-\"   RRRRRR     \",
-\"    RRRR      \",
+\"     ....     \",
+\"    .RRRR.    \",
+\"   .RRRRRR.   \",
+\"  .RRRRRRRR.  \",
+\"  .RRBBBBRR.  \",
+\"  .RRRRRRRR.  \",
+\"  .RRBBBBRR.  \",
+\"   .RRRRRR.   \",
+\"    .RRRR.    \",
+\"     ....     \",
+\"              \"};")
+	 (bp-1 . "/* XPM */
+static char * file[] = {
+\"14 12 4 1\",
+\" 	c None s backgroundColor\",
+\".     c #4B4B4B4B4B4B\",
+\"X     c #FFFF00000000\",
+\"o     c #000000000000\",
+\"              \",
+\"     ....     \",
+\"    .XXXX.    \",
+\"   .XXooXX.   \",
+\"  .XXoooXXX.  \",
+\"  .XXXooXXX.  \",
+\"  .XXXooXXX.  \",
+\"  .XXooooXX.  \",
+\"   .XooooX.   \",
+\"    .XXXX.    \",
+\"     ....     \",
+\"              \"};")
+	 (bp-2 . "/* XPM */
+static char * file[] = {
+\"14 12 4 1\",
+\" 	c None s backgroundColor\",
+\".     c #4B4B4B4B4B4B\",
+\"X     c #FFFF00000000\",
+\"o     c #000000000000\",
 \"              \",
-\"              \"};"))
-
-  (setq idlwave-shell-bp-glyph
-	(cond ((and (featurep 'xemacs)
-		    (featurep 'xpm))
-	       (make-glyph image-string))
-	      ((and (not (featurep 'xemacs))
-		    (fboundp 'image-type-available-p)
-		    (image-type-available-p 'xpm))
-	       (list 'image :type 'xpm :data image-string :ascent 'center))
-	      (t nil))))
+\"     ....     \",
+\"    .XXXX.    \",
+\"   .XoooXX.   \",
+\"  .XXoXooXX.  \",
+\"  .XXXXooXX.  \",
+\"  .XXXooXXX.  \",
+\"  .XXooXXXX.  \",
+\"   .XooooX.   \",
+\"    .XXXX.    \",
+\"     ....     \",
+\"              \"};")
+	 (bp-3 . "/* XPM */
+static char * file[] = {
+\"14 12 4 1\",
+\" 	c None s backgroundColor\",
+\".     c #4B4B4B4B4B4B\",
+\"X     c #FFFF00000000\",
+\"o     c #000000000000\",
+\"              \",
+\"     ....     \",
+\"    .XXXX.    \",
+\"   .XoooXX.   \",
+\"  .XXXXooXX.  \",
+\"  .XXXooXXX.  \",
+\"  .XXXXooXX.  \",
+\"  .XXoXooXX.  \",
+\"   .XoooXX.   \",
+\"    .XXXX.    \",
+\"     ....     \",
+\"              \"};")
+	 (bp-4 . "/* XPM */
+static char * file[] = {
+\"14 12 4 1\",
+\" 	c None s backgroundColor\",
+\".     c #4B4B4B4B4B4B\",
+\"X     c #FFFF00000000\",
+\"o     c #000000000000\",
+\"              \",
+\"     ....     \",
+\"    .XXXX.    \",
+\"   .XoXXoX.   \",
+\"  .XXoXXoXX.  \",
+\"  .XXooooXX.  \",
+\"  .XXXXooXX.  \",
+\"  .XXXXooXX.  \",
+\"   .XXXooX.   \",
+\"    .XXXX.    \",
+\"     ....     \",
+\"              \"};")
+	 (bp-n . "/* XPM */
+static char * file[] = {
+\"14 12 4 1\",
+\" 	c None s backgroundColor\",
+\".     c #4B4B4B4B4B4B\",
+\"X     c #FFFF00000000\",
+\"o     c #000000000000\",
+\"              \",
+\"     ....     \",
+\"    .XXXX.    \",
+\"   .XXXXXX.   \",
+\"  .XXoXoXXX.  \",
+\"  .XXooXoXX.  \",
+\"  .XXoXXoXX.  \",
+\"  .XXoXXoXX.  \",
+\"   .XoXXoX.   \",
+\"    .XXXX.    \",
+\"     ....     \",
+\"              \"};"))) im-cons im)
+  
+  (while (setq im-cons (pop image-alist))
+    (setq im (cond ((and (featurep 'xemacs)
+			 (featurep 'xpm))
+		    (list
+		     (let ((data (cdr im-cons)))
+		       (string-match "#FFFF00000000" data)
+		       (setq data (replace-match "#8F8F8F8F8F8F" t t data))
+		       (make-glyph data))
+		     (make-glyph (cdr im-cons))))
+		   ((and (not (featurep 'xemacs))
+			 (fboundp 'image-type-available-p)
+			 (image-type-available-p 'xpm))
+		    (list 'image :type 'xpm :data (cdr im-cons) 
+			  :ascent 'center))
+		   (t nil)))
+    (if im (push (cons (car im-cons) im) idlwave-shell-bp-glyph))))
 
 (provide 'idlw-shell)
 (provide 'idlwave-shell)
 
 ;;; Load the toolbar when wanted by the user.
 
-(autoload 'idlwave-toolbar-toggle "idlw-toolbar"
+(autoload 'idlwave-toolbar-toggle "idlw-toolbar" 
   "Toggle the IDLWAVE toolbar")
 (autoload 'idlwave-toolbar-add-everywhere "idlw-toolbar"
   "Add IDLWAVE toolbar")
@@ -3647,5 +4492,5 @@
 (if idlwave-shell-use-toolbar
     (add-hook 'idlwave-shell-mode-hook 'idlwave-toolbar-add-everywhere))
 
-;;; arch-tag: 20c2e8ce-0709-41d8-a5b6-bb039148440a
+;; arch-tag: 20c2e8ce-0709-41d8-a5b6-bb039148440a
 ;;; idlw-shell.el ends here
--- a/lisp/progmodes/idlw-toolbar.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/progmodes/idlw-toolbar.el	Mon Nov 22 11:06:39 2004 +0000
@@ -3,7 +3,7 @@
 
 ;; Author: Carsten Dominik <dominik@astro.uva.nl>
 ;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu>
-;; Version: 4.15
+;; Version: 5.5
 ;; Keywords: processes
 
 ;; This file is part of GNU Emacs.
@@ -170,45 +170,6 @@
 \"                            \"};")
   "The Stop At icon.")
 
-(defvar idlwave-toolbar-stop-in-icon
-  (idlwave-toolbar-make-button
-   "/* XPM */
-static char * file[] = {
-\"28 28 4 1\",
-\" 	c None s backgroundToolBarColor\",
-\"_	c #FFFFFFFFFFFF\",
-\".	c #000000000000\",
-\"R	c #FFFF00000000\",
-\"                            \",
-\"                            \",
-\"                            \",
-\"                            \",
-\"          ........          \",
-\"         .RRRRRRRR.         \",
-\"        .RRRRRRRRRR.        \",
-\"       .RRRRRRRRRRRR.       \",
-\"      .RRR___RR___RRR.      \",
-\"     .RRRR__RRRR__RRRR.     \",
-\"    .RRRRR__RRRR__RRRRR.    \",
-\"    .RRRRR__RRRR__RRRRR.    \",
-\"    .RRRRR__RRRR__RRRRR.    \",
-\"    .RRRR__RRRRRR__RRRR.    \",
-\"    .RRRRR__RRRR__RRRRR.    \",
-\"    .RRRRR__RRRR__RRRRR.    \",
-\"    .RRRRR__RRRR__RRRRR.    \",
-\"    .RRRRR__RRRR__RRRRR.    \",
-\"     .RRRR___RR___RRRR.     \",
-\"      .RRRRRRRRRRRRRR.      \",
-\"       .RRRRRRRRRRRR.       \",
-\"        .RRRRRRRRRR.        \",
-\"         .RRRRRRRR.         \",
-\"          ........          \",
-\"                            \",
-\"                            \",
-\"                            \",
-\"                            \"};")
-  "The Stop in icon.")
-
 
 (defvar idlwave-toolbar-clear-at-icon
   (idlwave-toolbar-make-button
@@ -287,6 +248,84 @@
 \"                            \"};")
   "The Clear-All icon.")
 
+(defvar idlwave-toolbar-stop-beginning-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 4 1\",
+\" 	c None s backgroundToolBarColor\",
+\".	c #000000000000\",
+\"X	c #FFFF00000000\",
+\"_	c #FFFFFFFFFFFF\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"          ........          \",
+\"         .XXXXXXXX.         \",
+\"        .XXXXXXXXXX.        \",
+\"       .XXXXXXXXXXXX.       \",
+\"      .XX..XXXXXXXXXX.      \",
+\"     .XX.XX.X______XXX.     \",
+\"    .XXX.XX.X______XXXX.    \",
+\"    .XXXX..XXXXXXXXXXXX.    \",
+\"    .XXXXXXXXXX____XXXX.    \",
+\"    .XXXXXXXXXX____XXXX.    \",
+\"    .XXXXXXXXXXXXXXXXXX.    \",
+\"    .XXXXXXXXXX____XXXX.    \",
+\"    .XXXXXXXXXX____XXXX.    \",
+\"    .XXXXXXXXXXXXXXXXXX.    \",
+\"     .XXXXXXXXX____XXX.     \",
+\"      .XXXXXXXX____XX.      \",
+\"       .XXXXXXXXXXXX.       \",
+\"        .XXXXXXXXXX.        \",
+\"         .XXXXXXXX.         \",
+\"          ........          \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Stop at Beginning icon.")
+
+(defvar idlwave-toolbar-stop-in-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 4 1\",
+\" 	c None s backgroundToolBarColor\",
+\"_	c #FFFFFFFFFFFF\",
+\".	c #000000000000\",
+\"R	c #FFFF00000000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"          ........          \",
+\"         .RRRRRRRR.         \",
+\"        .RRRRRRRRRR.        \",
+\"       .RRRRRRRRRRRR.       \",
+\"      .RRR___RR___RRR.      \",
+\"     .RRRR__RRRR__RRRR.     \",
+\"    .RRRRR__RRRR__RRRRR.    \",
+\"    .RRRRR__RRRR__RRRRR.    \",
+\"    .RRRRR__RRRR__RRRRR.    \",
+\"    .RRRR__RRRRRR__RRRR.    \",
+\"    .RRRRR__RRRR__RRRRR.    \",
+\"    .RRRRR__RRRR__RRRRR.    \",
+\"    .RRRRR__RRRR__RRRRR.    \",
+\"    .RRRRR__RRRR__RRRRR.    \",
+\"     .RRRR___RR___RRRR.     \",
+\"      .RRRRRRRRRRRRRR.      \",
+\"       .RRRRRRRRRRRR.       \",
+\"        .RRRRRRRRRR.        \",
+\"         .RRRRRRRR.         \",
+\"          ........          \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Stop in icon.")
+
 (defvar idlwave-toolbar-edit-cmd-icon
   (idlwave-toolbar-make-button
    "/* XPM */
@@ -398,7 +437,7 @@
 \"                            \",
 \"                            \",
 \"                            \"};")
-  "The Cont icon.")
+  "The Cont icon.")	  
 
 (defvar idlwave-toolbar-to-here-icon
   (idlwave-toolbar-make-button
@@ -709,6 +748,49 @@
 \"                            \"};")
   "The Reset icon.")
 
+(defvar idlwave-toolbar-electric-debug-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 8 1\",
+\" 	c None s backgroundToolBarColor\",
+\".	c #CFC854\",
+\"+	c #EEDB0E\",
+\"@	c #D2C739\",
+\"#	c #A39C54\",
+\"$	c #CDC020\",
+\"%	c #020202\",
+\"&	c #D60E36\",
+\"                            \",
+\"                            \",
+\"      ..                    \",
+\"   +++++@                   \",
+\"   ++++++                   \",
+\"    +++++@                  \",
+\"     +++++                  \",
+\"     #++++@                 \",
+\"      $+++@       %% %%     \",
+\"     ++++++$       % %      \",
+\"     #+++++$       % %      \",
+\"      #++$#        %%%      \",
+\"      #+++       %%%%%%%    \",
+\"       .++     %%%%%%%%%%%  \",
+\"        ++$$   %%%%%%%%%%%  \",
+\"        .+@#   &&%%%%%%%&&  \",
+\"      .++++#  &&&&&%%%&&&&& \",
+\"      +++++$  &&%%&&&&&%%&& \",
+\"       $+++$  &&%%&&&&&%%&& \",
+\"        $++@  &&&&&&%&&&&&& \",
+\"         $+@  &&&&&&%&&&&&& \",
+\"          @+  &&%%&&&&&%%&& \",
+\"           ++. &%%&&%&&%%&  \",
+\"            +. &&&&%%%&&&&  \",
+\"            .+  &&%%%%%&&   \",
+\"             ++  %%%%%%%    \",
+\"              .    %%%      \",
+\"                            \"};")
+  "The electric debug icon.")
+
 (defvar idlwave-toolbar
   '(
     [idlwave-toolbar-compile-icon
@@ -723,10 +805,6 @@
      idlwave-shell-break-here
      (eq major-mode 'idlwave-mode)
      "Set Breakpoint at selected position"]
-    [idlwave-toolbar-stop-in-icon
-     idlwave-shell-break-in
-     t
-     "Stop in Function with name near at point"]
     [idlwave-toolbar-clear-at-icon
      idlwave-shell-clear-current-bp
      t
@@ -735,6 +813,14 @@
      idlwave-shell-clear-all-bp
      t
      "Clear all Breakpoints"]
+    [idlwave-toolbar-stop-beginning-icon
+     idlwave-shell-break-this-module
+     (eq major-mode 'idlwave-mode)
+     "Stop at beginning of enclosing Routine"]
+    [idlwave-toolbar-stop-in-icon
+     idlwave-shell-break-in
+     t
+     "Stop in Routine with name near point"]
     [idlwave-toolbar-edit-cmd-icon
      idlwave-shell-edit-default-command-line
      t
@@ -779,6 +865,10 @@
      idlwave-shell-reset
      t
      "Reset IDL (RETALL & CLOSE,/ALL and more)"]
+    [idlwave-toolbar-electric-debug-icon
+     idlwave-shell-electric-debug-mode
+     (eq major-mode 'idlwave-mode)
+     "Toggle Electric Debug Mode"]
     ))
 
 ;; When the shell exits, arrange to remove the special toolbar everywhere.
@@ -824,13 +914,14 @@
       (mapcar (lambda (x)
 		(let* ((icon (aref x 0))
 		       (func (aref x 1))
-		       ;;(show (aref x 2))
+		       (show (aref x 2))
 		       (help (aref x 3))
 		       (key (vector 'tool-bar func))
 		       (def (list 'menu-item
 				  "a"
 				  func
 				  :image (symbol-value icon)
+				  :visible show
 				  :help help)))
 		  (define-key idlwave-mode-map key def)
 		  (define-key idlwave-shell-mode-map key def)))
@@ -876,7 +967,5 @@
 (provide 'idlw-toolbar)
 (provide 'idlwave-toolbar)
 
+;; arch-tag: ec9a3717-c44c-4716-9bda-cdacbe5ddb62
 ;;; idlw-toolbar.el ends here
-
-
-;;; arch-tag: ec9a3717-c44c-4716-9bda-cdacbe5ddb62
--- a/lisp/progmodes/idlwave.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/progmodes/idlwave.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1,10 +1,11 @@
-;;; idlwave.el --- IDL editing mode for GNU Emacs
-;; Copyright (c) 1999, 2000, 2001,2002 Free Software Foundation
-
-;; Author: Carsten Dominik <dominik@astro.uva.nl>
-;;         Chris Chase <chase@att.com>
+;; idlwave.el --- IDL editing mode for GNU Emacs
+;; Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation
+
+;; Authors: J.D. Smith <jdsmith@as.arizona.edu>
+;;          Carsten Dominik <dominik@astro.uva.nl>
+;;          Chris Chase <chase@att.com>
 ;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu>
-;; Version: 4.15
+;; Version: 5.5
 ;; Keywords: languages
 
 ;; This file is part of GNU Emacs.
@@ -26,8 +27,8 @@
 
 ;;; Commentary:
 
-;; In distant past, based on pascal.el.  Though bears little
-;; resemblance to that now.
+;; In the remotely distant past, based on pascal.el, though bears
+;; little resemblance to it now.
 ;;
 ;; Incorporates many ideas, such as abbrevs, action routines, and
 ;; continuation line indenting, from wave.el.
@@ -57,49 +58,51 @@
 ;; ======
 ;;
 ;; The newest version of this file is available from the maintainer's
-;; Webpage.
+;; Webpage:
 ;;
 ;;   http://idlwave.org
 ;;
 ;; DOCUMENTATION
 ;; =============
 ;;
-;; IDLWAVE is documented online in info format.
-;; A printable version of the documentation is available from the
-;; maintainers webpage (see under SOURCE)
+;; IDLWAVE is documented online in info format.  A printable version
+;; of the documentation is available from the maintainers webpage (see
+;; SOURCE).
 ;;
-;;
+;; 
 ;; ACKNOWLEDGMENTS
 ;; ===============
 ;;
 ;;  Thanks to the following people for their contributions and comments:
 ;;
-;;    Ulrik Dickow <dickow@nbi.dk>
-;;    Eric E. Dors <edors@lanl.gov>
-;;    Stein Vidar H. Haugan <s.v.h.haugan@astro.uio.no>
-;;    David Huenemoerder <dph@space.mit.edu>
-;;    Kevin Ivory <Kevin.Ivory@linmpi.mpg.de>
-;;    Xuyong Liu <liu@stsci.edu>
-;;    Simon Marshall <Simon.Marshall@esrin.esa.it>
-;;    Laurent Mugnier <mugnier@onera.fr>
-;;    Lubos Pochman <lubos@rsinc.com>
-;;    Bob Portmann <portmann@al.noaa.gov>
-;;    Patrick M. Ryan <pat@jaameri.gsfc.nasa.gov>
-;;    Marty Ryba <ryba@ll.mit.edu>
-;;    Phil Williams <williams@irc.chmcc.org>
-;;    Phil Sterne <sterne@dublin.llnl.gov>
+;;    Ulrik Dickow <dickow_at_nbi.dk>
+;;    Eric E. Dors <edors_at_lanl.gov>
+;;    Stein Vidar H. Haugan <s.v.h.haugan_at_astro.uio.no>
+;;    David Huenemoerder <dph_at_space.mit.edu>
+;;    Kevin Ivory <Kevin.Ivory_at_linmpi.mpg.de>
+;;    Dick Jackson <dick_at_d-jackson.com>
+;;    Xuyong Liu <liu_at_stsci.edu>
+;;    Simon Marshall <Simon.Marshall_at_esrin.esa.it>
+;;    Laurent Mugnier <mugnier_at_onera.fr>
+;;    Lubos Pochman <lubos_at_rsinc.com>
+;;    Bob Portmann <portmann_at_al.noaa.gov>
+;;    Patrick M. Ryan <pat_at_jaameri.gsfc.nasa.gov>
+;;    Marty Ryba <ryba_at_ll.mit.edu>
+;;    Paul Sorenson <aardvark62_at_msn.com>
+;;    Phil Sterne <sterne_at_dublin.llnl.gov>
+;;    Phil Williams <williams_at_irc.chmcc.org>
 ;;
 ;; CUSTOMIZATION:
 ;; =============
 ;;
-;; IDLWAVE has extensive customize support - so if you want to learn
-;; about the variables which control the behavior of the mode, use
-;; `M-x idlwave-customize'.
+;; IDLWAVE has extensive customize support; to learn about the
+;; variables which control the mode's behavior, use `M-x
+;; idlwave-customize'.
 ;;
 ;; You can set your own preferred values with Customize, or with Lisp
 ;; code in .emacs.  For an example of what to put into .emacs, check
-;; the TexInfo documentation or see a complete .emacs at
-;; http://idlwave.org.
+;; the TexInfo documentation or see a complete .emacs available at the
+;; website.
 ;;
 ;; KNOWN PROBLEMS:
 ;; ==============
@@ -107,8 +110,8 @@
 ;;   IDLWAVE support for the IDL-derived PV-WAVE CL language of Visual
 ;;   Numerics, Inc. is growing less and less complete as the two
 ;;   languages grow increasingly apart.  The mode probably shouldn't
-;;   even have "WAVE" in it's title, but it's catchy, and required to
-;;   avoid conflict with the CORBA idl.el mode.  Caveat WAVEor.
+;;   even have "WAVE" in it's title, but it's catchy, and was required
+;;   to avoid conflict with the CORBA idl.el mode.  Caveat WAVEor.
 ;;
 ;;   Moving the point backwards in conjunction with abbrev expansion
 ;;   does not work as I would like it, but this is a problem with
@@ -116,7 +119,7 @@
 ;;   up inserting the character that expanded the abbrev after moving
 ;;   point backward, e.g., "\cl" expanded with a space becomes
 ;;   "LONG( )" with point before the close paren.  This is solved by
-;;   using a temporary function in `post-command-hook' - not pretty,
+;;   using a temporary function in `post-command-hook' - not pretty, 
 ;;   but it works.
 ;;
 ;;   Tabs and spaces are treated equally as whitespace when filling a
@@ -126,15 +129,15 @@
 ;;   limited to comments only and occurs only when a comment
 ;;   paragraph is filled via `idlwave-fill-paragraph'.
 ;;
-;;   Avoid muti-statement lines (using "&") on block begin and end
-;;   lines.  Multi-statement lines can mess up the formatting, for
-;;   example, multiple end statements on a line: endif & endif.
-;;   Using "&" outside of block begin/end lines should be okay.
+;;   Muti-statement lines (using "&") on block begin and end lines can
+;;   ruin the formatting.  For example, multiple end statements on a
+;;   line: endif & endif.  Using "&" outside of block begin/end lines
+;;   should be okay.
 ;;
 ;;   Determining the expression at point for printing and other
 ;;   examination commands is somewhat rough: currently only fairly
 ;;   simple entities are found.  You can always drag-select or examine
-;;   a region.
+;;   a pre-selected region.
 ;;
 ;;   When forcing completion of method keywords, the initial
 ;;   query for a method has multiple entries for some methods.  Would
@@ -143,7 +146,17 @@
 
 ;;; Code:
 
+
 (eval-when-compile (require 'cl))
+(require 'idlw-help)
+
+;; For XEmacs
+(unless (fboundp 'line-beginning-position)
+  (defalias 'line-beginning-position 'point-at-bol))
+(unless (fboundp 'line-end-position)
+  (defalias 'line-end-position 'point-at-eol))
+(unless (fboundp 'char-valid-p)
+  (defalias 'char-valid-p 'characterp))
 
 (eval-and-compile
   ;; Kludge to allow `defcustom' for Emacs 19.
@@ -152,13 +165,13 @@
       nil ;; We've got what we needed
     ;; We have the old or no custom-library, hack around it!
     (defmacro defgroup (&rest args) nil)
-    (defmacro defcustom (var value doc &rest args)
+    (defmacro defcustom (var value doc &rest args) 
       `(defvar ,var ,value ,doc))))
 
 (defgroup idlwave nil
   "Major mode for editing IDL .pro files"
   :tag "IDLWAVE"
-  :link '(url-link :tag "Home Page"
+  :link '(url-link :tag "Home Page" 
 		   "http://idlwave.org")
   :link '(emacs-commentary-link :tag "Commentary in idlw-shell.el"
 				"idlw-shell.el")
@@ -167,6 +180,7 @@
   :prefix "idlwave"
   :group 'languages)
 
+
 ;;; Variables for indentation behavior ---------------------------------------
 
 (defgroup idlwave-code-formatting nil
@@ -209,7 +223,7 @@
 standard continuation indentation, otherwise defaulting to a fixed
 offset.  Set to 0 to effectively disable all special continuation
 indentation, or to a large number (like 100) to enable it in all
-cases.  See also `idlwave-indent-top-open-paren', which can override
+cases.  See also `idlwave-indent-to-open-paren', which can override
 this variable."
   :group 'idlwave-code-formatting
   :type 'integer)
@@ -238,6 +252,13 @@
  :group 'idlwave-code-formatting
   :type 'boolean)
 
+(defcustom idlwave-indent-parens-nested nil
+  "*Non-nil means, indent continuation lines with parens by nesting
+lines at consecutively deeper levels."
+ :group 'idlwave-code-formatting
+  :type 'boolean)
+
+
 (defcustom idlwave-hanging-indent t
   "*If set non-nil then comment paragraphs are indented under the
 hanging indent given by `idlwave-hang-indent-regexp' match in the first line
@@ -264,8 +285,8 @@
 
 (defcustom idlwave-auto-fill-split-string t
   "*If non-nil then auto fill will split strings with the IDL `+' operator.
-When the line end falls within a string, string concatenation with the
-'+' operator will be used to distribute a long string over lines.
+When the line end falls within a string, string concatenation with the 
+'+' operator will be used to distribute a long string over lines.  
 If nil and a string is split then a terminal beep and warning are issued.
 
 This variable is ignored when `idlwave-fill-comment-line-only' is
@@ -308,20 +329,28 @@
 ;; Comments not matching any of the above will be indented as a
 ;; right-margin comment, i.e., to a minimum of `comment-column'.
 
-
 ;;; Routine Info and Completion ---------------------------------------
 
 (defgroup idlwave-routine-info nil
   "Routine Info options for IDLWAVE mode."
   :group 'idlwave)
 
+(defcustom idlwave-use-library-catalogs t
+  "*Non-nil means search the IDL path for library catalog files.
+
+These files, named .idlwave_catalog, document routine information for
+individual directories and libraries of IDL .pro files.  Many popular
+libraries come with catalog files by default, so leaving this on is a
+usually a good idea.."
+  :group 'idlwave-routine-info
+  :type 'boolean)
 
 (defcustom idlwave-init-rinfo-when-idle-after 10
   "*Seconds of idle time before routine info is automatically initialized.
 Initializing the routine info can take long, in particular if a large
 library catalog is involved.  When Emacs is idle for more than the number
 of seconds specified by this variable, it starts the initialization.
-The process is split into five steps, in order to keep possible work
+The process is split into five steps, in order to keep possible work 
 interruption as short as possible.  If one of the steps finishes, and no
 user input has arrived in the mean time, initialization proceeds immediately
 to the next step.
@@ -373,7 +402,7 @@
 	       (const :tag "When saving a buffer" save-buffer)
 	       (const :tag "After a buffer was killed" kill-buffer)
 	       (const :tag "After a buffer was compiled successfully, update shell info" compile-buffer))))
-
+	       
 (defcustom idlwave-rinfo-max-source-lines 5
   "*Maximum number of source files displayed in the Routine Info window.
 When an integer, it is the maximum number of source files displayed.
@@ -382,43 +411,46 @@
   :type 'integer)
 
 (defcustom idlwave-library-path nil
-  "Library path for Windows and MacOS.  Not needed under Unix.
-When selecting the directories to scan for IDL library routine info,
-IDLWAVE can under UNIX query the shell for the exact search path.
-However, under Windows and MacOS, the IDLWAVE shell does not work.  In this
-case, this variable specifies the path where IDLWAVE can find library files.
-The shell will only be asked when this variable is nil.
-The value is a list of directories.  A directory preceeded by a `+' will
-be searched recursively.  If you set this variable on a UNIX system, the shell
-will not be asked.
-See also `idlwave-system-directory'."
+  "Library path for Windows and MacOS.  Not needed under Unix.  When
+selecting the directories to scan for IDL user catalog routine info,
+IDLWAVE can, under UNIX, query the shell for the exact search path
+\(the value of !PATH).  However, under Windows and MacOS (pre-OSX),
+the IDLWAVE shell does not work.  In this case, this variable can be
+set to specify the paths where IDLWAVE can find PRO files.  The shell
+will only be asked for a list of paths when this variable is nil.  The
+value is a list of directories.  A directory preceeded by a `+' will
+be searched recursively.  If you set this variable on a UNIX system,
+the shell will not be queried.  See also `idlwave-system-directory'."
   :group 'idlwave-routine-info
   :type '(repeat (directory)))
 
 (defcustom idlwave-system-directory ""
-  "The IDL system directory for Windows and MacOS.  Not needed under UNIX.
-Set this to the value of the `!DIR' system variable in IDL.  IDLWAVE uses
-this to find out which of the library routines belong to the official system
-library.  All files inside the `lib' subdirectory are considered system
-library files - so don't install private stuff in this directory.
-On UNIX systems, IDLWAVE queries the shell for the value of `!DIR'.
-See also `idlwave-library-path'."
+  "The IDL system directory for Windows and MacOS.  Not needed under
+UNIX.  Set this to the value of the `!DIR' system variable in IDL.
+IDLWAVE uses this to find out which of the library routines belong to
+the official system library.  All files inside the `lib' subdirectory
+are considered system library files - so don't install private stuff
+in this directory.  On UNIX systems, IDLWAVE queries the shell for the
+value of `!DIR'.  See also `idlwave-library-path'."
   :group 'idlwave-routine-info
   :type 'directory)
 
-(defcustom idlwave-libinfo-file "~/.idlcat.el"
-  "*File for routine information of the IDL library.
-When this points to a file, the file will be loaded when IDLWAVE first
-accesses routine info (or does completion).
-When you scan the library with `idlwave-create-libinfo-file', this file
-will be used to store the result."
+(defcustom idlwave-config-directory 
+  (convert-standard-filename "~/.idlwave")
+  "*Directory for configuration files and user-library catalog."
   :group 'idlwave-routine-info
   :type 'file)
 
+(defvar idlwave-user-catalog-file "idlusercat.el")
+(defvar idlwave-path-file "idlpath.el")
+
+(defvar idlwave-libinfo-file nil
+  "*Obsolete variable, no longer used.")
+
 (defcustom idlwave-special-lib-alist nil
   "Alist of regular expressions matching special library directories.
 When listing routine source locations, IDLWAVE gives a short hint where
-the file defining the routine is located.  By default it lists `SystemLib'
+the file defining the routine is located.  By default it lists `SystemLib' 
 for routines in the system library `!DIR/lib' and `Library' for anything
 else.  This variable can define additional types.  The car of each entry
 is a regular expression matching the file name (they normally will match
@@ -428,92 +460,15 @@
   :type '(repeat
 	  (cons regexp string)))
 
-(defgroup idlwave-online-help nil
-  "Online Help options for IDLWAVE mode."
-  :group 'idlwave)
-
-(defcustom idlwave-help-directory ""
-  "The directory where idlw-help.txt and idlw-help.el are stored."
-  :group 'idlwave-online-help
-  :type 'file)
-
-(defcustom idlwave-help-use-dedicated-frame t
-  "*Non-nil means, use a separate frame for Online Help if possible."
-  :group 'idlwave-online-help
+(defcustom idlwave-auto-write-paths t
+  "Write out path (!PATH) and system directory (!DIR) info automatically.  
+Path info is needed to locate library catalog files.  If non-nil,
+whenever the path-list changes as a result of shell-query, etc., it is
+written to file.  Otherwise, the menu option \"Write Paths\" can be
+used to force a write."
+  :group 'idlwave-routine-info
   :type 'boolean)
 
-(defcustom idlwave-help-frame-parameters
-  '((height . 20) (unsplittable . t))
-  "The frame parameters for the special Online Help frame.
-See also `idlwave-help-use-dedicated-frame'.
-If you do not set the frame width here, the value specified in
-`idlw-help.el' will be used."
-  :group 'idlwave-online-help
-  :type '(repeat
-	  (cons symbol sexp)))
-
-(defcustom idlwave-max-popup-menu-items 20
-  "Maximum number of items per pane in popup menus.
-Currently only used for class selection during completion help."
-  :group 'idlwave-online-help
-  :type 'integer)
-
-(defcustom idlwave-extra-help-function 'idlwave-help-with-source
-  "The function to call for online help if the normal help fails.
-Online help works only for system routines which are described in the
-IDL manuals.  A function may be specified to access help from other sources.
-
-The function must accept four arguments: NAME, TYPE, CLASS, KEYWORD.
-The Help buffer is current when this function is called, and the help
-text should be loaded into this buffer.  If help is found, the function
-should return the buffer position which should be used as `window-start'
-in the help window.  Also, the variable `idlwave-help-mode-line-indicator'
-should be set to a useful string, which will be displayed in the mode line
-of the help window.  If should also set the variable `idlwave-min-frame-width'
-to a positive integer.  IDLWAVE will ensure that the help frame is at
-least that many columns wide.
-Failure to find help should be indicated by throwing an error.
-
-When this variable is non-nil, IDLWAVE will allow the mouse-3 help click
-for every routine and keyword, even though the item may not be highlighted
-in blue (indicating the availability of system documentation).
-
-The default value for this function is `idlwave-help-with-source' which
-loads the routine source file into the help buffer.  If you try to write
-a different function which accesses a special help file or so, it is
-probably a good idea to still call this function as a fallback."
-  :group 'idlwave-online-help
-  :type 'symbol)
-
-(defcustom idlwave-help-fontify-source-code nil
-  "*Non-nil means, fontify source code displayed as help like normal code."
-  :group 'idlwave-online-help
-  :type 'boolean)
-
-(defcustom idlwave-help-source-try-header t
-  "*Non-nil means, try to find help in routine header when displaying source.
-Routines which are not documented in the system manual use their source as
-help text.  When this variable is non-nil, we try to find a description of
-the help item in the first routine doclib header above the routine definition.
-If the variable is nil, or if we cannot find/parse the header, the routine
-definition is displayed instead."
-  :group 'idlwave-online-help
-  :type 'boolean)
-
-(defface idlwave-help-link-face
-  '((((class color)) (:foreground "Blue"))
-    (t (:weight bold)))
-  "Face for highlighting links into IDLWAVE online help."
-  :group 'idlwave-online-help)
-
-(defcustom idlwave-help-activate-links-aggressively t
-  "*Non-nil means, make all possible links in help active.
-This just activates all words which are also a help topic - some links may
-be misleading."
-  :group 'idlwave-online-help
-  :type 'boolean)
-
-
 (defgroup idlwave-completion nil
   "Completion options for IDLWAVE mode."
   :prefix "idlwave"
@@ -537,7 +492,7 @@
 This variable determines the case (UPPER/lower/Capitalized...) of
 words inserted into the buffer by completion.  The preferred case can
 be specified separately for routine names, keywords, classes and
-methods.
+methods. 
 This alist should therefore have entries for `routine' (normal
 functions and procedures, i.e. non-methods), `keyword', `class', and
 `method'.  Plausible values are
@@ -624,7 +579,7 @@
 for which to assume this can be set here."
   :group 'idlwave-routine-info
   :type '(repeat (regexp :tag "Match method:")))
-
+  
 
 (defcustom idlwave-completion-show-classes 1
   "*Number of classes to show when completing object methods and keywords.
@@ -689,7 +644,7 @@
 specify if the class should be found during method and keyword
 completion, respectively.
 
-The alist may have additional entries specifying exceptions from the
+The alist may have additional entries specifying exceptions from the 
 keyword completion rule for specific methods, like INIT or
 GETPROPERTY.  In order to turn on class specification for the INIT
 method, add an entry (\"INIT\" . t).  The method name must be ALL-CAPS."
@@ -713,7 +668,7 @@
 value of the variable `idlwave-query-class'.
 
 When you specify a class, this information can be stored as a text
-property on the `->' arrow in the source code, so that during the same
+property on the `->' arrow in the source code, so that during the same 
 editing session, IDLWAVE will not have to ask again.  When this
 variable is non-nil, IDLWAVE will store and reuse the class information.
 The class stored can be checked and removed with `\\[idlwave-routine-info]'
@@ -807,11 +762,11 @@
   :type 'boolean)
 
 (defcustom idlwave-pad-keyword t
-  "*Non-nil means pad '=' for keywords like assignments.
-Whenever `idlwave-surround' is non-nil then this affects how '=' is padded
-for keywords.  If t, it is padded the same as for assignments.
-If nil then spaces are removed.  With any other value, spaces are left
-unchanged."
+  "*Non-nil means pad '=' in keywords (routine calls or defs) like assignment.
+Whenever `idlwave-surround' is non-nil then this affects how '=' is
+padded for keywords and for variables.  If t, pad the same as for
+assignments.  If nil then spaces are removed.  With any other value,
+spaces are left unchanged."
   :group 'idlwave-abbrev-and-indent-action
   :type '(choice
 	  (const :tag "Pad like assignments" t)
@@ -1093,7 +1048,7 @@
   :group 'idlwave-misc
   :type 'boolean)
 
-(defcustom idlwave-default-font-lock-items
+(defcustom idlwave-default-font-lock-items 
   '(pros-and-functions batch-files idlwave-idl-keywords label goto
 		       common-blocks class-arrows)
   "Items which should be fontified on the default fontification level 2.
@@ -1151,35 +1106,36 @@
 ;;; Non customization variables
 
 ;;; font-lock mode - Additions by Phil Williams, Ulrik Dickow and
-;;; Simon Marshall <simon@gnu.ai.mit.edu>
+;;; Simon Marshall <simon_at_gnu.ai.mit.edu>
 ;;; and Carsten Dominik...
 
 ;; The following are the reserved words in IDL.  Maybe we should
-;; highlight some more stuff as well?
+;; highlight some more stuff as well?       
 ;; Procedure declarations.  Fontify keyword plus procedure name.
 (defvar idlwave-idl-keywords
-  ;; To update this regexp, update the list of keywords and
+  ;; To update this regexp, update the list of keywords and 
   ;; evaluate the form.
-  ;;	(insert
+  ;;	(insert 
   ;;	 (prin1-to-string
-  ;;	  (concat
+  ;;	  (concat 
   ;;	   "\\<\\("
-  ;;	   (regexp-opt
-  ;;	    '("and" "or" "xor" "not"
-  ;;	      "eq" "ge" "gt" "le" "lt" "ne"
+  ;;	   (regexp-opt 
+  ;;	    '("||" "&&" "and" "or" "xor" "not"
+  ;;	      "eq" "ge" "gt" "le" "lt" "ne" 
   ;;	      "for" "do" "endfor"
-  ;;	      "if" "then" "endif" "else" "endelse"
+  ;;	      "if" "then" "endif" "else" "endelse" 
   ;;	      "case" "of" "endcase"
   ;;	      "switch" "break" "continue" "endswitch"
   ;;	      "begin" "end"
   ;;	      "repeat" "until" "endrep"
-  ;;	      "while" "endwhile"
+  ;;	      "while" "endwhile" 
   ;;	      "goto" "return"
   ;;	      "inherits" "mod"
   ;;	      "compile_opt" "forward_function"
   ;;	      "on_error" "on_ioerror"))  ; on_error is not officially reserved
   ;;	   "\\)\\>")))
-  "\\<\\(and\\|b\\(egin\\|reak\\)\\|c\\(ase\\|o\\(mpile_opt\\|ntinue\\)\\)\\|do\\|e\\(lse\\|nd\\(case\\|else\\|for\\|if\\|rep\\|switch\\|while\\)?\\|q\\)\\|for\\(ward_function\\)?\\|g\\(oto\\|[et]\\)\\|i\\(f\\|nherits\\)\\|l[et]\\|mod\\|n\\(e\\|ot\\)\\|o\\(n_\\(error\\|ioerror\\)\\|[fr]\\)\\|re\\(peat\\|turn\\)\\|switch\\|then\\|until\\|while\\|xor\\)\\>")
+  "\\<\\(&&\\|and\\|b\\(egin\\|reak\\)\\|c\\(ase\\|o\\(mpile_opt\\|ntinue\\)\\)\\|do\\|e\\(lse\\|nd\\(case\\|else\\|for\\|if\\|rep\\|switch\\|while\\)?\\|q\\)\\|for\\(ward_function\\)?\\|g\\(oto\\|[et]\\)\\|i\\(f\\|nherits\\)\\|l[et]\\|mod\\|n\\(e\\|ot\\)\\|o\\(n_\\(error\\|ioerror\\)\\|[fr]\\)\\|re\\(peat\\|turn\\)\\|switch\\|then\\|until\\|while\\|xor\\|||\\)\\>")
+
 
 (let* (;; Procedure declarations.  Fontify keyword plus procedure name.
        ;; Function  declarations.  Fontify keyword plus function  name.
@@ -1195,7 +1151,7 @@
 	  (2 font-lock-reference-face nil t)      ; block name
 	  (font-lock-match-c++-style-declaration-item-and-skip-to-next
 	   ;; Start with point after block name and comma
-	   (goto-char (match-end 0))  ; needed for XEmacs, could be nil
+	   (goto-char (match-end 0))  ; needed for XEmacs, could be nil 
 	   nil
 	   (1 font-lock-variable-name-face)       ; variable names
 	   )))
@@ -1218,8 +1174,10 @@
 	  (1 font-lock-keyword-face)
 	  (2 font-lock-reference-face)))
 
-       ;; Tags in structure definitions.  Note that this definition actually
-       ;; collides with labels, so we have to use the same face.
+       ;; Tags in structure definitions.  Note that this definition
+       ;; actually collides with labels, so we have to use the same
+       ;; face.  It also matches named subscript ranges,
+       ;; e.g. vec{bottom:top].  No good way around this.
        (structtag
 	'("\\<\\([a-zA-Z][a-zA-Z0-9_]*:\\)[^:]" (1 font-lock-reference-face)))
 
@@ -1228,7 +1186,7 @@
 	'("\\({\\|\\<inherits\\s-\\)\\s-*\\([a-zA-Z][a-zA-Z0-9_]*\\)[},\t \n]"
 	  (2 font-lock-function-name-face)))
 
-       ;; Named parameters, like /xlog or ,xrange=[]
+       ;; Keyword parameters, like /xlog or ,xrange=[]
        ;; This is anchored to the comma preceeding the keyword.
        ;; Treats continuation lines, works only during whole buffer
        ;; fontification.  Slow, use it only in fancy fontification.
@@ -1248,7 +1206,7 @@
        ;; All operators (not used because too noisy)
        (all-operators
 	'("[-*^#+<>/]" (0 font-lock-keyword-face)))
-
+	
        ;; Arrows with text property `idlwave-class'
        (class-arrows
 	'(idlwave-match-class-arrows (0 idlwave-class-arrow-face))))
@@ -1285,14 +1243,14 @@
 
 (defvar idlwave-font-lock-defaults
   '((idlwave-font-lock-keywords
-     idlwave-font-lock-keywords-1
+     idlwave-font-lock-keywords-1 
      idlwave-font-lock-keywords-2
      idlwave-font-lock-keywords-3)
-    nil t
-    ((?$ . "w") (?_ . "w") (?. . "w"))
+    nil t 
+    ((?$ . "w") (?_ . "w") (?. . "w") (?| . "w") (?& . "w")) 
     beginning-of-line))
 
-(put 'idlwave-mode 'font-lock-defaults
+(put 'idlwave-mode 'font-lock-defaults 
      idlwave-font-lock-defaults) ; XEmacs
 
 (defconst idlwave-comment-line-start-skip "^[ \t]*;"
@@ -1300,16 +1258,16 @@
 That is the _beginning_ of a line containing a comment delimiter `;' preceded
 only by whitespace.")
 
-(defconst idlwave-begin-block-reg
+(defconst idlwave-begin-block-reg 
   "\\<\\(pro\\|function\\|begin\\|case\\|switch\\)\\>"
   "Regular expression to find the beginning of a block. The case does
 not matter. The search skips matches in comments.")
 
-(defconst idlwave-begin-unit-reg "\\<\\(pro\\|function\\)\\>\\|\\`"
+(defconst idlwave-begin-unit-reg "^\\s-*\\(pro\\|function\\)\\>\\|\\`"
   "Regular expression to find the beginning of a unit. The case does
 not matter.")
 
-(defconst idlwave-end-unit-reg "\\<\\(pro\\|function\\)\\>\\|\\'"
+(defconst idlwave-end-unit-reg "^\\s-*\\(pro\\|function\\)\\>\\|\\'"
   "Regular expression to find the line that indicates the end of unit.
 This line is the end of buffer or the start of another unit. The case does
 not matter. The search skips matches in comments.")
@@ -1345,7 +1303,7 @@
 blocks starting with a BEGIN statement.  The matches must have associations
 `idlwave-block-matches'")
 
-(defconst idlwave-identifier "[a-zA-Z][a-zA-Z0-9$_]*"
+(defconst idlwave-identifier "[a-zA-Z_][a-zA-Z0-9$_]*"
   "Regular expression matching an IDL identifier.")
 
 (defconst idlwave-sysvar (concat "!" idlwave-identifier)
@@ -1357,6 +1315,10 @@
 (defconst idlwave-label (concat idlwave-identifier ":")
   "Regular expression matching IDL labels.")
 
+(defconst idlwave-method-call (concat idlwave-identifier  "\\s *->"
+				      "\\(\\s *" idlwave-identifier "::\\)?"
+))
+
 (defconst idlwave-statement-match
   (list
    ;; "endif else" is the only possible "end" that can be
@@ -1373,9 +1335,17 @@
    '(goto . ("goto\\>" nil))
    '(case . ("case\\>" nil))
    '(switch . ("switch\\>" nil))
-   (cons 'call (list (concat idlwave-identifier "\\(\\s *$\\|\\s *,\\)") nil))
-   '(assign . ("[^=>\n]*=" nil)))
-
+   (cons 'call (list (concat "\\(" idlwave-variable "\\) *= *" 
+			     "\\(" idlwave-method-call "\\s *\\)?"
+			     idlwave-identifier
+			     "\\s *(") nil))
+   (cons 'call (list (concat 
+		      "\\(" idlwave-method-call "\\s *\\)?"
+		      idlwave-identifier 
+		      "\\( *\\($\\|\\$\\)\\|\\s *,\\)") nil))
+   (cons 'assign (list (concat 
+			"\\(" idlwave-variable "\\) *=") nil)))
+  
   "Associated list of statement matching regular expressions.
 Each regular expression matches the start of an IDL statement.  The
 first element of each association is a symbol giving the statement
@@ -1398,7 +1368,7 @@
 ;; Note that this is documented in the v18 manuals as being a string
 ;; of length one rather than a single character.
 ;; The code in this file accepts either format for compatibility.
-(defvar idlwave-comment-indent-char ?\s
+(defvar idlwave-comment-indent-char ?\ 
   "Character to be inserted for IDL comment indentation.
 Normally a space.")
 
@@ -1406,7 +1376,7 @@
   "Character which is inserted as a last character on previous line by
    \\[idlwave-split-line] to begin a continuation line.  Normally $.")
 
-(defconst idlwave-mode-version " 4.15")
+(defconst idlwave-mode-version "5.5")
 
 (defmacro idlwave-keyword-abbrev (&rest args)
   "Creates a function for abbrev hooks to call `idlwave-check-abbrev' with args."
@@ -1564,21 +1534,25 @@
 (define-key idlwave-mode-map "\C-c\C-m" 'idlwave-doc-modification)
 (define-key idlwave-mode-map "\C-c\C-c" 'idlwave-case)
 (define-key idlwave-mode-map "\C-c\C-d" 'idlwave-debug-map)
-(define-key idlwave-mode-map "\C-c\C-d\C-c" 'idlwave-shell-save-and-run)
-(define-key idlwave-mode-map "\C-c\C-d\C-b" 'idlwave-shell-break-here)
 (when (and (boundp 'idlwave-shell-debug-modifiers)
 	 (listp idlwave-shell-debug-modifiers)
 	 (not (equal idlwave-shell-debug-modifiers '())))
   ;; Bind the debug commands also with the special modifiers.
   (let ((shift (memq 'shift idlwave-shell-debug-modifiers))
-	(mods-noshift (delq 'shift
+	(mods-noshift (delq 'shift 
 			    (copy-sequence idlwave-shell-debug-modifiers))))
-    (define-key idlwave-mode-map
+    (define-key idlwave-mode-map 
       (vector (append mods-noshift (list (if shift ?C ?c))))
       'idlwave-shell-save-and-run)
-    (define-key idlwave-mode-map
+    (define-key idlwave-mode-map 
       (vector (append mods-noshift (list (if shift ?B ?b))))
-      'idlwave-shell-break-here)))
+      'idlwave-shell-break-here)
+    (define-key idlwave-mode-map 
+      (vector (append mods-noshift (list (if shift ?E ?e))))
+      'idlwave-shell-run-region)))
+(define-key idlwave-mode-map "\C-c\C-d\C-c" 'idlwave-shell-save-and-run)
+(define-key idlwave-mode-map "\C-c\C-d\C-b" 'idlwave-shell-break-here)
+(define-key idlwave-mode-map "\C-c\C-d\C-e" 'idlwave-shell-run-region)
 (define-key idlwave-mode-map "\C-c\C-f" 'idlwave-for)
 ;;  (define-key idlwave-mode-map "\C-c\C-f" 'idlwave-function)
 ;;  (define-key idlwave-mode-map "\C-c\C-p" 'idlwave-procedure)
@@ -1597,27 +1571,34 @@
   "Save and run buffer under the shell." t)
 (autoload 'idlwave-shell-break-here "idlw-shell"
   "Set breakpoint in current line." t)
+(autoload 'idlwave-shell-run-region "idlw-shell"
+  "Compile and run the region." t)
 (define-key idlwave-mode-map "\C-c\C-v"   'idlwave-find-module)
 (define-key idlwave-mode-map "\C-c?"      'idlwave-routine-info)
 (define-key idlwave-mode-map "\M-?"       'idlwave-context-help)
 (define-key idlwave-mode-map [(control meta ?\?)] 'idlwave-online-help)
+;; Pickup both forms of Esc/Meta binding
 (define-key idlwave-mode-map [(meta tab)] 'idlwave-complete)
-(define-key idlwave-mode-map "\C-c\C-i"   'idlwave-update-routine-info)
-(define-key idlwave-mode-map "\C-c="      'idlwave-resolve)
-(define-key idlwave-mode-map
+(define-key idlwave-mode-map [?\e?\t] 'idlwave-complete)
+(define-key idlwave-mode-map "\M-\C-i" 'idlwave-complete)
+(define-key idlwave-mode-map "\C-c\C-i" 'idlwave-update-routine-info)
+(define-key idlwave-mode-map "\C-c="    'idlwave-resolve)
+(define-key idlwave-mode-map 
   (if (featurep 'xemacs) [(shift button3)] [(shift mouse-3)])
   'idlwave-mouse-context-help)
 
 ;; Set action and key bindings.
 ;; See description of the function `idlwave-action-and-binding'.
 ;; Automatically add spaces for the following characters
-(idlwave-action-and-binding "&"  '(idlwave-surround -1 -1))
+;(idlwave-action-and-binding "&"  '(idlwave-surround -1 -1 '(?&) 1
+;						    (lambda (char) 0)))
 (idlwave-action-and-binding "<"  '(idlwave-surround -1 -1))
 ;; Binding works for both > and ->, by changing the length of the token.
-(idlwave-action-and-binding ">"  '(idlwave-surround -1 -1 '(?-) 1
+(idlwave-action-and-binding ">"  '(idlwave-surround -1 -1 '(?-) 1 
 						    'idlwave-gtr-pad-hook))
 (idlwave-action-and-binding "->" '(idlwave-surround -1 -1 nil 2) t)
 (idlwave-action-and-binding ","  '(idlwave-surround 0 -1))
+
 ;; Automatically add spaces to equal sign if not keyword
 (idlwave-action-and-binding "="  '(idlwave-expand-equal -1 -1))
 
@@ -1647,7 +1628,7 @@
       (error (apply 'define-abbrev args)))))
 
 (condition-case nil
-    (modify-syntax-entry (string-to-char idlwave-abbrev-start-char)
+    (modify-syntax-entry (string-to-char idlwave-abbrev-start-char) 
 			 "w" idlwave-mode-syntax-table)
   (error nil))
 
@@ -1720,7 +1701,7 @@
 (idlwave-define-abbrev "s"  "size()"       (idlwave-keyword-abbrev 1))
 (idlwave-define-abbrev "wi" "widget_info()" (idlwave-keyword-abbrev 1))
 (idlwave-define-abbrev "wc" "widget_control," (idlwave-keyword-abbrev 0))
-
+  
 ;; This section is reserved words only. (From IDL user manual)
 ;;
 (idlwave-define-abbrev "and"        "and"       (idlwave-keyword-abbrev 0 t) t)
@@ -1769,12 +1750,12 @@
 (defvar imenu-extract-index-name-function)
 (defvar imenu-prev-index-position-function)
 ;; defined later - so just make the compiler hush
-(defvar idlwave-mode-menu)
+(defvar idlwave-mode-menu)  
 (defvar idlwave-mode-debug-menu)
 
 ;;;###autoload
 (defun idlwave-mode ()
-  "Major mode for editing IDL and WAVE CL .pro files.
+  "Major mode for editing IDL source files (version 5.5).
 
 The main features of this mode are
 
@@ -1801,8 +1782,7 @@
    relative to the first will be retained.  Use
    \\[idlwave-auto-fill-mode] to toggle auto-fill mode for these
    comments.  When the variable `idlwave-fill-comment-line-only' is
-   nil, code can also be auto-filled and auto-indented (not
-   recommended).
+   nil, code can also be auto-filled and auto-indented.
 
    To convert pre-existing IDL code to your formatting style, mark the
    entire buffer with \\[mark-whole-buffer] and execute
@@ -1817,24 +1797,28 @@
    source file of a module.  These commands know about system
    routines, all routines in idlwave-mode buffers and (when the
    idlwave-shell is active) about all modules currently compiled under
-   this shell.  Use \\[idlwave-update-routine-info] to update this
+   this shell.  It also makes use of pre-compiled or custom-scanned
+   user and library catalogs many popular libraries ship with by
+   default.  Use \\[idlwave-update-routine-info] to update this
    information, which is also used for completion (see item 4).
 
 3. Online IDL Help
    ---------------
    \\[idlwave-context-help] displays the IDL documentation relevant
-   for the system variable, keyword, or routine at point.  A single key
-   stroke gets you directly to the right place in the docs.  Two additional
-   files (an ASCII version of the IDL documentation and a topics file) must
-   be installed for this - check the IDLWAVE webpage for these files.
+   for the system variable, keyword, or routine at point.  A single
+   key stroke gets you directly to the right place in the docs.  The
+   HTML help files package must be installed for this to work -- check
+   the IDLWAVE webpage for the correct package for your version.  See
+   the manual to configure where and how the HTML help is displayed.
 
 4. Completion
    ----------
    \\[idlwave-complete] completes the names of procedures, functions
-   class names and keyword parameters.  It is context sensitive and
-   figures out what is expected at point (procedure/function/keyword).
-   Lower case strings are completed in lower case, other strings in
-   mixed or upper case.
+   class names, keyword parameters, system variables and tags, class
+   tags, structure tags, filenames and much more.  It is context
+   sensitive and figures out what is expected at point.  Lower case
+   strings are completed in lower case, other strings in mixed or
+   upper case.
 
 5. Code Templates and Abbreviations
    --------------------------------
@@ -1851,13 +1835,14 @@
    \\i         IF statement template
    \\elif      IF-ELSE statement template
    \\b         BEGIN
-
-   For a full list, use \\[idlwave-list-abbrevs].  Some templates also have
-   direct keybindings - see the list of keybindings below.
-
-   \\[idlwave-doc-header] inserts a documentation header at the beginning of the
-   current program unit (pro, function or main).  Change log entries
-   can be added to the current program unit with \\[idlwave-doc-modification].
+   
+   For a full list, use \\[idlwave-list-abbrevs].  Some templates also
+   have direct keybindings - see the list of keybindings below.
+
+   \\[idlwave-doc-header] inserts a documentation header at the
+   beginning of the current program unit (pro, function or main).
+   Change log entries can be added to the current program unit with
+   \\[idlwave-doc-modification].
 
 6. Automatic Case Conversion
    -------------------------
@@ -1892,26 +1877,26 @@
 
   (interactive)
   (kill-all-local-variables)
-
+  
   (if idlwave-startup-message
       (message "Emacs IDLWAVE mode version %s." idlwave-mode-version))
   (setq idlwave-startup-message nil)
-
+  
   (setq local-abbrev-table idlwave-mode-abbrev-table)
   (set-syntax-table idlwave-mode-syntax-table)
-
+  
   (set (make-local-variable 'indent-line-function) 'idlwave-indent-and-action)
-
+  
   (make-local-variable idlwave-comment-indent-function)
   (set idlwave-comment-indent-function 'idlwave-comment-hook)
-
+  
   (set (make-local-variable 'comment-start-skip) ";+[ \t]*")
   (set (make-local-variable 'comment-start) ";")
   (set (make-local-variable 'require-final-newline) t)
   (set (make-local-variable 'abbrev-all-caps) t)
   (set (make-local-variable 'indent-tabs-mode) nil)
   (set (make-local-variable 'completion-ignore-case) t)
-
+  
   (use-local-map idlwave-mode-map)
 
   (when (featurep 'easymenu)
@@ -1921,11 +1906,11 @@
   (setq mode-name "IDLWAVE")
   (setq major-mode 'idlwave-mode)
   (setq abbrev-mode t)
-
+  
   (set (make-local-variable idlwave-fill-function) 'idlwave-auto-fill)
   (setq comment-end "")
   (set (make-local-variable 'comment-multi-line) nil)
-  (set (make-local-variable 'paragraph-separate)
+  (set (make-local-variable 'paragraph-separate) 
        "[ \t\f]*$\\|[ \t]*;+[ \t]*$\\|;+[+=-_*]+$")
   (set (make-local-variable 'paragraph-start) "[ \t\f]\\|[ \t]*;+[ \t]")
   (set (make-local-variable 'paragraph-ignore-fill-prefix) nil)
@@ -1934,9 +1919,9 @@
   ;; Set tag table list to use IDLTAGS as file name.
   (if (boundp 'tag-table-alist)
       (add-to-list 'tag-table-alist '("\\.pro$" . "IDLTAGS")))
-
+  
   ;; Font-lock additions - originally Phil Williams, then Ulrik Dickow
-  ;; Following line is for Emacs - XEmacs uses the corresponding porperty
+  ;; Following line is for Emacs - XEmacs uses the corresponding property
   ;; on the `idlwave-mode' symbol.
   (set (make-local-variable 'font-lock-defaults) idlwave-font-lock-defaults)
 
@@ -1961,16 +1946,32 @@
   (add-hook 'after-save-hook 'idlwave-save-buffer-update nil 'local)
   (add-hook 'after-save-hook 'idlwave-revoke-license-to-kill nil 'local)
 
+  ;; Setup directories and file, if necessary
+  (idlwave-setup)
+
   ;; Update the routine info with info about current buffer?
   (idlwave-new-buffer-update)
 
   ;; Run the mode hook
   (run-hooks 'idlwave-mode-hook))
 
+(defvar idlwave-setup-done nil)
+(defun idlwave-setup ()
+  (unless idlwave-setup-done
+    (if (not (file-directory-p idlwave-config-directory))
+	(make-directory idlwave-config-directory))
+    (setq idlwave-user-catalog-file (expand-file-name 
+				     idlwave-user-catalog-file 
+				     idlwave-config-directory)
+	idlwave-path-file (expand-file-name 
+			   idlwave-path-file 
+			   idlwave-config-directory))
+    (idlwave-read-paths)  ; we may need these early
+    (setq idlwave-setup-done t)))
+
 ;;
-;;  Done with start up and initialization code.
-;;  The remaining routines are the code formatting functions.
-;;
+;; Code Formatting ----------------------------------------------------
+;; 
 
 (defun idlwave-push-mark (&rest rest)
   "Push mark for compatibility with Emacs 18/19."
@@ -2062,7 +2063,7 @@
 (defvar zmacs-regions)
 (defvar mark-active)
 (defun idlwave-region-active-p ()
-  "Is transien-mark-mode on and the region active?
+  "Is transient-mark-mode on and the region active?
 Works on both Emacs and XEmacs."
   (if (featurep 'xemacs)
       (and zmacs-regions (region-active-p))
@@ -2099,14 +2100,14 @@
 Also checks if the correct end statement has been used."
   ;; All end statements are reserved words
   ;; Re-indent end line
-  (insert-char ?\  1) ;; So indent, etc. work well
-  (backward-char 1)
+  ;;(insert-char ?\  1) ;; So indent, etc. work well
+  ;;(backward-char 1)
   (let* ((pos (point-marker))
 	 (last-abbrev-marker (copy-marker last-abbrev-location))
 	 (eol-pos (save-excursion (end-of-line) (point)))
 	 begin-pos end-pos end end1 )
     (if idlwave-reindent-end  (idlwave-indent-line))
-
+    (setq last-abbrev-location (marker-position last-abbrev-marker))
     (when (and (idlwave-check-abbrev 0 t)
 	       idlwave-show-block)
       (save-excursion
@@ -2119,7 +2120,7 @@
 	(if (> end-pos eol-pos)
 	    (setq end-pos pos))
 	(goto-char end-pos)
-	(setq end (buffer-substring
+	(setq end (buffer-substring 
 		   (progn
 		     (skip-chars-backward "a-zA-Z")
 		     (point))
@@ -2141,10 +2142,10 @@
 	    (sit-for 1))
 	   (t
 	    (beep)
-	    (message "Warning: Shouldn't this be \"%s\" instead of \"%s\"?"
+	    (message "Warning: Shouldn't this be \"%s\" instead of \"%s\"?" 
 		     end1 end)
-	    (sit-for 1)))))))
-  (delete-char 1))
+	    (sit-for 1))))))))
+  ;;(delete-char 1))
 
 (defun idlwave-block-master ()
   (let ((case-fold-search t))
@@ -2153,18 +2154,18 @@
        ((looking-at "pro\\|case\\|switch\\|function\\>")
 	(assoc (downcase (match-string 0)) idlwave-block-matches))
        ((looking-at "begin\\>")
-	(let ((limit (save-excursion
-		       (idlwave-beginning-of-statement)
+	(let ((limit (save-excursion 
+		       (idlwave-beginning-of-statement) 
 		       (point))))
 	  (cond
+	   ((re-search-backward ":[ \t]*\\=" limit t)
+	    ;; seems to be a case thing
+	    '("begin" . "end"))
 	   ((re-search-backward idlwave-block-match-regexp limit t)
 	    (assoc (downcase (match-string 1))
 		   idlwave-block-matches))
-	   ;;((re-search-backward ":[ \t]*\\=" limit t)
-	   ;; ;; seems to be a case thing
-	   ;; '("begin" . "end"))
 	   (t
-	    ;; Just a nromal block
+	    ;; Just a normal block
 	    '("begin" . "end")))))
        (t nil)))))
 
@@ -2182,9 +2183,9 @@
     (insert "end")
     (idlwave-show-begin)))
 
-(defun idlwave-gtr-pad-hook (char)
+(defun idlwave-gtr-pad-hook (char) 
   "Let the > symbol expand around -> if present.  The new token length
-is returned."
+is returned."  
   2)
 
 (defun idlwave-surround (&optional before after escape-chars length ec-hook)
@@ -2214,8 +2215,8 @@
     (let* ((length (or length 1)) ; establish a default for LENGTH
 	   (prev-char (char-after (- (point) (1+ length)))))
       (when (or (not (memq prev-char escape-chars))
-		(and (fboundp ec-hook)
-		     (setq length
+		(and (fboundp ec-hook) 
+		     (setq length 
 			   (save-excursion (funcall ec-hook prev-char)))))
 	(backward-char length)
 	(save-restriction
@@ -2437,7 +2438,7 @@
         (let ((eos (save-excursion
                      (idlwave-block-jump-out -1 'nomark)
                      (point))))
-          (if (setq status (idlwave-find-key
+          (if (setq status (idlwave-find-key 
 			    idlwave-end-block-reg -1 'nomark eos))
               (idlwave-beginning-of-statement)
             (message "No nested block before beginning of containing block.")))
@@ -2445,7 +2446,7 @@
       (let ((eos (save-excursion
                    (idlwave-block-jump-out 1 'nomark)
                    (point))))
-        (if (setq status (idlwave-find-key
+        (if (setq status (idlwave-find-key 
 			  idlwave-begin-block-reg 1 'nomark eos))
             (idlwave-end-of-statement)
           (message "No nested block before end of containing block."))))
@@ -2459,7 +2460,7 @@
         (here (point)))
     (goto-char (point-max))
     (if (re-search-backward idlwave-doclib-start nil t)
-        (progn
+        (progn 
 	  (setq beg (progn (beginning-of-line) (point)))
 	  (if (re-search-forward idlwave-doclib-end nil t)
 	      (progn
@@ -2493,7 +2494,7 @@
    ((eq major-mode 'idlwave-shell-mode)
     (if (re-search-backward idlwave-shell-prompt-pattern nil t)
 	(goto-char (match-end 0))))
-   (t
+   (t	
     (if (save-excursion (forward-line -1) (idlwave-is-continuation-line))
 	(idlwave-previous-statement)
       (beginning-of-line)))))
@@ -2570,7 +2571,7 @@
   (let ((save-point (point)))
     (when (re-search-forward ".*&" lim t)
       (goto-char (match-end 0))
-      (if (idlwave-in-quote) (goto-char save-point)))
+      (if (idlwave-quoted) (goto-char save-point)))
     (point)))
 
 (defun idlwave-skip-label-or-case ()
@@ -2585,7 +2586,7 @@
   ;; - not in parenthesis (like a[0:3])
   ;; - not followed by another ":" in explicit class, ala a->b::c
   ;; As many in this mode, this function is heuristic and not an exact
-  ;; parser.
+  ;; parser. 
   (let* ((start (point))
 	 (eos (save-excursion (idlwave-end-of-statement) (point)))
 	 (end (idlwave-find-key ":" 1 'nomark eos)))
@@ -2612,7 +2613,8 @@
         st nst last)
     (idlwave-beginning-of-statement)
     (idlwave-skip-label-or-case)
-    (idlwave-skip-multi-commands orig)
+    (if (< (point) orig)
+	(idlwave-skip-multi-commands orig))
     (setq last (point))
     ;; Continue looking for substatements until we are past orig
     (while (and (<= (point) orig) (not (eobp)))
@@ -2654,47 +2656,83 @@
           (append st (match-end 0))))))
 
 (defun idlwave-expand-equal (&optional before after)
-  "Pad '=' with spaces.
-Two cases: Assignment statement, and keyword assignment.
-The case is determined using `idlwave-start-of-substatement' and
-`idlwave-statement-type'.
-The equal sign will be surrounded by BEFORE and AFTER blanks.
-If `idlwave-pad-keyword' is t then keyword assignment is treated just
+  "Pad '=' with spaces.  Two cases: Assignment statement, and keyword
+assignment.  Which case is determined using
+`idlwave-start-of-substatement' and `idlwave-statement-type'.  The
+equal sign will be surrounded by BEFORE and AFTER blanks.  If
+`idlwave-pad-keyword' is t then keyword assignment is treated just
 like assignment statements.  When nil, spaces are removed for keyword
 assignment.  Any other value keeps the current space around the `='.
-Limits in for loops are treated as keyword assignment.
-See `idlwave-surround'. "
-  ;; Even though idlwave-surround checks `idlwave-surround-by-blank' this
-  ;; check saves the time of finding the statement type.
+Limits in for loops are treated as keyword assignment.  
+
+Starting with IDL 6.0, a number of op= assignments are available.
+Since ambiguities of the form:
+
+r and= b
+rand= b
+
+can occur, alphanumeric operator assignment will never be pre-padded,
+only post-padded.  You must use a space before these to disambiguate
+\(not just for padding, but for proper parsing by IDL too!).  Other
+operators, such as ##=, ^=, etc., will be pre-padded.
+
+See `idlwave-surround'."
   (if idlwave-surround-by-blank
-      (let ((st (save-excursion
-                  (idlwave-start-of-substatement t)
-                  (idlwave-statement-type))))
-
-        (cond ((or (and (equal (car (car st)) 'assign)
-			(equal (cdr st) (point)))
-		   (eq t idlwave-pad-keyword))
-	       ;; An assignment statement or keywor and we need padding
-	       (idlwave-surround before after))
-	      ((null idlwave-pad-keyword)
-	       ;; Spaces should be removed at a keyword
-	       (idlwave-surround 0 0))
-	      (t)))))
+      (let 
+	  ((non-an-ops "\\(##\\|\\*\\|\\+\\|-\\|/\\|<\\|>\\|\\^\\)\\=")
+	   (an-ops 
+	    "\\s-\\(AND\\|EQ\\|GE\\|GT\\|LE\\|LT\\|MOD\\|NE\\|OR\\|XOR\\)\\=")
+	   (len 1))
+	
+	(save-excursion 
+	  (let ((case-fold-search t))
+	    (backward-char)
+	    (if (or 
+		 (re-search-backward non-an-ops nil t)
+		 ;; Why doesn't ##? work for both?
+		 (re-search-backward "\\(#\\)\\=" nil t)) 
+		(setq len (1+ (length (match-string 1))))
+	      (when (re-search-backward an-ops nil t)
+		(setq begin nil) ; won't modify begin
+		(setq len (1+ (length (match-string 1))))))))
+	
+	(if (eq t idlwave-pad-keyword)  
+	    ;; Everything gets padded equally
+	    (idlwave-surround before after nil len)
+	  ;; Treating keywords/for variables specially...
+	  (let ((st (save-excursion   ; To catch "for" variables
+		      (idlwave-start-of-substatement t)
+		      (idlwave-statement-type)))
+		(what (save-excursion ; To catch keywords
+			(skip-chars-backward "= \t")
+			(nth 2 (idlwave-where)))))
+	    (cond ((or (memq what '(function-keyword procedure-keyword))
+		       (memq (caar st) '(for pdef))) 
+		   (cond 
+		    ((null idlwave-pad-keyword)
+		     (idlwave-surround 0 0)
+		     ) ; remove space
+		    (t))) ; leave any spaces alone
+		  (t (idlwave-surround before after nil len))))))))
+	      
 
 (defun idlwave-indent-and-action (&optional arg)
   "Call `idlwave-indent-line' and do expand actions.
 With prefix ARG non-nil, indent the entire sub-statement."
   (interactive "p")
   (save-excursion
-    (if	(and idlwave-expand-generic-end
-	     (re-search-backward "\\<\\(end\\)\\s-*\\="
+    (if	(and idlwave-expand-generic-end 
+	     (re-search-backward "\\<\\(end\\)\\s-*\\=" 
 				 (max 0 (- (point) 10)) t)
 	     (looking-at "\\(end\\)\\([ \n\t]\\|\\'\\)"))
 	(progn (goto-char (match-end 1))
 	       ;;Expand the END abbreviation, just as RET or Space would have.
 	       (if abbrev-mode (expand-abbrev)
 		 (idlwave-show-begin)))))
-  (if arg
+  (when (and (not arg) current-prefix-arg)
+    (setq arg current-prefix-arg)
+    (setq current-prefix-arg nil))
+  (if arg 
       (idlwave-indent-statement)
     (idlwave-indent-line t)))
 
@@ -2821,25 +2859,36 @@
              (idlwave-is-continuation-line)))
       (idlwave-calculate-cont-indent))
      ;; calculate indent based on previous and current statements
-     (t (let ((the-indent
-               ;; calculate indent based on previous statement
-               (save-excursion
-		 (cond
-                  ((idlwave-previous-statement)
-                   0)
-                  ;; Main block
-                  ((idlwave-look-at idlwave-begin-unit-reg t)
-                   (+ (idlwave-current-statement-indent)
-		      idlwave-main-block-indent))
-                  ;; Begin block
-                  ((idlwave-look-at idlwave-begin-block-reg t)
-                   (+ (idlwave-current-statement-indent)
-		      idlwave-block-indent))
-                  ((idlwave-look-at idlwave-end-block-reg t)
-                   (- (idlwave-current-statement-indent)
-		      idlwave-end-offset
-		      idlwave-block-indent))
-                  ((idlwave-current-statement-indent))))))
+     (t (let* (beg-prev-pos
+	       (the-indent
+		;; calculate indent based on previous statement
+		(save-excursion
+		  (cond
+		   ;; Beginning of file
+		   ((prog1 
+			(idlwave-previous-statement)
+		      (setq beg-prev-pos (point)))
+		    0)
+		   ;; Main block
+		   ((idlwave-look-at idlwave-begin-unit-reg t)
+		    (+ (idlwave-current-statement-indent)
+		       idlwave-main-block-indent))
+		   ;; Begin block
+		   ((idlwave-look-at idlwave-begin-block-reg t)
+		    (+ (idlwave-min-current-statement-indent) 
+		       idlwave-block-indent))
+		   ;; End Block
+		   ((idlwave-look-at idlwave-end-block-reg t)
+		    (progn
+		      ;; Match to the *beginning* of the block opener
+		      (goto-char beg-prev-pos)
+		      (idlwave-block-jump-out -1 'nomark) ; go to begin block
+		      (idlwave-min-current-statement-indent)))
+		      ;;		      idlwave-end-offset
+		      ;;		      idlwave-block-indent))
+		   
+		   ;; Default to current indent
+		   ((idlwave-current-statement-indent))))))
           ;; adjust the indentation based on the current statement
           (cond
            ;; End block
@@ -2848,12 +2897,12 @@
            (the-indent)))))))
 
 ;;
-;; Parentheses balacing/indent
+;; Parentheses indent
 ;;
 
 (defun idlwave-calculate-paren-indent (beg-reg end-reg close-exp)
   "Calculate the continuation indent inside a paren group.
-Returns a cons-cell with (open . indent), where open is the
+Returns a cons-cell with (open . indent), where open is the 
 location of the open paren"
   (let ((open (nth 1 (parse-partial-sexp beg-reg end-reg))))
     ;; Found an innermost open paren.
@@ -2862,126 +2911,148 @@
       ;; Line up with next word unless this is a closing paren.
       (cons open
 	    (cond
+	     ;; Plain Kernighan-style nested indent
+	     (idlwave-indent-parens-nested
+	      (+ idlwave-continuation-indent (idlwave-current-indent)))
+
 	     ;; This is a closed paren - line up under open paren.
 	     (close-exp
 	      (current-column))
-	     ;; Empty (or just comment) - just line up next to paren
+
+	     ;; Empty (or just comment) follows -- revert to basic indent
 	     ((progn
 		;; Skip paren
 		(forward-char 1)
 		(looking-at "[ \t$]*\\(;.*\\)?$"))
-	      (current-column))
-	     ;; Line up with first word after blank space
+	      nil)
+
+	     ;; Line up with first word after any blank space
 	     ((progn
 		(skip-chars-forward " \t")
 		(current-column))))))))
 
 (defun idlwave-calculate-cont-indent ()
-  "Calculates the IDL continuation indent column from the previous statement.
-Note that here previous statement means the beginning of the current
-statement if this statement is a continuation of the previous line."
+  "Calculates the IDL continuation indent column from the previous
+statement.  Note that here previous statement usually means the
+beginning of the current statement if this statement is a continuation
+of the previous line.  Various special types of continuations,
+including assignments, routine definitions, and parenthetical
+groupings, are treated separately."
   (save-excursion
-    (let* (open
-           (case-fold-search t)
+    (let* ((case-fold-search t)
            (end-reg (progn (beginning-of-line) (point)))
-           (close-exp (progn (skip-chars-forward " \t") (looking-at "\\s)")))
-;           (beg-reg (progn (idlwave-previous-statement) (point)))
-           (beg-reg (progn ;; Use substatement indent unless it's this line
-		      (idlwave-start-of-substatement 'pre)
-		      (if (eq (line-beginning-position) end-reg)
-			  (idlwave-previous-statement))
-		      (point)))
-	   (cur-indent (idlwave-current-indent))
-	   (else-cont (and (goto-char end-reg) (looking-at "[ \t]*else")))
-	   (basic-indent 	   ;; The basic, non-fancy indent
-	    (+ cur-indent idlwave-continuation-indent))
-	   (fancy-nonparen-indent  ;; A smarter indent for routine/assignments
-	    ;; Try without parens first:
-	    (progn
-	      (goto-char beg-reg)
-	      (while (idlwave-look-at "&"))  ; skip over continued statements
-	      (cond
-	       ;; A continued Procedure call or definition
-	       ((progn
-		  (idlwave-look-at "^[ \t]*\\(pro\\|function\\)") ;skip over
-		  (looking-at "[ \t]*\\([a-zA-Z0-9$_]+[ \t]*->[ \t]*\\)?[a-zA-Z][:a-zA-Z0-9$_]*[ \t]*\\(,\\)[ \t]*"))
-		(goto-char (match-end 0))
-		;; Comment only, or blank line with "$"?  Align with ,
-		(if (save-match-data (looking-at "[ \t$]*\\(;.*\\)?$"))
-		    (goto-char (match-end 2)))
-		(current-column))
-
-	       ;; Continued assignment (with =),
-	       ((looking-at "[ \t]*[][().a-zA-Z0-9$_]+[ \t]*\\(=\\)[ \t]*")
-		(goto-char (match-end 0))
-		;; Comment only?  Align with =
-		(if (save-match-data (looking-at "[ \t$]*\\(;.*\\)?$"))
-		    (progn
-		      (goto-char (match-end 1))
-		      (if idlwave-surround-by-blank
-			  (1+ (current-column))
-			(current-column)))
-		  (current-column))))))
-	   (fancy-nonparen-indent-allowed
- 	    (and fancy-nonparen-indent
-		 (< (- fancy-nonparen-indent basic-indent)
-		    idlwave-max-extra-continuation-indent)))
-	   (fancy-paren-indent-cons     ;; A smarter indent for paren groups
-	    ;; Look for any enclosing parens
-	    (idlwave-calculate-paren-indent beg-reg end-reg close-exp))
-	   (fancy-paren-open (car fancy-paren-indent-cons))
-	   (fancy-paren-indent (cdr fancy-paren-indent-cons))
-	   (fancy-paren-indent-allowed
-	    (and fancy-paren-indent
-		 (or idlwave-indent-to-open-paren ;; override
-		     (< (- fancy-paren-indent basic-indent)
-			idlwave-max-extra-continuation-indent))))
-	    fancy-enclosing-paren-indent)
-      (cond
-       ;; else continuations are always standard
-       (else-cont
-	cur-indent)
-
-       ;; an allowed parenthesis-indent
-       (fancy-paren-indent-allowed
+	   (beg-last-statement (save-excursion (idlwave-previous-statement)
+					       (point)))
+           (beg-reg (progn (idlwave-start-of-substatement 'pre) 
+			   (if (eq (line-beginning-position) end-reg)
+			       (goto-char beg-last-statement)
+			     (point))))
+	   (basic-indent (+ (idlwave-min-current-statement-indent end-reg)
+			    idlwave-continuation-indent))
+	   fancy-nonparen-indent fancy-paren-indent)
+      (cond 
+       ;; Align then with its matching if, etc.
+       ((let ((matchers '(("\\<if\\>" . "[ \t]*then")
+			  ("\\<\\(if\\|end\\(if\\)?\\)\\>" . "[ \t]*else")
+			  ("\\<\\(for\\|while\\)\\>" . "[ \t]*do")
+			  ("\\<\\(repeat\\|end\\(rep\\)?\\)\\>" . 
+			   "[ \t]*until")
+			  ("\\<case\\>" . "[ \t]*of")))
+	      match cont-re)
+	  (goto-char end-reg)
+	  (and 
+	   (setq cont-re
+		 (catch 'exit
+		   (while (setq match (car matchers))
+		     (if (looking-at (cdr match))
+			 (throw 'exit (car match)))
+		     (setq matchers (cdr matchers)))))
+	   (idlwave-find-key cont-re -1 'nomark beg-last-statement)))
+	(if (looking-at "end") ;; that one's special
+	    (- (idlwave-current-indent) 
+	       (+ idlwave-block-indent idlwave-end-offset))
+	  (idlwave-current-indent)))
+
+       ;; Indent in from the previous line for continuing statements
+       ((let ((matchers '("\\<then\\>"
+			  "\\<do\\>"
+			  "\\<repeat\\>"
+			  "\\<else\\>"))
+	      match)
+	  (catch 'exit
+	    (goto-char end-reg)
+	    (if (/= (forward-line -1) 0)
+		(throw 'exit nil))
+	    (while (setq match (car matchers))
+	      (if (looking-at (concat ".*" match "[ \t]*\\$[ \t]*"
+				      "\\(;.*\\)?$"))
+		  (throw 'exit t))
+	      (setq matchers (cdr matchers)))))
+	(+ idlwave-continuation-indent (idlwave-current-indent)))
+
+       ;; Parenthetical indent, either traditional or Kernighan style
+       ((setq fancy-paren-indent
+	      (let* ((end-reg end-reg)
+		    (close-exp (progn
+				 (goto-char end-reg)
+				 (skip-chars-forward " \t") 
+				 (looking-at "\\s)")))
+		    indent-cons)
+		(catch 'loop
+		  (while (setq indent-cons (idlwave-calculate-paren-indent
+					    beg-reg end-reg close-exp))
+		    ;; First permitted containing paren
+		    (if (or
+			 idlwave-indent-to-open-paren
+			 idlwave-indent-parens-nested
+                         (null (cdr indent-cons))
+			 (< (- (cdr indent-cons) basic-indent)
+			    idlwave-max-extra-continuation-indent))
+			(throw 'loop (cdr indent-cons)))
+		    (setq end-reg (car indent-cons))))))
 	fancy-paren-indent)
 
-       ;; a disallowed paren indent nested inside one or more other
-       ;; parens: indent relative to the first allowed enclosing paren
-       ;; set, if any... if it's actually a greater indent, just use
-       ;; the fancy-paren-indent anyway.
-       ((and fancy-paren-indent
-	     (not fancy-paren-indent-allowed)
-	     (setq fancy-enclosing-paren-indent
-		   (let ((enclose-open fancy-paren-open)
-			 enclose-indent-cons
-			 enclose-indent)
-		     (catch 'loop
-		       (while (setq enclose-indent-cons
-				    (idlwave-calculate-paren-indent
-				     beg-reg (max (1- enclose-open) beg-reg)
-				     nil)
-				    enclose-open   (car enclose-indent-cons)
-				    enclose-indent (cdr enclose-indent-cons))
-			 (if (< (- enclose-indent basic-indent)
-				idlwave-max-extra-continuation-indent)
-			     (throw 'loop enclose-indent)))))))
-	(min fancy-paren-indent
-	     (+ fancy-enclosing-paren-indent idlwave-continuation-indent)))
-
-       ;; a disallowed paren indent inside another type: indent relative
-       ((and fancy-paren-indent
-	     (not fancy-paren-indent-allowed)
-	     fancy-nonparen-indent-allowed )
-	(+ fancy-nonparen-indent idlwave-continuation-indent))
-
-       ;; an allowed nonparen-only indent
-       (fancy-nonparen-indent-allowed
-	fancy-nonparen-indent)
-
-       ;; everything else
-       (t
-	basic-indent)))))
+       ;; A continued assignment, or procedure call/definition
+       ((and
+	 (> idlwave-max-extra-continuation-indent 0)
+	 (setq fancy-nonparen-indent
+	       (progn
+		 (goto-char beg-reg)
+		 (while (idlwave-look-at "&"))  ; skip continued statements
+		 (cond
+		  ;; A continued Procedure call or definition
+		  ((progn
+		     (idlwave-look-at "^[ \t]*\\(pro\\|function\\)") ;skip over
+		     (looking-at "[ \t]*\\([a-zA-Z0-9.$_]+[ \t]*->[ \t]*\\)?[a-zA-Z][:a-zA-Z0-9$_]*[ \t]*\\(,\\)[ \t]*"))
+		   (goto-char (match-end 0))
+		   ;; Comment only, or blank line with "$"?  Basic indent.
+		   (if (save-match-data (looking-at "[ \t$]*\\(;.*\\)?$"))
+		       nil
+		     (current-column)))
+		  
+		  ;; Continued assignment (with =):
+		  ((catch 'assign ;
+		     (while (looking-at "[^=\n\r]*\\(=\\)[ \t]*")
+		       (goto-char (match-end 0))
+		       (if (null (idlwave-what-function beg-reg)) 
+			   (throw 'assign t))))
+		   (unless (or
+			    (idlwave-in-quote)
+			    (looking-at "[ \t$]*\\(;.*\\)?$") ; use basic
+			    (save-excursion
+			      (goto-char beg-last-statement)
+			      (eq (caar (idlwave-statement-type)) 'for)))
+		     (current-column))))))
+	 (< (- fancy-nonparen-indent basic-indent)
+	    idlwave-max-extra-continuation-indent))
+	(if fancy-paren-indent ;calculated but disallowed paren indent
+	    (+ fancy-nonparen-indent idlwave-continuation-indent)
+	  fancy-nonparen-indent))
+
+       ;; Basic indent, by default
+       (t basic-indent)))))
+
+
 
 (defun idlwave-find-key (key-re &optional dir nomark limit)
   "Move to next match of the regular expression KEY-RE.
@@ -3001,7 +3072,10 @@
        (catch 'exit
 	 (while (funcall search-func key-re limit t)
 	   (if (not (idlwave-quoted))
-	       (throw 'exit (setq found (match-beginning 0))))))))
+	       (throw 'exit (setq found (match-beginning 0)))
+	     (if (or (and (> dir 0) (eobp))
+		     (and (< dir 0) (bobp)))
+		 (throw 'exit nil)))))))
     (if found
 	(progn
 	  (if (not nomark) (push-mark))
@@ -3022,7 +3096,7 @@
   (let* ((here (point))
          (case-fold-search t)
          (limit (if (>= dir 0) (point-max) (point-min)))
-         (block-limit (if (>= dir 0)
+         (block-limit (if (>= dir 0) 
 			  idlwave-begin-block-reg
 			idlwave-end-block-reg))
          found
@@ -3033,7 +3107,7 @@
 			       (idlwave-find-key
 				idlwave-begin-unit-reg dir t limit)
 			     (end-of-line)
-			     (idlwave-find-key
+			     (idlwave-find-key 
 			      idlwave-end-unit-reg dir t limit)))
 			 limit)))
     (if (>= dir 0) (end-of-line)) ;Make sure we are in current block
@@ -3046,10 +3120,27 @@
     (if (not found) (goto-char unit-limit)
       (if (>= dir 0) (forward-word 1)))))
 
-(defun idlwave-current-statement-indent ()
+(defun idlwave-min-current-statement-indent (&optional end-reg)
+  "The minimum indent in the current statement."
+  (idlwave-beginning-of-statement)
+  (if (not (idlwave-is-continuation-line))
+      (idlwave-current-indent)
+    (let ((min (idlwave-current-indent)) comm-or-empty)
+      (while (and (= (forward-line 1) 0)
+		  (or (setq comm-or-empty (idlwave-is-comment-or-empty-line))
+		      (idlwave-is-continuation-line))
+		  (or (null end-reg) (< (point) end-reg)))
+	(unless comm-or-empty (setq min (min min (idlwave-current-indent)))))
+      (if (or comm-or-empty (and end-reg (>= (point) end-reg)))
+	  min 
+	(min min (idlwave-current-indent))))))
+
+(defun idlwave-current-statement-indent (&optional last-line)
   "Return indentation of the current statement.
 If in a statement, moves to beginning of statement before finding indent."
-  (idlwave-beginning-of-statement)
+  (if last-line
+      (idlwave-end-of-statement)
+    (idlwave-beginning-of-statement))
   (idlwave-current-indent))
 
 (defun idlwave-current-indent ()
@@ -3067,10 +3158,10 @@
 Blank or comment-only lines following regular continuation lines (with
 `$') count as continuations too."
   (save-excursion
-    (or
+    (or 
      (idlwave-look-at "\\<\\$")
      (catch 'loop
-       (while (and (looking-at "^[ \t]*\\(;.*\\)?$")
+       (while (and (looking-at "^[ \t]*\\(;.*\\)?$") 
 		   (eq (forward-line -1) 0))
 	 (if (idlwave-look-at "\\<\\$") (throw 'loop t)))))))
 
@@ -3168,7 +3259,7 @@
                                           (beginning-of-line) (point))
                                         (point))))
                "[^;]"))
-
+	
         ;; Mark the beginning and end of the paragraph
         (goto-char bcl)
         (while (and (looking-at fill-prefix-reg)
@@ -3232,7 +3323,7 @@
                       (insert (make-string diff ?\ ))))
                 (forward-line -1))
               )
-
+	  
           ;; No hang. Instead find minimum indentation of paragraph
           ;; after first line.
           ;; For the following while statement, since START is at the
@@ -3264,7 +3355,7 @@
                   t)
                  (current-column))
                indent))
-
+	
         ;; try to keep point at its original place
         (goto-char here)
 
@@ -3313,11 +3404,11 @@
           (current-column)))))
 
 (defun idlwave-auto-fill ()
-  "Called to break lines in auto fill mode.
-Only fills comment lines if `idlwave-fill-comment-line-only' is non-nil.
-Places a continuation character at the end of the line
-if not in a comment.  Splits strings with IDL concatenation operator
-`+' if `idlwave-auto-fill-split-string is non-nil."
+  "Called to break lines in auto fill mode.  
+Only fills non-comment lines if `idlwave-fill-comment-line-only' is
+non-nil.  Places a continuation character at the end of the line if
+not in a comment.  Splits strings with IDL concatenation operator `+'
+if `idlwave-auto-fill-split-string' is non-nil."
   (if (<= (current-column) fill-column)
       nil                             ; do not to fill
     (if (or (not idlwave-fill-comment-line-only)
@@ -3330,7 +3421,13 @@
 	  ;; Prevent actions do-auto-fill which calls indent-line-function.
 	  (let (idlwave-do-actions
 		(paragraph-start ".")
-		(paragraph-separate "."))
+		(paragraph-separate ".")
+		(fill-nobreak-predicate
+		 (if (and (idlwave-in-quote)
+			  idlwave-auto-fill-split-string)
+		     (lambda () ;; We'll need 5 spaces for " ' + $"
+		       (<= (- fill-column (current-column)) 5)
+		       ))))
 	    (do-auto-fill))
 	  (save-excursion
 	    (end-of-line 0)
@@ -3365,7 +3462,7 @@
 	    (if (save-excursion
 		  (end-of-line 0)
 		  (idlwave-in-comment))
-		;; Splitting a non-line comment.
+		;; Splitting a non-full-line comment.
 		;; Insert the comment delimiter from split line
 		(progn
 		  (save-excursion
@@ -3422,6 +3519,11 @@
     ;; update mode-line
     (set-buffer-modified-p (buffer-modified-p))))
 
+;(defun idlwave-fill-routine-call ()
+;  "Fill a routine definition or statement, indenting appropriately."
+;  (let ((where (idlwave-where)))))
+
+
 (defun idlwave-doc-header (&optional nomark )
   "Insert a documentation header at the beginning of the unit.
 Inserts the value of the variable idlwave-file-header. Sets mark before
@@ -3453,7 +3555,7 @@
   (insert (current-time-string))
   (insert ", " (user-full-name))
   (if (boundp 'user-mail-address)
-      (insert " <" user-mail-address ">")
+      (insert " <" user-mail-address ">") 
     (insert " <" (user-login-name) "@" (system-name) ">"))
   ;; Remove extra spaces from line
   (idlwave-fill-paragraph)
@@ -3479,7 +3581,7 @@
 	     (setq end (match-end 0)))
 	(progn
 	  (goto-char beg)
-	  (if (re-search-forward
+	  (if (re-search-forward 
 	       (concat idlwave-doc-modifications-keyword ":")
 	       end t)
 	      (end-of-line)
@@ -3539,7 +3641,7 @@
       (while  (< endq start)
 	;; Find string start
 	;; Don't find an octal constant beginning with a double quote
-	(if (re-search-forward "\"[^0-7]\\|'\\|\"$" eol 'lim)
+	(if (re-search-forward "[\"']" eol 'lim)
 	    ;; Find the string end.
 	    ;; In IDL, two consecutive delimiters after the start of a
 	    ;; string act as an
@@ -3577,7 +3679,7 @@
      (not (idlwave-in-quote))
      (save-excursion
        (forward-char)
-       (re-search-backward (concat "\\(" idlwave-idl-keywords
+       (re-search-backward (concat "\\(" idlwave-idl-keywords 
 				   "\\|[[(*+-/=,^><]\\)\\s-*\\*") limit t)))))
 
 
@@ -3623,7 +3725,7 @@
 	  (indent-region beg end nil))
       (if (stringp prompt)
 	  (message prompt)))))
-
+  
 (defun idlwave-rw-case (string)
   "Make STRING have the case required by `idlwave-reserved-word-upcase'."
   (if idlwave-reserved-word-upcase
@@ -3641,7 +3743,7 @@
 (defun idlwave-case ()
   "Build skeleton IDL case statement."
   (interactive)
-  (idlwave-template
+  (idlwave-template 
    (idlwave-rw-case "case")
    (idlwave-rw-case " of\n\nendcase")
    "Selector expression"))
@@ -3649,7 +3751,7 @@
 (defun idlwave-switch ()
   "Build skeleton IDL switch statement."
   (interactive)
-  (idlwave-template
+  (idlwave-template 
    (idlwave-rw-case "switch")
    (idlwave-rw-case " of\n\nendswitch")
    "Selector expression"))
@@ -3657,7 +3759,7 @@
 (defun idlwave-for ()
   "Build skeleton for loop statment."
   (interactive)
-  (idlwave-template
+  (idlwave-template 
    (idlwave-rw-case "for")
    (idlwave-rw-case " do begin\n\nendfor")
    "Loop expression"))
@@ -3672,14 +3774,14 @@
 
 (defun idlwave-procedure ()
   (interactive)
-  (idlwave-template
+  (idlwave-template 
    (idlwave-rw-case "pro")
    (idlwave-rw-case "\n\nreturn\nend")
    "Procedure name"))
 
 (defun idlwave-function ()
   (interactive)
-  (idlwave-template
+  (idlwave-template 
    (idlwave-rw-case "function")
    (idlwave-rw-case "\n\nreturn\nend")
    "Function name"))
@@ -3693,7 +3795,7 @@
 
 (defun idlwave-while ()
   (interactive)
-  (idlwave-template
+  (idlwave-template 
    (idlwave-rw-case "while")
    (idlwave-rw-case " do begin\n\nendwhile")
    "Entry condition"))
@@ -3742,7 +3844,7 @@
 	buf)))
 
 (defun idlwave-kill-autoloaded-buffers ()
-  "Cleanup by killing buffers created automatically by IDLWAVE.
+  "Kill buffers created automatically by IDLWAVE.
 Function prompts for a letter to identify the buffers to kill.
 Possible letters are:
 
@@ -3772,8 +3874,8 @@
 (defun idlwave-count-outlawed-buffers (tag)
   "How many outlawed buffers have tag TAG?"
   (length (delq nil
-		(mapcar
-		 (lambda (x) (eq (cdr x) tag))
+		(mapcar 
+		 (lambda (x) (eq (cdr x) tag)) 
 		 idlwave-outlawed-buffers))))
 
 (defun idlwave-do-kill-autoloaded-buffers (&rest reasons)
@@ -3787,9 +3889,9 @@
 		   (memq (cdr entry) reasons))
 	       (kill-buffer (car entry))
 	       (incf cnt)
-	       (setq idlwave-outlawed-buffers
+	       (setq idlwave-outlawed-buffers 
 		     (delq entry idlwave-outlawed-buffers)))
-	(setq idlwave-outlawed-buffers
+	(setq idlwave-outlawed-buffers 
 	      (delq entry idlwave-outlawed-buffers))))
     (message "%d buffer%s killed" cnt (if (= cnt 1) "" "s"))))
 
@@ -3801,7 +3903,7 @@
 	 (entry (assq buf idlwave-outlawed-buffers)))
     ;; Revoke license
     (if entry
-	(setq idlwave-outlawed-buffers
+	(setq idlwave-outlawed-buffers 
 	      (delq entry idlwave-outlawed-buffers)))
     ;; Remove this function from the hook.
     (remove-hook 'after-save-hook 'idlwave-revoke-license-to-kill 'local)))
@@ -3816,14 +3918,12 @@
 	(if (file-regular-p
 	     (setq efile (expand-file-name file dir)))
 	    (throw 'exit efile))))))
+
 (defun idlwave-expand-lib-file-name (file)
   ;; Find FILE on the scanned lib path and return a buffer visiting it
-  (cond
+  ;; This is for, e.g., finding source with no user catalog
+  (cond 
    ((null file) nil)
-   ((string-match "\\`\\({\\([0-9]+\\)}/\\)\\(.*\\)" file)
-    (expand-file-name (match-string 3 file)
-		      (car (nth (1- (string-to-int (match-string 2 file)))
-				idlwave-path-alist))))
    ((file-name-absolute-p file) file)
    (t (idlwave-locate-lib-file file))))
 
@@ -3837,7 +3937,7 @@
   (interactive)
   (let (directory directories cmd append status numdirs dir getsubdirs
 		  buffer save_buffer files numfiles item errbuf)
-
+    
     ;;
     ;; Read list of directories
     (setq directory (read-string "Tag Directories: " "."))
@@ -3888,12 +3988,12 @@
 		  (progn
 		    (message (concat "Tagging " item "..."))
 		    (setq errbuf (get-buffer-create "*idltags-error*"))
-		    (setq status
-			  (+ status
-			     (if (eq 0 (call-process "sh" nil errbuf nil "-c"
-						     (concat cmd append item)))
-				 0
-			       1)))
+		    (setq status (+ status
+				    (if (eq 0 (call-process 
+					       "sh" nil errbuf nil "-c"
+					       (concat cmd append item)))
+					0
+  	                                1)))
 		    ;;
 		    ;; Append additional tags
 		    (setq append " --append ")
@@ -3903,13 +4003,13 @@
 		  (setq numfiles (1+ numfiles))
 		  (setq item (nth numfiles files))
 		  )))
-
+	    
 	    (setq numdirs (1+ numdirs))
 	    (setq dir (nth numdirs directories)))
 	(progn
 	  (setq numdirs (1+ numdirs))
 	  (setq dir (nth numdirs directories)))))
-
+    
     (setq errbuf (get-buffer-create "*idltags-error*"))
     (if (= status 0)
 	(kill-buffer errbuf))
@@ -3932,11 +4032,13 @@
       ;; skip blank lines
       (skip-chars-forward " \t\n")
       (if (looking-at (concat "[ \t]*\\(" comment-start "+\\)"))
-          (comment-region beg end
-                          (- (length (buffer-substring
-                                      (match-beginning 1)
-                                      (match-end 1)))))
-        (comment-region beg end)))))
+	  (if (fboundp 'uncomment-region)
+	      (uncomment-region beg end)
+	    (comment-region beg end
+			    (- (length (buffer-substring
+					(match-beginning 1)
+					(match-end 1))))))
+	(comment-region beg end)))))
 
 
 ;; ----------------------------------------------------------------------------
@@ -3952,17 +4054,21 @@
 ;; For the completion and routine info function, we want to normalize
 ;; the case of procedure names etc.  We do this by "interning" these
 ;; string is a hand-crafted way.  Hashes are used to map the downcase
-;; version of the strings to the cased versions.  Since these cased
-;; versions are really lisp objects, we can use `eq' to search, which
-;; is a large performance boost.
-;; All new strings need to be "sinterned".  We do this as early as
-;; possible after getting these strings from completion or buffer
-;; substrings.  So most of the code can simply assume to deal with
-;; "sinterned" strings.  The only exception is that the functions
-;; which scan whole buffers for routine information do not intern the
-;; grabbed strings.  This is only done afterwards.  Therefore in these
-;; functions it is *not* safe to assume the strings can be compared
-;; with `eq' and be fed into the routine assq functions.
+;; version of the strings to the cased versions.  Most *-sint-*
+;; variables consist of *two* hashes, a buffer+shell, followed by a
+;; system hash.  The former is re-scanned, and the latter takes case
+;; precedence.
+;;
+;; Since these cased versions are really lisp objects, we can use `eq'
+;; to search, which is a large performance boost.  All new strings
+;; need to be "sinterned".  We do this as early as possible after
+;; getting these strings from completion or buffer substrings.  So
+;; most of the code can simply assume to deal with "sinterned"
+;; strings.  The only exception is that the functions which scan whole
+;; buffers for routine information do not intern the grabbed strings.
+;; This is only done afterwards.  Therefore in these functions it is
+;; *not* safe to assume the strings can be compared with `eq' and be
+;; fed into the routine assq functions.
 
 ;; Here we define the hashing functions.
 
@@ -3971,14 +4077,15 @@
 (defvar idlwave-sint-keywords '(nil))
 (defvar idlwave-sint-methods  '(nil))
 (defvar idlwave-sint-classes  '(nil))
-(defvar idlwave-sint-files    '(nil))
+(defvar idlwave-sint-dirs    '(nil))
+(defvar idlwave-sint-libnames '(nil))
 
 (defun idlwave-reset-sintern (&optional what)
   "Reset all sintern hashes."
   ;; Make sure the hash functions are accessible.
   (if (or (not (fboundp 'gethash))
 	  (not (fboundp 'puthash)))
-      (progn
+      (progn 
 	(require 'cl)
 	(or (fboundp 'puthash)
 	    (defalias 'puthash 'cl-puthash))))
@@ -3997,16 +4104,17 @@
       ;; Reset the system & library hash
       (loop for entry in entries
 	for var = (car entry) for size = (nth 1 entry)
-	do (setcdr (symbol-value var)
+	do (setcdr (symbol-value var) 
 		   (make-hash-table ':size size ':test 'equal)))
-      (setq idlwave-sint-files nil))
+      (setq idlwave-sint-dirs nil
+	    idlwave-sint-libnames nil))
 
     (when (or (eq what t) (eq what 'bufsh)
 	      (null (car idlwave-sint-routines)))
       ;; Reset the buffer & shell hash
       (loop for entry in entries
 	for var = (car entry) for size = (nth 1 entry)
-	do (setcar (symbol-value var)
+	do (setcar (symbol-value var) 
 		   (make-hash-table ':size size ':test 'equal))))))
 
 (defun idlwave-sintern-routine-or-method (name &optional class set)
@@ -4049,9 +4157,12 @@
 	(set (idlwave-sintern-set name 'class idlwave-sint-classes set))
 	(name)))
 
-(defun idlwave-sintern-file (name &optional set)
-  (car (or (member name idlwave-sint-files)
-	   (setq idlwave-sint-files (cons name idlwave-sint-files)))))
+(defun idlwave-sintern-dir (dir &optional set)
+  (car (or (member dir idlwave-sint-dirs)
+	   (setq idlwave-sint-dirs (cons dir idlwave-sint-dirs)))))
+(defun idlwave-sintern-libname (name &optional set)
+  (car (or (member name idlwave-sint-libnames)
+	   (setq idlwave-sint-libnames (cons name idlwave-sint-libnames)))))
 
 (defun idlwave-sintern-set (name type tables set)
   (let* ((func (or (cdr (assq type idlwave-completion-case))
@@ -4061,10 +4172,18 @@
     (puthash (downcase name) iname table)
     iname))
 
-(defun idlwave-sintern-rinfo-list (list &optional set)
-  "Sintern all strings in the rinfo LIST.  With optional parameter SET:
-also set new patterns.  Probably this will always have to be t."
-  (let (entry name type class kwds res source call olh new)
+(defun idlwave-sintern-keyword-list (kwd-list &optional set)
+  "Sintern a set of keywords (file (key . link) (key2 . link2) ...)"
+  (mapcar (lambda(x)
+	    (setcar x (idlwave-sintern-keyword (car x) set)))
+	  (cdr kwd-list))
+  kwd-list)
+
+(defun idlwave-sintern-rinfo-list (list &optional set default-dir)
+  "Sintern all strings in the rinfo LIST.  With optional parameter
+SET: also set new patterns.  Probably this will always have to be t.
+If DEFAULT-DIR is passed, it is used as the base of the directory"
+  (let (entry name type class kwds res source call new)
     (while list
       (setq entry (car list)
 	    list (cdr list)
@@ -4073,23 +4192,37 @@
 	    class (nth 2 entry)
 	    source (nth 3 entry)
 	    call (nth 4 entry)
-	    kwds (nth 5 entry)
-	    olh (nth 6 entry))
-      (setq kwds (mapcar (lambda (x)
-			   (list (idlwave-sintern-keyword (car x) set)))
-			 kwds))
+	    kwds (nthcdr 5 entry))
+
+      ;; The class and name
       (if class
 	  (progn
 	    (if (symbolp class) (setq class (symbol-name class)))
 	    (setq class (idlwave-sintern-class class set))
 	    (setq name (idlwave-sintern-method name set)))
 	(setq name (idlwave-sintern-routine name set)))
-      (if (stringp (cdr source))
-	  (setcdr source (idlwave-sintern-file (cdr source) t)))
-      (setq new (if olh
-		    (list name type class source call kwds olh)
-		  (list name type class source call kwds)))
-      (setq res (cons new res)))
+      
+      ;; The source
+      (let ((source-type (car source))
+	    (source-file  (nth 1 source))
+	    (source-dir  (if default-dir  
+			     (file-name-as-directory default-dir)
+			   (nth 2 source)))
+	    (source-lib (nth 3 source)))
+	(if (stringp source-dir)
+	    (setq source-dir (idlwave-sintern-dir source-dir set)))
+	(if (stringp source-lib)
+	    (setq source-lib (idlwave-sintern-libname source-lib set)))
+	(setq source (list source-type source-file source-dir source-lib)))
+      
+      ;; The keywords
+      (setq kwds (mapcar (lambda (x)
+			   (idlwave-sintern-keyword-list x set))
+			 kwds))
+
+      ;; Build a canonicalized list
+      (setq new (nconc (list name type class source call) kwds)
+	    res (cons new res)))
     (nreverse res)))
 
 ;; Creating new sintern tables
@@ -4128,14 +4261,18 @@
   "Holds the routine-info obtained by asking the shell.")
 (defvar idlwave-unresolved-routines nil
   "Holds the unresolved routine-info obtained by asking the shell.")
-(defvar idlwave-library-routines nil
-  "Holds the procedure routine-info from the library scan.")
+(defvar idlwave-user-catalog-routines nil
+  "Holds the procedure routine-info from the user scan.")
+(defvar idlwave-library-catalog-routines nil
+  "Holds the procedure routine-info from the library catalog files.")
 (defvar idlwave-path-alist nil
-  "Alist with !PATH directories and a flag if the dir has been scanned.")
+  "Alist with !PATH directories and zero or more flags if the dir has
+been scanned in a user catalog ('user) or discovered in a library
+catalog \('lib).")
 (defvar idlwave-true-path-alist nil
   "Like `idlwave-path-alist', but with true filenames.")
 (defvar idlwave-routines nil
-  "Holds the combinded procedure routine-info.")
+  "Holds the combinded procedure/function/method routine-info.")
 (defvar idlwave-class-alist nil
   "Holds the class names known to IDLWAVE.")
 (defvar idlwave-class-history nil
@@ -4206,19 +4343,19 @@
 	(condition-case nil
 	    (kill-process idlwave-catalog-process)
 	  (error nil))))
-  (if (or (not idlwave-libinfo-file)
-	  (not (stringp idlwave-libinfo-file))
-	  (not (file-regular-p idlwave-libinfo-file)))
+  (if (or (not idlwave-user-catalog-file)
+	  (not (stringp idlwave-user-catalog-file))
+	  (not (file-regular-p idlwave-user-catalog-file)))
       (error "No catalog has been produced yet"))
   (let* ((emacs (expand-file-name (invocation-name) (invocation-directory)))
 	 (args (list "-batch"
 		     "-l" (expand-file-name "~/.emacs")
 		     "-l" "idlwave"
 		     "-f" "idlwave-rescan-catalog-directories"))
-	 (process (apply 'start-process "idlcat"
+	 (process (apply 'start-process "idlcat" 
 			 nil emacs args)))
     (setq idlwave-catalog-process process)
-    (set-process-sentinel
+    (set-process-sentinel 
      process
      (lambda (pro why)
        (when (string-match "finished" why)
@@ -4230,8 +4367,21 @@
     (message "Background job started to update catalog file")))
 
 
+;; Format for all routine info user catalog, library catalogs, etc.:
+;;
+;; ("ROUTINE" type class
+;;  (system) | (lib pro_file dir "LIBNAME") | (user pro_file dir "USERLIB") |
+;;  (buffer pro_file dir) | (compiled pro_file dir)
+;;   "calling_string" ("HELPFILE" (("KWD1" . link1) ...)))
+;;
+;; DIR will be supplied dynamically while loading library catalogs,
+;; and is sinterned to save space, as is LIBNAME.  PRO_FILE can be a
+;; complete filepath, in which case DIR is unnecessary.  HELPFILE can
+;; be nil, as can LINK1, etc., if no HTML help is available.
+
+
 (defvar idlwave-load-rinfo-idle-timer)
-(defun idlwave-update-routine-info (&optional arg dont-concentrate)
+(defun idlwave-update-routine-info (&optional arg no-concatenate)
   "Update the internal routine-info lists.
 These lists are used by `idlwave-routine-info' (\\[idlwave-routine-info])
 and by `idlwave-complete' (\\[idlwave-complete]) to provide information
@@ -4248,11 +4398,15 @@
 When an IDL shell is running, this command also queries the IDL program
 for currently compiled routines.
 
-???Document what DONT-CONCENTRATE means???
-
 With prefix ARG, also reload the system and library lists.
-With two prefix ARG's, also rescans the library tree.
-With three prefix args, dispatch asynchronous process to do the update."
+With two prefix ARG's, also rescans the chosen user catalog tree.
+With three prefix args, dispatch asynchronous process to do the update.
+
+If NO-CONCATENATE is non-nil, don't pre-concatenate the routine info
+lists, but instead wait for the shell query to complete and
+asynchronously finish updating routine info.  This is set
+automatically when called interactively.  When you need routine
+information updated immediately, leave NO-CONCATENATE nil."
   (interactive "P\np")
   ;; Stop any idle processing
   (if (or (and (fboundp 'itimerp)
@@ -4265,8 +4419,8 @@
     ;; Start a background process which updates the catalog.
     (idlwave-rescan-asynchronously))
    ((equal arg '(16))
-    ;; Update the catalog now, and wait for it.
-    (idlwave-create-libinfo-file t))
+    ;; Update the user catalog now, and wait for them.
+    (idlwave-create-user-catalog-file t))
    (t
     (let* ((load (or arg
 		     idlwave-buffer-case-takes-precedence
@@ -4274,7 +4428,7 @@
 	   ;; The override-idle means, even if the idle timer has done some
 	   ;; preparing work, load and renormalize everything anyway.
 	   (override-idle (or arg idlwave-buffer-case-takes-precedence)))
-
+      
       (setq idlwave-buffer-routines nil
 	    idlwave-compiled-routines nil
 	    idlwave-unresolved-routines nil)
@@ -4285,7 +4439,7 @@
 	(idlwave-reset-sintern (cond (load t)
 				     ((null idlwave-system-routines) t)
 				     (t 'bufsh))))
-
+      
       (if idlwave-buffer-case-takes-precedence
 	  ;; We can safely scan the buffer stuff first
 	  (progn
@@ -4300,24 +4454,36 @@
 				    (idlwave-shell-is-running)))
 	     (ask-shell (and shell-is-running
 			     idlwave-query-shell-for-routine-info)))
+      
+	;; Load the library catalogs again, first re-scanning the path
+	(when arg 
+	  (if shell-is-running
+	      (idlwave-shell-send-command idlwave-shell-path-query
+					  '(progn
+					     (idlwave-shell-get-path-info)
+					     (idlwave-scan-library-catalogs))
+					  'hide)
+	    (idlwave-scan-library-catalogs)))
 
 	(if (or (not ask-shell)
-		(not dont-concentrate))
+		(not no-concatenate))
 	    ;; 1. If we are not going to ask the shell, we need to do the
 	    ;;    concatenation now.
-	    ;; 2. When this function is called non-interactively, it means
-	    ;;    that someone needs routine info *now*.  The shell update
-	    ;;    causes the concatenation *delayed*, so not in time for
-	    ;;    the current command.  Therefore, we do a concatenation
-	    ;;    now, even though the shell might do it again.
-	    (idlwave-concatenate-rinfo-lists nil t))
-
+	    ;; 2. When this function is called non-interactively, it
+	    ;;    means that someone needs routine info *now*.  The
+	    ;;    shell update causes the concatenation to be
+	    ;;    *delayed*, so not in time for the current command.
+	    ;;    Therefore, we do a concatenation now, even though
+	    ;;    the shell might do it again.
+	    (idlwave-concatenate-rinfo-lists nil 'run-hooks))
+      
 	(when ask-shell
-	  ;; Ask the shell about the routines it knows.
+	  ;; Ask the shell about the routines it knows of.
 	  (message "Querying the shell")
 	  (idlwave-shell-update-routine-info nil t)))))))
 
-(defvar idlwave-load-rinfo-steps-done (make-vector 5 nil))
+
+(defvar idlwave-load-rinfo-steps-done (make-vector 6 nil))
 (defvar idlwave-load-rinfo-idle-timer nil)
 (defun idlwave-start-load-rinfo-timer ()
   (if (or (and (fboundp 'itimerp)
@@ -4325,7 +4491,7 @@
 	  (and (fboundp 'timerp)
 	       (timerp idlwave-load-rinfo-idle-timer)))
       (cancel-timer idlwave-load-rinfo-idle-timer))
-  (setq idlwave-load-rinfo-steps-done (make-vector 5 nil))
+  (setq idlwave-load-rinfo-steps-done (make-vector 6 nil))
   (setq idlwave-load-rinfo-idle-timer nil)
   (if (and idlwave-init-rinfo-when-idle-after
 	   (numberp idlwave-init-rinfo-when-idle-after)
@@ -4339,12 +4505,10 @@
 		   nil 'idlwave-load-rinfo-next-step)))
 	(error nil))))
 
-
-
 (defun idlwave-load-rinfo-next-step ()
   (let ((inhibit-quit t)
 	(arr idlwave-load-rinfo-steps-done))
-    (if	(catch 'exit
+    (when (catch 'exit
 	  (when (not (aref arr 0))
 	    (message "Loading idlw-rinfo.el in idle time...")
 	    (load "idlw-rinfo" 'noerror 'nomessage)
@@ -4361,41 +4525,54 @@
 	    (aset arr 1 t)
 	    (throw 'exit t))
 	  (when (not (aref arr 2))
-	    (when (and (stringp idlwave-libinfo-file)
-		       (file-regular-p idlwave-libinfo-file))
+	    (when (and (stringp idlwave-user-catalog-file)
+		       (file-regular-p idlwave-user-catalog-file))
+	      (message "Loading user catalog in idle time...")
 	      (condition-case nil
+		  (load-file idlwave-user-catalog-file)
+		(error (throw 'exit nil)))
+	      ;; Check for the old style catalog and warn
+	      (if (and
+		   (boundp 'idlwave-library-routines)
+		   idlwave-library-routines)
 		  (progn
-		    (message "Loading library catalog in idle time...")
-		    (load-file idlwave-libinfo-file)
-		    (message "Loading library catalog in idle time...done")
-		    (aset arr 2 t)
-		    (throw 'exit t))
-		(error (throw 'exit nil)))))
+		    (setq idlwave-library-routines nil)
+		    (ding)
+		    (message "Outdated user catalog: %s... recreate" 
+			     idlwave-user-catalog-file))
+		(message "Loading user catalog in idle time...done"))
+	      (aset arr 2 t)
+	      (throw 'exit t)))
 	  (when (not (aref arr 3))
-	    (when idlwave-library-routines
-	      (message "Normalizing idlwave-library-routines in idle time...")
-	      (setq idlwave-library-routines (idlwave-sintern-rinfo-list
-					      idlwave-library-routines 'sys))
-	      (message "Normalizing idlwave-library-routines in idle time...done"))
+	    (when idlwave-user-catalog-routines
+	      (message "Normalizing user catalog routines in idle time...")
+	      (setq idlwave-user-catalog-routines 
+		    (idlwave-sintern-rinfo-list
+		     idlwave-user-catalog-routines 'sys))
+	      (message 
+	       "Normalizing user catalog routines in idle time...done"))
 	    (aset arr 3 t)
 	    (throw 'exit t))
 	  (when (not (aref arr 4))
+	    (idlwave-scan-library-catalogs 
+	     "Loading and normalizing library catalogs in idle time...")
+	    (aset arr 4 t)
+	    (throw 'exit t))
+	  (when (not (aref arr 5))
 	    (message "Finishing initialization in idle time...")
 	    (idlwave-routines)
 	    (message "Finishing initialization in idle time...done")
 	    (throw 'exit nil)))
-	(progn
-	  ;; restart the timer
-	  (if (sit-for 1)
-	      (idlwave-load-rinfo-next-step)
-	    (setq idlwave-load-rinfo-idle-timer
-		  (run-with-idle-timer
-		   idlwave-init-rinfo-when-idle-after
-		   nil 'idlwave-load-rinfo-next-step)))
-	  ))))
+	;; restart the timer
+	(if (sit-for 1)
+	    (idlwave-load-rinfo-next-step)
+	  (setq idlwave-load-rinfo-idle-timer
+		(run-with-idle-timer
+		 idlwave-init-rinfo-when-idle-after
+		 nil 'idlwave-load-rinfo-next-step))))))
 
 (defun idlwave-load-system-rinfo (&optional force)
-  ;; Load and case-treat the system and lib info files.
+  ;; Load and case-treat the system and catalog files.
   (when (or force (not (aref idlwave-load-rinfo-steps-done 0)))
     (load "idlw-rinfo" 'noerror 'nomessage))
   (when (or force (not (aref idlwave-load-rinfo-steps-done 1)))
@@ -4406,30 +4583,35 @@
   (setq idlwave-routines (copy-sequence idlwave-system-routines))
   (setq idlwave-last-system-routine-info-cons-cell
 	(nthcdr (1- (length idlwave-routines)) idlwave-routines))
-  (when (and (stringp idlwave-libinfo-file)
-	     (file-regular-p idlwave-libinfo-file))
+  (when (and (stringp idlwave-user-catalog-file)
+	     (file-regular-p idlwave-user-catalog-file))
     (condition-case nil
-	(progn
-	  (when (or force (not (aref idlwave-load-rinfo-steps-done 2)))
-	    (load-file idlwave-libinfo-file))
-	  (setq idlwave-true-path-alist nil)
-	  (when (or force (not (aref idlwave-load-rinfo-steps-done 3)))
-	    (message "Normalizing idlwave-library-routines...")
-	    (setq idlwave-library-routines (idlwave-sintern-rinfo-list
-					    idlwave-library-routines 'sys))
-	    (message "Normalizing idlwave-library-routines...done")))
-      (error nil)))
-
+	(when (or force (not (aref idlwave-load-rinfo-steps-done 2)))
+	  (load-file idlwave-user-catalog-file))
+      (error nil))
+    (when (boundp 'idlwave-library-routines)
+      (setq idlwave-library-routines nil)
+      (error "Outdated user catalog: %s... recreate" idlwave-user-catalog-file))
+    (setq idlwave-true-path-alist nil)
+    (when (or force (not (aref idlwave-load-rinfo-steps-done 3)))
+      (message "Normalizing user catalog routines...")
+      (setq idlwave-user-catalog-routines 
+	    (idlwave-sintern-rinfo-list 
+	     idlwave-user-catalog-routines 'sys))
+      (message "Normalizing user catalog routines...done")))
+  (when (or force (not (aref idlwave-load-rinfo-steps-done 4)))
+    (idlwave-scan-library-catalogs
+     "Loading and normalizing library catalogs..."))
   (run-hooks 'idlwave-after-load-rinfo-hook))
 
 
 (defun idlwave-update-buffer-routine-info ()
   (let (res)
-    (cond
+    (cond 
      ((eq idlwave-scan-all-buffers-for-routine-info t)
       ;; Scan all buffers, current buffer last
       (message "Scanning all buffers...")
-      (setq res (idlwave-get-routine-info-from-buffers
+      (setq res (idlwave-get-routine-info-from-buffers 
 		 (reverse (buffer-list)))))
      ((null idlwave-scan-all-buffers-for-routine-info)
       ;; Don't scan any buffers
@@ -4442,28 +4624,29 @@
 	    (setq res (idlwave-get-routine-info-from-buffers
 		       (list (current-buffer))))))))
     ;; Put the result into the correct variable
-    (setq idlwave-buffer-routines
-	  (idlwave-sintern-rinfo-list res t))))
+    (setq idlwave-buffer-routines 
+	  (idlwave-sintern-rinfo-list res 'set))))
 
 (defun idlwave-concatenate-rinfo-lists (&optional quiet run-hook)
   "Put the different sources for routine information together."
-  ;; The sequence here is important because earlier definitions shadow
+  ;; The sequence here is important because earlier definitions shadow 
   ;; later ones.  We assume that if things in the buffers are newer
-  ;; then in the shell of the system, it is meant to be different.
-
+  ;; then in the shell of the system, they are meant to be different.
   (setcdr idlwave-last-system-routine-info-cons-cell
 	  (append idlwave-buffer-routines
 		  idlwave-compiled-routines
-		  idlwave-library-routines))
+		  idlwave-library-catalog-routines
+		  idlwave-user-catalog-routines))
   (setq idlwave-class-alist nil)
 
   ;; Give a message with information about the number of routines we have.
   (unless quiet
-    (message
-     "Routine info updated:  buffer(%d)  compiled(%d)  catalog(%d)  system(%d)"
+    (message 
+     "Routines Found: buffer(%d) compiled(%d) library(%d) user(%d) system(%d)"
      (length idlwave-buffer-routines)
      (length idlwave-compiled-routines)
-     (length idlwave-library-routines)
+     (length idlwave-library-catalog-routines)
+     (length idlwave-user-catalog-routines)
      (length idlwave-system-routines)))
   (if run-hook
       (run-hooks 'idlwave-update-rinfo-hook)))
@@ -4476,7 +4659,7 @@
 	  (when (and (setq class (nth 2 x))
 		     (not (assq class idlwave-class-alist)))
 	    (push (list class) idlwave-class-alist)))
-	idlwave-class-alist)))
+	idlwave-class-alist)))      
 
 ;; Three functions for the hooks
 (defun idlwave-save-buffer-update ()
@@ -4487,7 +4670,7 @@
   (idlwave-update-current-buffer-info 'find-file))
 
 (defun idlwave-update-current-buffer-info (why)
-  "Undate idlwave-routines for current buffer.  Can run from after-save-hook."
+  "Update idlwave-routines for current buffer.  Can run from after-save-hook."
   (when (and (eq major-mode 'idlwave-mode)
 	     (or (eq t idlwave-auto-routine-info-updates)
 		 (memq why idlwave-auto-routine-info-updates))
@@ -4509,18 +4692,18 @@
 
 (defun idlwave-replace-buffer-routine-info (file new)
   "Cut the part from FILE out of `idlwave-buffer-routines' and add NEW."
-  (let ((list idlwave-buffer-routines)
+  (let ((list idlwave-buffer-routines) 
 	found)
     (while list
       ;; The following test uses eq to make sure it works correctly
       ;; when two buffers visit the same file.  Then the file names
       ;; will be equal, but not eq.
-      (if (eq (cdr (nth 3 (car list))) file)
+      (if (eq (idlwave-routine-source-file (nth 3 (car list))) file)
 	  (progn
 	    (setcar list nil)
 	    (setq found t))
 	(if found
-	    ;; End of that section reached. Jump.
+	    ;; End of that section reached. Jump. 
 	    (setq list nil)))
       (setq list (cdr list)))
     (setq idlwave-buffer-routines
@@ -4552,11 +4735,11 @@
       (save-restriction
 	(widen)
 	(goto-char (point-min))
-	(while (re-search-forward
+	(while (re-search-forward 
 		"^[ \t]*\\(pro\\|function\\)[ \t]" nil t)
 	  (setq string (buffer-substring-no-properties
 			(match-beginning 0)
-			(progn
+			(progn 
 			  (idlwave-end-of-statement)
 			  (point))))
 	  (setq entry (idlwave-parse-definition string))
@@ -4594,7 +4777,7 @@
 	(push (match-string 1 string) args)))
     ;; Normalize and sort.
     (setq args (nreverse args))
-    (setq keywords (sort keywords (lambda (a b)
+    (setq keywords (sort keywords (lambda (a b) 
 				    (string< (downcase a) (downcase b)))))
     ;; Make and return the entry
     ;; We don't know which argument are optional, so this information
@@ -4603,16 +4786,16 @@
 	  (if (equal type "pro") 'pro 'fun)
 	  class
 	  (cond ((not (boundp 'idlwave-scanning-lib))
-		 (cons 'buffer (buffer-file-name)))
-;		((string= (downcase
+		 (list  'buffer (buffer-file-name)))
+;		((string= (downcase 
 ;			   (file-name-sans-extension
 ;			    (file-name-nondirectory (buffer-file-name))))
 ;			  (downcase name))
 ;		 (list 'lib))
 ;		(t (cons 'lib (file-name-nondirectory (buffer-file-name))))
-		(t (cons 'lib (concat idlwave-scanning-lib-dir
-				      (file-name-nondirectory (buffer-file-name))))))
-	  (concat
+		(t (list 'user (file-name-nondirectory (buffer-file-name))
+			 idlwave-scanning-lib-dir "UserLib")))
+	  (concat 
 	   (if (string= type "function") "Result = " "")
 	   (if class "Obj ->[%s::]" "")
 	   "%s"
@@ -4622,96 +4805,98 @@
 		(mapconcat 'identity args ", ")
 		(if (string= type "function") ")" ""))))
 	  (if keywords
-	      (mapcar 'list keywords)
+	      (cons nil (mapcar 'list keywords)) ;No help file
 	    nil))))
 
-;;----- Scanning the library -------------------
-
-(defvar idlwave-sys-dir nil
-  "Internal variable.")
+
+;;----- Scanning the user catalog -------------------
 
 (defun idlwave-sys-dir ()
   "Return the syslib directory, or a dummy that never matches."
-  (or idlwave-sys-dir
-      "@@@@@@@@"))
+  (if (string= idlwave-system-directory "")
+      "@@@@@@@@"
+    idlwave-system-directory))
+
 
 (defvar idlwave-shell-path-query)
-(defun idlwave-create-libinfo-file (&optional arg)
+(defun idlwave-create-user-catalog-file (&optional arg)
   "Scan all files on selected dirs of IDL search path for routine information.
-A widget checklist will allow you to choose the directories.
-Write the result as a file `idlwave-libinfo-file'.  When this file exists,
-will be automatically loaded to give routine information about library
-routines.
-With ARG, just rescan the same directories as last time - so no widget
-will pop up."
+
+A widget checklist will allow you to choose the directories.  Write
+the result as a file `idlwave-user-catalog-file'.  When this file
+exists, will be automatically loaded to give routine information about
+library routines.  With ARG, just rescan the same directories as last
+time - so no widget will pop up."
   (interactive "P")
   ;; Make sure the file is loaded if it exists.
-  (if (and (stringp idlwave-libinfo-file)
-	   (file-regular-p idlwave-libinfo-file))
+  (if (and (stringp idlwave-user-catalog-file)
+	   (file-regular-p idlwave-user-catalog-file))
       (condition-case nil
-	  (load-file idlwave-libinfo-file)
+	  (load-file idlwave-user-catalog-file)
 	(error nil)))
   ;; Make sure the file name makes sense
-  (unless (and (stringp idlwave-libinfo-file)
-	       (> (length idlwave-libinfo-file) 0)
+  (unless (and (stringp idlwave-user-catalog-file)
+	       (> (length idlwave-user-catalog-file) 0)
 	       (file-accessible-directory-p
-		(file-name-directory idlwave-libinfo-file))
-	       (not (string= "" (file-name-nondirectory
-				 idlwave-libinfo-file))))
-    (error "`idlwave-libinfo-file' does not point to file in accessible directory"))
-
+		(file-name-directory idlwave-user-catalog-file))
+	       (not (string= "" (file-name-nondirectory 
+				 idlwave-user-catalog-file))))
+    (error "`idlwave-user-catalog-file' does not point to a file in an accessible directory"))
+  
   (cond
-   ((and arg idlwave-path-alist
-	 (consp (car idlwave-path-alist))
-	 idlwave-sys-dir)
     ;; Rescan the known directories
-    (idlwave-scan-lib-files
-     idlwave-sys-dir
-      idlwave-path-alist))
+   ((and arg idlwave-path-alist
+	 (consp (car idlwave-path-alist)))
+    (idlwave-scan-user-lib-files idlwave-path-alist))
+
+   ;; Expand the directories from library-path and run the widget
    (idlwave-library-path
-    ;; Get the directories from that variable
-    (idlwave-display-libinfo-widget
-     idlwave-system-directory
-     (idlwave-expand-path idlwave-library-path)
-     (delq nil (mapcar (lambda (x) (if (consp x) (if (cdr x) (car x) nil) x))
-		       idlwave-path-alist))))
+    (idlwave-display-user-catalog-widget
+     (if idlwave-true-path-alist 
+	 ;; Propagate any flags on the existing path-alist
+	 (mapcar (lambda (x)
+		   (let ((path-entry (assoc (file-truename x)
+					    idlwave-true-path-alist)))
+		     (if path-entry
+			 (cons x (cdr path-entry)) 
+		       (list x))))
+		 (idlwave-expand-path idlwave-library-path))
+       (mapcar 'list (idlwave-expand-path idlwave-library-path)))))
+
+   ;; Ask the shell for the path and then run the widget
    (t
-    ;; Ask the shell for the path and run the widget
     (message "Asking the shell for IDL path...")
     (require 'idlw-shell)
     (idlwave-shell-send-command idlwave-shell-path-query
-				'(idlwave-libinfo-command-hook nil)
+				'(idlwave-user-catalog-command-hook nil)
 				'hide))))
 
-(defun idlwave-libinfo-command-hook (&optional arg)
-  ;; Command hook used by `idlwave-create-libinfo-file'.
+
+;; Parse shell path information and select among it.
+(defun idlwave-user-catalog-command-hook (&optional arg)
+  ;; Command hook used by `idlwave-create-user-catalog-file'.
   (if arg
       ;; Scan immediately
-      (idlwave-scan-lib-files
-       idlwave-sys-dir
-       idlwave-path-alist)
-    ;; Display the widget
-    (let* ((rpl (idlwave-shell-path-filter))
-	   (sysdir (car rpl))
-	   (dirs (cdr rpl)))
-      (idlwave-display-libinfo-widget
-       sysdir dirs
-       (delq nil (mapcar (lambda (x) (if (cdr x) (car x) nil))
-			 idlwave-path-alist))))))
-
-(defconst idlwave-libinfo-widget-help-string
-  "This is the front-end to the creation of IDLWAVE library catalog.
-Please select below the directories on IDL's search path from which you
-would like to extract routine information, which will be stored in the file
+      (idlwave-scan-user-lib-files idlwave-path-alist)
+    ;; Set the path and display the widget
+    (idlwave-shell-get-path-info 'no-write) ; set to something path-alist
+    (idlwave-scan-library-catalogs "Locating library catalogs..." 'no-load)
+    (idlwave-display-user-catalog-widget idlwave-path-alist)))
+
+(defconst idlwave-user-catalog-widget-help-string 
+  "This is the front-end to the creation of the IDLWAVE user catalog.
+Please select the directories on IDL's search path from which you
+would like to extract routine information, to be stored in the file:
 
              %s
 
-If this is not the correct file, first set variable `idlwave-libinfo-file'.
-Then call this command again.
-
-For writing code, you need to include the directories which contain the
-routines you use.  If IDLWAVE should be able to analyse routine shadowing
-it is best to scan all directories.
+If this is not the correct file, first set variable
+`idlwave-user-catalog-file', and call this command again.
+
+N.B. Many libraries include pre-scanned catalog files
+\(\".idlwave_catalog\").  These are marked with \"[LIB]\", and need
+not be scanned.  You can scan your own libraries off-line using the
+perl script `idlwave_catalog'.
 
 After selecting the directories, choose [Scan & Save] to scan the library
 directories and save the routine info.
@@ -4719,112 +4904,122 @@
 
 (defvar idlwave-widget)
 (defvar widget-keymap)
-(defun idlwave-display-libinfo-widget (sysdir dirs selected-dirs)
+(defun idlwave-display-user-catalog-widget (dirs-list)
   "Create the widget to select IDL search path directories for scanning."
   (interactive)
   (require 'widget)
   (require 'wid-edit)
-  (unless dirs
+  (unless dirs-list
       (error "Don't know IDL's search path"))
 
-  ;; Allow only those directories to be selected which are in the path.
-  (setq selected-dirs (delq nil (mapcar (lambda (x)
-					  (if (member x dirs) x nil))
-					selected-dirs)))
   (kill-buffer (get-buffer-create "*IDLWAVE Widget*"))
   (switch-to-buffer (get-buffer-create "*IDLWAVE Widget*"))
   (kill-all-local-variables)
   (make-local-variable 'idlwave-widget)
-  (widget-insert (format idlwave-libinfo-widget-help-string
-			 idlwave-libinfo-file))
-
+  (widget-insert (format idlwave-user-catalog-widget-help-string
+			 idlwave-user-catalog-file))
+  
+  (widget-create 'push-button
+		 :notify 'idlwave-widget-scan-user-lib-files
+		 "Scan & Save")
+  (widget-insert "  ")
+  (widget-create 'push-button
+		 :notify 'idlwave-delete-user-catalog-file
+		 "Delete File")
+  (widget-insert "  ")
   (widget-create 'push-button
-		 :notify 'idlwave-widget-scan-lib-files
-		 "Scan & Save")
+		 :notify 
+		 '(lambda (&rest ignore)
+		    (let ((path-list (widget-get idlwave-widget :path-dirs)))
+		      (mapcar (lambda (x)
+				(unless (memq 'lib (cdr x))
+				  (idlwave-path-alist-add-flag x 'user)))
+			      path-list)
+		      (idlwave-display-user-catalog-widget path-list)))
+		 "Select All Non-Lib")
+  (widget-insert "  ")
+  (widget-create 'push-button
+		 :notify 
+		 '(lambda (&rest ignore)
+		    (let ((path-list (widget-get idlwave-widget :path-dirs)))
+		      (mapcar (lambda (x)
+				(idlwave-path-alist-remove-flag x 'user))
+			      path-list)
+		      (idlwave-display-user-catalog-widget path-list)))
+		 "Deselect All")
   (widget-insert "  ")
   (widget-create 'push-button
 		 :notify (lambda (&rest ignore)
 			   (kill-buffer (current-buffer)))
 		 "Quit")
-  (widget-insert "  ")
-  (widget-create 'push-button
-		 :notify 'idlwave-delete-libinfo-file
-		 "Delete File")
-  (widget-insert "  ")
-  (widget-create 'push-button
-		 :notify '(lambda (&rest ignore)
-			    (idlwave-display-libinfo-widget
-			     (widget-get idlwave-widget :sysdir)
-			     (widget-get idlwave-widget :path-dirs)
-			     (widget-get idlwave-widget :path-dirs)))
-		 "Select All")
-  (widget-insert "  ")
-  (widget-create 'push-button
-		 :notify '(lambda (&rest ignore)
-			    (idlwave-display-libinfo-widget
-			     (widget-get idlwave-widget :sysdir)
-			     (widget-get idlwave-widget :path-dirs)
-			     nil))
-		 "Deselect All")
   (widget-insert "\n\n")
 
-  (widget-insert "Select Directories\n")
-
+  (widget-insert "Select Directories: \n")
+  
   (setq idlwave-widget
 	(apply 'widget-create
 	       'checklist
-	       :value selected-dirs
+	       :value  (delq nil (mapcar (lambda (x) 
+					   (if (memq 'user (cdr x)) 
+					       (car x)))
+					 dirs-list))
 	       :greedy t
 	       :tag "List of directories"
-	       (mapcar (lambda (x) (list 'item x)) dirs)))
-  (widget-put idlwave-widget :path-dirs dirs)
-  (widget-put idlwave-widget :sysdir sysdir)
+	       (mapcar (lambda (x) 
+			 (list 'item 
+			       (if (memq 'lib (cdr x))
+				   (concat "[LIB] " (car x) )
+				 (car x)))) dirs-list)))
+  (widget-put idlwave-widget :path-dirs dirs-list)
   (widget-insert "\n")
   (use-local-map widget-keymap)
   (widget-setup)
   (goto-char (point-min))
   (delete-other-windows))
-
-(defun idlwave-delete-libinfo-file (&rest ignore)
+  
+(defun idlwave-delete-user-catalog-file (&rest ignore)
   (if (yes-or-no-p
-       (format "Delete file %s " idlwave-libinfo-file))
+       (format "Delete file %s " idlwave-user-catalog-file))
       (progn
-	(delete-file idlwave-libinfo-file)
-	(message "%s has been deleted" idlwave-libinfo-file))))
-
-(defun idlwave-widget-scan-lib-files (&rest ignore)
-  ;; Call `idlwave-scan-lib-files' with data taken from the widget.
+	(delete-file idlwave-user-catalog-file)
+	(message "%s has been deleted" idlwave-user-catalog-file))))
+
+(defun idlwave-widget-scan-user-lib-files (&rest ignore)
+  ;; Call `idlwave-scan-user-lib-files' with data taken from the widget.
   (let* ((widget idlwave-widget)
 	 (selected-dirs (widget-value widget))
-	 (sysdir (widget-get widget :sysdir))
-	 (path-dirs (widget-get widget :path-dirs))
-	 (path-dir-alist
-	  (mapcar (lambda (x) (cons x (if (member x selected-dirs) t nil)))
-		  path-dirs)))
-    (idlwave-scan-lib-files sysdir path-dir-alist)))
+	 (path-alist (widget-get widget :path-dirs))
+	 (this-path-alist path-alist)
+	 dir-entry)
+    (while (setq dir-entry (pop this-path-alist))
+      (if (member 
+	   (if (memq 'lib (cdr dir-entry))
+	       (concat "[LIB] " (car dir-entry))
+	     (car dir-entry))
+	   selected-dirs)
+	  (idlwave-path-alist-add-flag dir-entry 'user)
+	(idlwave-path-alist-remove-flag dir-entry 'user)))
+    (idlwave-scan-user-lib-files path-alist)))
 
 (defvar font-lock-mode)
-(defun idlwave-scan-lib-files (sysdir path-alist)
-  ;; Scan the files in PATH-ALIST and store the info in a file
+(defun idlwave-scan-user-lib-files (path-alist)
+  ;; Scan the PRO files in PATH-ALIST and store the info in the user catalog
   (let* ((idlwave-scanning-lib t)
 	 (idlwave-scanning-lib-dir "")
-	 (dircnt (1+ (length path-alist)))
 	 (idlwave-completion-case nil)
 	 dirs-alist dir files file)
-    (setq idlwave-library-routines nil)
-    (setq idlwave-path-alist path-alist)
-    (setq idlwave-true-path-alist nil)
-    (setq idlwave-sys-dir sysdir)
+    (setq idlwave-user-catalog-routines nil
+	  idlwave-path-alist path-alist ; for library-path instead
+	  idlwave-true-path-alist nil)
+    (if idlwave-auto-write-paths (idlwave-write-paths))
     (save-excursion
       (set-buffer (get-buffer-create "*idlwave-scan.pro*"))
       (idlwave-mode)
       (setq dirs-alist (reverse path-alist))
       (while (setq dir (pop dirs-alist))
-	(decf dircnt)
-	(when (cdr dir)
-	  ;; Has the flag of scanned directories
+	(when (memq 'user (cdr dir))	; Has it marked for scan?
 	  (setq dir (car dir))
-	  (setq idlwave-scanning-lib-dir (format "{%d}/" dircnt))
+	  (setq idlwave-scanning-lib-dir dir)
 	  (when (file-directory-p dir)
 	    (setq files (directory-files dir 'full "\\.[pP][rR][oO]\\'"))
 	    (while (setq file (pop files))
@@ -4834,64 +5029,80 @@
 		  (message "Scanning %s..." file)
 		  (erase-buffer)
 		  (insert-file-contents file 'visit)
-		  (setq idlwave-library-routines
+		  (setq idlwave-user-catalog-routines
 			(append (idlwave-get-routine-info-from-buffers
 				 (list (current-buffer)))
-				idlwave-library-routines)))
-		))))))
-    ;; Sorting is not necessary since we sort each time before a routine
-    ;; is used.  So we don't do it here - the catalog file looks nicer
-    ;; when it is unsorted.
-    ;;(message "Sorting...")
-    ;;(setq idlwave-library-routines
-    ;;(sort idlwave-library-routines 'idlwave-routine-entry-compare))
-    ;;(message "Sorting...done")
-    (message "Creating libinfo file...")
+				idlwave-user-catalog-routines)))))))))
+    (message "Creating user catalog file...")
     (kill-buffer "*idlwave-scan.pro*")
     (kill-buffer (get-buffer-create "*IDLWAVE Widget*"))
     (let ((font-lock-maximum-size 0)
 	  (auto-mode-alist nil))
-      (find-file idlwave-libinfo-file))
+      (find-file idlwave-user-catalog-file))
     (if (and (boundp 'font-lock-mode)
 	     font-lock-mode)
 	(font-lock-mode 0))
     (erase-buffer)
-    (insert ";; IDLWAVE libinfo file\n")
+    (insert ";; IDLWAVE user catalog file\n")
     (insert (format ";; Created %s\n\n" (current-time-string)))
 
-    ;; Define the variable which knows the value of "!DIR"
-    (insert (format "\n(setq idlwave-sys-dir \"%s\")\n"
-		    idlwave-sys-dir))
-
-    ;; Define the variable which contains a list of all scanned directories
-    (insert "\n(setq idlwave-path-alist\n    '(")
-    (mapcar (lambda (x)
-	      (insert (format "\n      (\"%s\" . %s)" (car x) (cdr x))))
-	    path-alist)
-    (insert "))\n")
-
     ;; Define the routine info list
-    (insert "\n(setq idlwave-library-routines\n    '(")
+    (insert "\n(setq idlwave-user-catalog-routines\n    '(")
     (let ((standard-output (current-buffer)))
       (mapcar (lambda (x)
 		(insert "\n    ")
 		(prin1 x)
 		(goto-char (point-max)))
-;		(insert (with-output-to-string (prin1 x))))
-	      idlwave-library-routines))
+	      idlwave-user-catalog-routines))
     (insert (format "))\n\n;;; %s ends here\n"
-		    (file-name-nondirectory idlwave-libinfo-file)))
+		    (file-name-nondirectory idlwave-user-catalog-file)))
     (goto-char (point-min))
     ;; Save the buffer
     (save-buffer 0)
     (kill-buffer (current-buffer)))
-  (message "Creating libinfo file...done")
+  (message "Creating user catalog file...done")
   (message "Info for %d routines saved in %s"
-	   (length idlwave-library-routines)
-	   idlwave-libinfo-file)
+	   (length idlwave-user-catalog-routines)
+	   idlwave-user-catalog-file)
   (sit-for 2)
   (idlwave-update-routine-info t))
 
+(defun idlwave-read-paths ()
+  (if (and (stringp idlwave-path-file)
+	   (file-regular-p idlwave-path-file))
+      (condition-case nil
+	  (load idlwave-path-file t t t)
+	(error nil))))
+
+(defun idlwave-write-paths ()
+  (interactive)
+  (when (and idlwave-path-alist idlwave-system-directory)
+    (let ((font-lock-maximum-size 0)
+	  (auto-mode-alist nil))
+      (find-file idlwave-path-file))
+    (if (and (boundp 'font-lock-mode)
+	     font-lock-mode)
+	(font-lock-mode 0))
+    (erase-buffer)
+    (insert ";; IDLWAVE paths\n")
+    (insert (format ";; Created %s\n\n" (current-time-string)))
+    ;; Define the variable which knows the value of "!DIR"
+    (insert (format "\n(setq idlwave-system-directory \"%s\")\n"
+		    idlwave-system-directory))
+  
+    ;; Define the variable which contains a list of all scanned directories
+    (insert "\n(setq idlwave-path-alist\n    '(")
+    (let ((standard-output (current-buffer)))
+      (mapcar (lambda (x)
+		(insert "\n      ")
+		(prin1 x)
+		(goto-char (point-max)))
+	      idlwave-path-alist))
+    (insert "))\n")
+    (save-buffer 0)
+    (kill-buffer (current-buffer))))
+
+
 (defun idlwave-expand-path (path &optional default-dir)
   ;; Expand parts of path starting with '+' recursively into directory list.
   ;; Relative recursive path elements are expanded relative to DEFAULT-DIR.
@@ -4918,25 +5129,75 @@
       (when (file-directory-p dir)
 	(setq files (nreverse (directory-files dir t "[^.]")))
 	(while (setq file (pop files))
-	  (if (file-directory-p file)
+	  (if (file-directory-p file) 
 	      (push (file-name-as-directory file) path)))
 	(push dir path1)))
     path1))
 
-;;----- Asking the shell -------------------
+
+;;----- Scanning the library catalogs ------------------
+
+(defun idlwave-scan-library-catalogs (&optional message-base no-load)
+  "Scan for library catalog files (.idlwave_catalog) and ingest.  
+
+All directories on `idlwave-path-alist' (or `idlwave-library-path'
+instead, if present) are searched.  Print MESSAGE-BASE along with the
+libraries being loaded, if passed, and skip loading/normalizing if
+NO-LOAD is non-nil.  The variable `idlwave-use-library-catalogs' can
+be set to nil to disable library catalog scanning."
+  (when idlwave-use-library-catalogs
+    (let ((dirs 
+	   (if idlwave-library-path
+	       (idlwave-expand-path idlwave-library-path)
+	     (mapcar 'car idlwave-path-alist)))
+	  (old-libname "")
+	  dir-entry dir flags catalog all-routines)
+      (if message-base (message message-base))
+      (while (setq dir (pop dirs))
+	(catch 'continue
+	  (when (file-readable-p 
+		 (setq catalog (expand-file-name ".idlwave_catalog" dir)))
+	    (unless no-load
+	      (setq idlwave-library-catalog-routines nil)
+	      ;; Load the catalog file
+	      (condition-case nil
+		  (load catalog t t t)
+		(error (throw 'continue t)))
+	      (when (and 
+		     message-base 
+		     (not (string= idlwave-library-catalog-libname 
+				   old-libname)))
+		(message (concat message-base 
+				 idlwave-library-catalog-libname))
+		(setq old-libname idlwave-library-catalog-libname))
+	      (when idlwave-library-catalog-routines
+		(setq all-routines
+		      (append 
+		       (idlwave-sintern-rinfo-list
+			idlwave-library-catalog-routines 'sys dir)
+		       all-routines))))
+	    
+	    ;;  Add a 'lib flag if on path-alist
+	    (when (and idlwave-path-alist
+		       (setq dir-entry (assoc dir idlwave-path-alist)))
+	      (idlwave-path-alist-add-flag dir-entry 'lib)))))
+      (unless no-load (setq idlwave-library-catalog-routines all-routines))
+      (if message-base (message (concat message-base "done"))))))
+
+;;----- Communicating with the Shell -------------------
 
 ;; First, here is the idl program which can be used to query IDL for
-;; defined routines.
+;; defined routines. 
 (defconst idlwave-routine-info.pro
   "
 ;; START OF IDLWAVE SUPPORT ROUTINES
 pro idlwave_print_info_entry,name,func=func,separator=sep
   ;; See if it's an object method
   if name eq '' then return
-  func    = keyword_set(func)
+  func    = keyword_set(func) 
   methsep = strpos(name,'::')
   meth    = methsep ne -1
-
+  
   ;; Get routine info
   pars   = routine_info(name,/parameters,functions=func)
   source = routine_info(name,/source,functions=func)
@@ -4944,21 +5205,21 @@
   nkw    = pars.num_kw_args
   if nargs gt 0 then args = pars.args
   if nkw   gt 0 then kwargs = pars.kw_args
-
+  
   ;; Trim the class, and make the name
-  if meth then begin
+  if meth then begin 
       class = strmid(name,0,methsep)
       name  = strmid(name,methsep+2,strlen(name)-1)
-      if nargs gt 0 then begin
+      if nargs gt 0 then begin 
           ;; remove the self argument
           wh = where(args ne 'SELF',nargs)
-          if nargs gt 0 then args = args(wh)
+          if nargs gt 0 then args = args[wh]
       endif
   endif else begin
       ;; No class, just a normal routine.
       class = \"\"
   endelse
-
+   
   ;; Calling sequence
   cs = \"\"
   if func then cs = 'Result = '
@@ -4967,7 +5228,7 @@
   if func then cs = cs + '(' else if nargs gt 0 then cs = cs + ', '
   if nargs gt 0 then begin
       for j=0,nargs-1 do begin
-          cs = cs + args(j)
+          cs = cs + args[j]
           if j lt nargs-1 then cs = cs + ', '
       endfor
   end
@@ -4976,30 +5237,31 @@
   kwstring = ''
   if nkw gt 0 then begin
       for j=0,nkw-1 do begin
-          kwstring = kwstring + ' ' + kwargs(j)
+          kwstring = kwstring + ' ' + kwargs[j]
       endfor
   endif
-
-  ret=(['IDLWAVE-PRO','IDLWAVE-FUN'])(func)
-
-  print,ret + ': ' + name + sep + class + sep + source(0).path  $
+  
+  ret=(['IDLWAVE-PRO','IDLWAVE-FUN'])[func]
+  
+  print,ret + ': ' + name + sep + class + sep + source[0].path  $
     + sep + cs + sep + kwstring
 end
 
 pro idlwave_routine_info
+  on_error,1
   sep = '<@>'
   print,'>>>BEGIN OF IDLWAVE ROUTINE INFO (\"' + sep + '\" IS THE SEPARATOR)'
   all = routine_info()
   for i=0,n_elements(all)-1 do $
-    idlwave_print_info_entry,all(i),separator=sep
+    idlwave_print_info_entry,all[i],separator=sep
   all = routine_info(/functions)
   for i=0,n_elements(all)-1 do $
-    idlwave_print_info_entry,all(i),/func,separator=sep
+    idlwave_print_info_entry,all[i],/func,separator=sep
   print,'>>>END OF IDLWAVE ROUTINE INFO'
 end
 
 pro idlwave_get_sysvars
-  forward_function strjoin,strtrim,strsplit
+  on_error,1
   catch,error_status
   if error_status ne 0 then begin
       print, 'Cannot get info about system variables'
@@ -5020,7 +5282,7 @@
   if res then print,'IDLWAVE-CLASS-TAGS: '+class+' '+strjoin(tags,' ',/single)
 end
 ;; END OF IDLWAVE SUPPORT ROUTINES
-"
+" 
   "The idl programs to get info from the shell.")
 
 (defvar idlwave-idlwave_routine_info-compiled nil
@@ -5028,7 +5290,7 @@
 
 (defvar idlwave-shell-temp-pro-file)
 (defvar idlwave-shell-temp-rinfo-save-file)
-(defun idlwave-shell-update-routine-info (&optional quiet run-hooks preempt)
+(defun idlwave-shell-update-routine-info (&optional quiet run-hooks wait)
   "Query the shell for routine_info of compiled modules and update the lists."
   ;; Save and compile the procedure.  The compiled procedure is then
   ;; saved into an IDL SAVE file, to allow for fast RESTORE.
@@ -5043,14 +5305,14 @@
       (erase-buffer)
       (insert idlwave-routine-info.pro)
       (save-buffer 0))
-    (idlwave-shell-send-command
+    (idlwave-shell-send-command 
      (concat ".run " idlwave-shell-temp-pro-file)
-     nil 'hide)
+     nil 'hide wait)
 ;    (message "SENDING SAVE") ; ????????????????????????
     (idlwave-shell-send-command
-     (format "save,'idlwave_routine_info','idlwave_print_info_entry',FILE='%s',/ROUTINES"
+     (format "save,'idlwave_routine_info','idlwave_print_info_entry','idlwave_get_class_tags','idlwave_get_sysvars',FILE='%s',/ROUTINES" 
 	     (idlwave-shell-temp-file 'rinfo))
-     nil 'hide))
+     nil 'hide wait))
 
   ;; Restore and execute the procedure, analyze the output
 ;  (message "SENDING RESTORE & EXECUTE") ; ????????????????????????
@@ -5060,13 +5322,14 @@
    `(progn
       (idlwave-shell-routine-info-filter)
       (idlwave-concatenate-rinfo-lists ,quiet ,run-hooks))
-   'hide preempt))
+   'hide wait))
 
 ;; ---------------------------------------------------------------------------
 ;;
 ;; Completion and displaying routine calling sequences
 
 (defvar idlwave-completion-help-info nil)
+(defvar idlwave-completion-help-links nil)
 (defvar idlwave-current-obj_new-class nil)
 (defvar idlwave-complete-special nil)
 
@@ -5111,6 +5374,9 @@
 As a special case, the universal argument C-u forces completion of
 function names in places where the default would be a keyword.
 
+Two prefix argument, C-u C-u, prompts for a regexp by which to limit
+completion.
+
 For Lisp programmers only:
 When we force a keyword, optional argument MODULE can contain the module name.
 When we force a method or a method keyword, CLASS can specify the class."
@@ -5118,13 +5384,16 @@
   (idlwave-routines)
   (let* ((where-list
 	  (if (and arg
-		   (or (integerp arg)
+		   (or (and (integerp arg) (not (equal arg '(16))))
 		       (symbolp arg)))
 	      (idlwave-make-force-complete-where-list arg module class)
 	    (idlwave-where)))
 	 (what (nth 2 where-list))
-	 (idlwave-force-class-query (equal arg '(4))))
-
+	 (idlwave-force-class-query (equal arg '(4)))
+	 (completion-regexp-list
+	  (if (equal arg '(16))
+	      (list (read-string (concat "Completion Regexp: "))))))
+    
     (if (and module (string-match "::" module))
 	(setq class (substring module 0 (match-beginning 0))
 	      module (substring module (match-end 0))))
@@ -5137,17 +5406,19 @@
       (setq this-command last-command)
       (idlwave-scroll-completions))
 
+     ;; Complete a filename in quotes
+     ((and (idlwave-in-quote)
+	   (not (eq what 'class)))
+      (idlwave-complete-filename))
+
      ;; Check for any special completion functions
      ((and idlwave-complete-special
 	   (idlwave-call-special idlwave-complete-special)))
-
-     ((and (idlwave-in-quote)
-	   (not (eq what 'class)))
-      (idlwave-complete-filename))
-
+     
      ((null what)
       (error "Nothing to complete here"))
 
+     ;; Complete a class
      ((eq what 'class)
       (setq idlwave-completion-help-info '(class))
       (idlwave-complete-class))
@@ -5160,7 +5431,7 @@
 			      (idlwave-all-class-inherits class-selector)))
 	     (isa (concat "procedure" (if class-selector "-method" "")))
 	     (type-selector 'pro))
-	(setq idlwave-completion-help-info
+	(setq idlwave-completion-help-info 
 	      (list 'routine nil type-selector class-selector nil super-classes))
 	(idlwave-complete-in-buffer
 	 'procedure (if class-selector 'method 'routine)
@@ -5168,12 +5439,12 @@
 	 (format "Select a %s name%s"
 		 isa
 		 (if class-selector
-		     (format " (class is %s)"
-			     (if (eq class-selector t)
+		     (format " (class is %s)" 
+			     (if (eq class-selector t) 
 				 "unknown" class-selector))
 		   ""))
 	 isa
-	 'idlwave-attach-method-classes)))
+	 'idlwave-attach-method-classes 'idlwave-add-file-link-selector)))
 
      ((eq what 'function)
       ;; Complete a function name
@@ -5183,7 +5454,7 @@
 			      (idlwave-all-class-inherits class-selector)))
 	     (isa (concat "function" (if class-selector "-method" "")))
 	     (type-selector 'fun))
-	(setq idlwave-completion-help-info
+	(setq idlwave-completion-help-info 
 	      (list 'routine nil type-selector class-selector nil super-classes))
 	(idlwave-complete-in-buffer
 	 'function (if class-selector 'method 'routine)
@@ -5191,14 +5462,14 @@
 	 (format "Select a %s name%s"
 		 isa
 		 (if class-selector
-		     (format " (class is %s)"
+		     (format " (class is %s)" 
 			     (if (eq class-selector t)
 				 "unknown" class-selector))
 		   ""))
 	 isa
-	 'idlwave-attach-method-classes)))
-
-     ((and (memq what '(procedure-keyword function-keyword))
+	 'idlwave-attach-method-classes 'idlwave-add-file-link-selector)))
+
+     ((and (memq what '(procedure-keyword function-keyword)) ; Special Case
 	   (equal arg '(4)))
       (idlwave-complete 3))
 
@@ -5214,21 +5485,21 @@
 	     (isa (format "procedure%s-keyword" (if class "-method" "")))
 	     (entry (idlwave-best-rinfo-assq
 		     name 'pro class (idlwave-routines)))
-	     (list (nth 5 entry)))
+	     (list (idlwave-entry-keywords entry 'do-link)))
 	(unless (or entry (eq class t))
 	  (error "Nothing known about procedure %s"
 		 (idlwave-make-full-name class name)))
-	(setq list (idlwave-fix-keywords name 'pro class list))
+	(setq list (idlwave-fix-keywords name 'pro class list super-classes))
 	(unless list (error (format "No keywords available for procedure %s"
 				    (idlwave-make-full-name class name))))
-	(setq idlwave-completion-help-info
-	      (list 'keyword name type-selector class-selector nil super-classes))
+	(setq idlwave-completion-help-info 
+	      (list 'keyword name type-selector class-selector entry super-classes))
 	(idlwave-complete-in-buffer
 	 'keyword 'keyword list nil
 	 (format "Select keyword for procedure %s%s"
 		 (idlwave-make-full-name class name)
 		 (if (or (member '("_EXTRA") list)
-			 (member '("_REF_EXTRA") list))
+			 (member '("_REF_EXTRA") list))			 
 		     " (note _EXTRA)" ""))
 	 isa
 	 'idlwave-attach-keyword-classes)))
@@ -5245,12 +5516,12 @@
 	     (isa (format "function%s-keyword" (if class "-method" "")))
 	     (entry (idlwave-best-rinfo-assq
 		     name 'fun class (idlwave-routines)))
-	     (list (nth 5 entry))
+	     (list (idlwave-entry-keywords entry 'do-link))
 	     msg-name)
 	(unless (or entry (eq class t))
 	  (error "Nothing known about function %s"
 		 (idlwave-make-full-name class name)))
-	(setq list (idlwave-fix-keywords name 'fun class list))
+	(setq list (idlwave-fix-keywords name 'fun class list super-classes))
 	;; OBJ_NEW: Messages mention the proper Init method
 	(setq msg-name (if (and (null class)
 				(string= (upcase name) "OBJ_NEW"))
@@ -5259,13 +5530,13 @@
 			 (idlwave-make-full-name class name)))
 	(unless list (error (format "No keywords available for function %s"
 				    msg-name)))
-	(setq idlwave-completion-help-info
+	(setq idlwave-completion-help-info 
 	      (list 'keyword name type-selector class-selector nil super-classes))
 	(idlwave-complete-in-buffer
 	 'keyword 'keyword list nil
 	 (format "Select keyword for function %s%s" msg-name
 		 (if (or (member '("_EXTRA") list)
-			 (member '("_REF_EXTRA") list))
+			 (member '("_REF_EXTRA") list))			 
 		     " (note _EXTRA)" ""))
 	 isa
 	 'idlwave-attach-keyword-classes)))
@@ -5274,12 +5545,12 @@
 
 (defvar idlwave-complete-special nil
   "List of special completion functions.
-These functions are called for each completion.  Each function must check
-if its own special completion context is present.  If yes, it should
-use `idlwave-complete-in-buffer' to do some completion and return t.
-If such a function returns t, *no further* attempts to complete
-other contexts will be done.  If the function returns nil, other completions
-will be tried.")
+These functions are called for each completion.  Each function must
+check if its own special completion context is present.  If yes, it
+should use `idlwave-complete-in-buffer' to do some completion and
+return t.  If such a function returns t, *no further* attempts to
+complete other contexts will be done.  If the function returns nil,
+other completions will be tried.")
 
 (defun idlwave-call-special (functions &rest args)
   (let ((funcs functions)
@@ -5303,10 +5574,10 @@
 		      ("class")))
 	 (module (idlwave-sintern-routine-or-method module class))
 	 (class (idlwave-sintern-class class))
-	 (what (cond
+	 (what (cond 
 		((equal what 0)
 		 (setq what
-		       (intern (completing-read
+		       (intern (completing-read 
 				"Complete what? " what-list nil t))))
 		((integerp what)
 		 (setq what (intern (car (nth (1- what) what-list)))))
@@ -5328,7 +5599,7 @@
 	     (super-classes nil)
 	     (type-selector 'pro)
 	     (pro (or module
-		      (idlwave-completing-read
+		      (idlwave-completing-read 
 		       "Procedure: " (idlwave-routines) 'idlwave-selector))))
 	(setq pro (idlwave-sintern-routine pro))
 	(list nil-list nil-list 'procedure-keyword
@@ -5342,7 +5613,7 @@
 	     (super-classes nil)
 	     (type-selector 'fun)
 	     (func (or module
-		       (idlwave-completing-read
+		       (idlwave-completing-read 
 			"Function: " (idlwave-routines) 'idlwave-selector))))
 	(setq func (idlwave-sintern-routine func))
 	(list nil-list nil-list 'function-keyword
@@ -5382,7 +5653,7 @@
 
      ((eq what 'class)
       (list nil-list nil-list 'class nil-list nil))
-
+     
      (t (error "Illegal value for WHAT")))))
 
 (defun idlwave-completing-read (&rest args)
@@ -5405,7 +5676,7 @@
 		    (stringp idlwave-shell-default-directory)
 		    (file-directory-p idlwave-shell-default-directory))
 	       idlwave-shell-default-directory
-	     default-directory)))
+	     default-directory)))	   
     (comint-dynamic-complete-filename)))
 
 (defun idlwave-make-full-name (class name)
@@ -5414,7 +5685,7 @@
 
 (defun idlwave-rinfo-assoc (name type class list)
   "Like `idlwave-rinfo-assq', but sintern strings first."
-  (idlwave-rinfo-assq
+  (idlwave-rinfo-assq 
    (idlwave-sintern-routine-or-method name class)
    type (idlwave-sintern-class class) list))
 
@@ -5430,6 +5701,7 @@
 	(setq list (cdr (memq match list)))))))
 
 (defun idlwave-rinfo-assq-any-class (name type class list)
+  ;; Return the first matching method on the inheritance list
   (let* ((classes (cons class (idlwave-all-class-inherits class)))
 	 class rtn)
     (while classes
@@ -5437,26 +5709,37 @@
 	  (setq classes nil)))
     rtn))
 
-(defun idlwave-best-rinfo-assq (name type class list)
-  "Like `idlwave-rinfo-assq', but get all twins and sort, then return first."
+(defun idlwave-best-rinfo-assq (name type class list &optional with-file 
+				     keep-system)
+  "Like `idlwave-rinfo-assq', but get all twins and sort, then return first.
+If WITH-FILE is passed, find the best rinfo entry with a file
+included.  If KEEP-SYSTEM is set, don't prune system for compiled
+syslib files."
   (let ((twins (idlwave-routine-twins
 		(idlwave-rinfo-assq-any-class name type class list)
 		list))
 	syslibp)
     (when (> (length twins) 1)
       (setq twins (sort twins 'idlwave-routine-entry-compare-twins))
-      (if (and (eq 'system (car (nth 3 (car twins))))
+      (if (and (null keep-system)
+	       (eq 'system (car (nth 3 (car twins))))
 	       (setq syslibp (idlwave-any-syslib (cdr twins)))
 	       (not (equal 1 syslibp)))
-	  ;; Its a syslib, so we need to remove the system entry
-	  (setq twins (cdr twins))))
+	  ;; Its a compiled syslib, so we need to remove the system entry
+	  (setq twins (cdr twins)))
+      (if with-file
+	  (setq twins (delq nil
+			    (mapcar (lambda (x)
+				      (if (nth 1 (nth 3 x)) x))
+				    twins)))))
     (car twins)))
 
-(defun idlwave-best-rinfo-assoc (name type class list)
+(defun idlwave-best-rinfo-assoc (name type class list &optional with-file 
+				     keep-system)
   "Like `idlwave-best-rinfo-assq', but sintern strings first."
   (idlwave-best-rinfo-assq
    (idlwave-sintern-routine-or-method name class)
-   type (idlwave-sintern-class class) list))
+   type (idlwave-sintern-class class) list with-file keep-system))
 
 (defun idlwave-any-syslib (entries)
   "Does the entry list ENTRIES contain a syslib entry?
@@ -5465,10 +5748,8 @@
     (catch 'exit
       (while entries
 	(incf cnt)
-	(setq file (cdr (nth 3 (car entries))))
-	(if (and file
-		 (idlwave-syslib-p
-		  (idlwave-expand-lib-file-name file)))
+	(setq file (idlwave-routine-source-file (nth 3 (car entries))))
+	(if (and file (idlwave-syslib-p file))
 	    (throw 'exit cnt)
 	  (setq entries (cdr entries))))
       nil)))
@@ -5504,10 +5785,10 @@
       nil
     (let (rtn)
       (mapcar (lambda (x)
-		(and (nth 2 x)
-		     (or (not type)
+		(and (nth 2 x)           ; non-nil class
+		     (or (not type)      ; correct or unspecified type
 			 (eq type (nth 1 x)))
-		     (assoc keyword (nth 5 x))
+		     (assoc keyword (idlwave-entry-keywords x))
 		     (push (nth 2 x) rtn)))
 	      (idlwave-all-assq method (idlwave-routines)))
       (idlwave-uniquify rtn))))
@@ -5544,7 +5825,7 @@
 Must accept two arguments: `apos' and `info'")
 
 (defun idlwave-determine-class (info type)
-  ;; Determine the class of a routine call.
+  ;; Determine the class of a routine call.  
   ;; INFO is the `cw-list' structure as returned by idlwave-where.
   ;; The second element in this structure is the class.  When nil, we
   ;; return nil.  When t, try to get the class from text properties at
@@ -5564,7 +5845,7 @@
 		      (dassoc (cdr dassoc))
 		      (t t)))
 	 (arrow (and apos (string= (buffer-substring apos (+ 2 apos)) "->")))
-	 (is-self
+	 (is-self 
 	  (and arrow
 	       (save-excursion (goto-char apos)
 			       (forward-word -1)
@@ -5585,19 +5866,19 @@
 	  (setq class (or (nth 2 (idlwave-current-routine)) class)))
 
       ;; Before prompting, try any special class determination routines
-      (when (and (eq t class)
+      (when (and (eq t class) 
 		 idlwave-determine-class-special
 		 (not force-query))
-	(setq special-class
+	(setq special-class 
 	      (idlwave-call-special idlwave-determine-class-special apos))
-	(if special-class
+	(if special-class 
 	    (setq class (idlwave-sintern-class special-class)
 		  store idlwave-store-inquired-class)))
-
+      
       ;; Prompt for a class, if we need to
       (when (and (eq class t)
 		 (or force-query query))
-	(setq class-alist
+	(setq class-alist 
 	      (mapcar 'list (idlwave-all-method-classes (car info) type)))
 	(setq class
 	      (idlwave-sintern-class
@@ -5606,9 +5887,9 @@
 		 (error "No classes available with method %s" (car info)))
 		((and (= (length class-alist) 1) (not force-query))
 		 (car (car class-alist)))
-		(t
+		(t 
 		 (setq store idlwave-store-inquired-class)
-		 (idlwave-completing-read
+		 (idlwave-completing-read 
 		  (format "Class%s: " (if (stringp (car info))
 					  (format " for %s method %s"
 						  type (car info))
@@ -5620,9 +5901,9 @@
 	;; We have a real class here
 	(when (and store arrow)
 	  (condition-case ()
-	      (add-text-properties
-	       apos (+ apos 2)
-	       `(idlwave-class ,class face ,idlwave-class-arrow-face
+	      (add-text-properties 
+	       apos (+ apos 2) 
+	       `(idlwave-class ,class face ,idlwave-class-arrow-face 
 			       rear-nonsticky t))
 	    (error nil)))
 	(setf (nth 2 info) class))
@@ -5639,18 +5920,25 @@
   (and (eq (nth 1 a) type-selector)
        (or (and (nth 2 a) (eq class-selector t))
 	   (eq (nth 2 a) class-selector)
-	   (memq (nth 2 a) super-classes)
-	   )))
+	   (memq (nth 2 a) super-classes))))
+
+(defun idlwave-add-file-link-selector (a)
+  ;; Record a file link, if any, for the tested names during selection.
+  (let ((sel (idlwave-selector a)) file)
+    (if (and sel (setq file (idlwave-entry-has-help a)))
+	(push (cons (car a) file) idlwave-completion-help-links))
+    sel))
+
 
 (defun idlwave-where ()
-  "Find out where we are.
+  "Find out where we are. 
 The return value is a list with the following stuff:
 \(PRO-LIST FUNC-LIST COMPLETE-WHAT CW-LIST LAST-CHAR)
 
 PRO-LIST       (PRO POINT CLASS ARROW)
 FUNC-LIST      (FUNC POINT CLASS ARROW)
 COMPLETE-WHAT  a symbol indicating what kind of completion makes sense here
-CW-LIST        (PRO-OR-FUNC POINT CLASS ARROW)  Like PRO-LIST, for what can
+CW-LIST        (PRO-OR-FUNC POINT CLASS ARROW)  Like PRO-LIST, for what can 
                be completed here.
 LAST-CHAR      last relevant character before point (non-white non-comment,
                not part of current identifier or leading slash).
@@ -5662,7 +5950,7 @@
 CLASS:  What class has the routine (nil=no, t=is method, but class unknown)
 ARROW:  Location of the arrow"
   (idlwave-routines)
-  (let* (;(bos (save-excursion (idlwave-beginning-of-statement) (point)))
+  (let* (;(bos (save-excursion (idlwave-beginning-of-statement) (point))) 
          (bos (save-excursion (idlwave-start-of-substatement 'pre) (point)))
  	 (func-entry (idlwave-what-function bos))
          (func (car func-entry))
@@ -5677,27 +5965,30 @@
 	 (pro-point (or (nth 3 pro-entry) 0))
 	 (last-char (idlwave-last-valid-char))
          (case-fold-search t)
+	 (match-string (buffer-substring bos (point)))
 	 cw cw-mod cw-arrow cw-class cw-point)
     (if (< func-point pro-point) (setq func nil))
     (cond
      ((string-match "\\`[ \t]*\\(pro\\|function\\)[ \t]+[a-zA-Z0-9_]*\\'"
-                    (buffer-substring bos (point)))
+                    match-string)
       (setq cw 'class))
-     ((string-match
-       "\\`[ \t]*\\([a-zA-Z][a-zA-Z0-9$_]*\\)?\\'"
-       (buffer-substring (if (> pro-point 0) pro-point bos) (point)))
+     ((string-match 
+       "\\`[ \t]*\\([a-zA-Z][a-zA-Z0-9$_]*\\)?\\'" 
+       (if (> pro-point 0)
+	   (buffer-substring pro-point (point))
+	 match-string))
       (setq cw 'procedure cw-class pro-class cw-point pro-point
 	    cw-arrow pro-arrow))
      ((string-match "\\`[ \t]*\\(pro\\|function\\)\\>"
-		    (buffer-substring bos (point)))
+		    match-string)
       nil)
      ((string-match "OBJ_NEW([ \t]*['\"]\\([a-zA-Z0-9$_]*\\)?\\'"
-		    (buffer-substring bos (point)))
-      (setq cw 'class))
+		    match-string)
+      (setq cw 'class))                    
      ((string-match "\\<inherits\\s-+\\([a-zA-Z0-9$_]*\\)?\\'"
-		    (buffer-substring bos (point)))
-      (setq cw 'class))
-     ((and func
+		    match-string)
+      (setq cw 'class))                    
+     ((and func 
 	   (> func-point pro-point)
 	   (= func-level 1)
 	   (memq last-char '(?\( ?,)))
@@ -5715,10 +6006,10 @@
      (t
       (setq cw 'function)
       (save-excursion
-	(if (re-search-backward "->[ \t]*\\(\\([$a-zA-Z0-9_]+\\)::\\)?[$a-zA-Z0-9_]*\\=" bos t)
+	(if (re-search-backward "->[ \t]*\\(\\$[ \t]*\\(;.*\\)?\n\\s-*\\)?\\(\\([$a-zA-Z0-9_]+\\)::\\)?[$a-zA-Z0-9_]*\\=" bos t)
 	    (setq cw-arrow (copy-marker (match-beginning 0))
-		  cw-class (if (match-end 2)
-			       (idlwave-sintern-class (match-string 2))
+		  cw-class (if (match-end 4)
+			       (idlwave-sintern-class (match-string 4))
 			     t))))))
     (list (list pro pro-point pro-class pro-arrow)
           (list func func-point func-class func-arrow)
@@ -5728,9 +6019,9 @@
 
 (defun idlwave-this-word (&optional class)
   ;; Grab the word around point.  CLASS is for the `skip-chars=...' functions
-  (setq class (or class "a-zA-Z0-9$_"))
+  (setq class (or class "a-zA-Z0-9$_."))
   (save-excursion
-    (buffer-substring-no-properties
+    (buffer-substring
      (progn (skip-chars-backward class) (point))
      (progn (skip-chars-forward  class) (point)))))
 
@@ -5743,7 +6034,7 @@
   ;;    searches to this point.
 
   (catch 'exit
-    (let (pos
+    (let (pos 
 	  func-point
 	  (cnt 0)
 	  func arrow-start class)
@@ -5758,18 +6049,18 @@
 	     (setq pos (point))
 	     (incf cnt)
 	     (when (and (= (following-char) ?\()
-			(re-search-backward
+			(re-search-backward 
 			 "\\(::\\|\\<\\)\\([a-zA-Z][a-zA-Z0-9$_]*\\)[ \t]*\\="
 			 bound t))
 	       (setq func (match-string 2)
 		     func-point (goto-char (match-beginning 2))
 		     pos func-point)
-	       (if (re-search-backward
+	       (if (re-search-backward 
 		    "->[ \t]*\\(\\([a-zA-Z][a-zA-Z0-9$_]*\\)::\\)?\\=" bound t)
 		   (setq arrow-start (copy-marker (match-beginning 0))
 			 class (or (match-string 2) t)))
-	       (throw
-		'exit
+	       (throw 
+		'exit 
 		(list
 		 (idlwave-sintern-routine-or-method func class)
 		 (idlwave-sintern-class class)
@@ -5785,18 +6076,19 @@
   ;;    searches to this point.
   (let ((pos (point)) pro-point
 	pro class arrow-start string)
-    (save-excursion
+    (save-excursion 
       ;;(idlwave-beginning-of-statement)
       (idlwave-start-of-substatement 'pre)
       (setq string (buffer-substring (point) pos))
-      (if (string-match
+      (if (string-match 
 	   "\\`[ \t]*\\([a-zA-Z][a-zA-Z0-9$_]*\\)[ \t]*\\(,\\|\\'\\)" string)
 	  (setq pro (match-string 1 string)
 		pro-point (+ (point) (match-beginning 1)))
 	(if (and (idlwave-skip-object)
 		 (setq string (buffer-substring (point) pos))
-		 (string-match
-		  "\\`[ \t]*\\(->\\)[ \t]*\\(\\([a-zA-Z][a-zA-Z0-9$_]*\\)::\\)?\\([a-zA-Z][a-zA-Z0-9$_]*\\)?[ \t]*\\(,\\|\\'\\)" string))
+		 (string-match 
+		  "\\`[ \t]*\\(->\\)[ \t]*\\(\\([a-zA-Z][a-zA-Z0-9$_]*\\)::\\)?\\([a-zA-Z][a-zA-Z0-9$_]*\\)?[ \t]*\\(,\\|\\(\\$\\s *\\(;.*\\)?\\)?$\\)" 
+		  string))
 	    (setq pro (if (match-beginning 4)
 			  (match-string 4 string))
 		  pro-point (if (match-beginning 4)
@@ -5839,7 +6131,7 @@
 	      (throw 'exit nil))))
 	(goto-char pos)
       nil)))
-
+  
 (defun idlwave-last-valid-char ()
   "Return the last character before point which is not white or a comment
 and also not part of the current identifier.  Since we do this in
@@ -5874,11 +6166,14 @@
   "A mark pointing to the beginning of the completion string.")
 
 (defun idlwave-complete-in-buffer (type stype list selector prompt isa
-					&optional prepare-display-function)
+					&optional prepare-display-function
+					special-selector)
   "Perform TYPE completion of word before point against LIST.
 SELECTOR is the PREDICATE argument for the completion function.  Show
-PROMPT in echo area.  TYPE is one of 'function, 'procedure,
-'class-tag, or 'keyword."
+PROMPT in echo area.  TYPE is one of the intern types, e.g. 'function,
+'procedure, 'class-tag, 'keyword, 'sysvar, etc..  SPECIAL-SELECTOR is
+used only once, for `all-completions', and can be used to, e.g.,
+accumulate information on matching completions."
   (let* ((completion-ignore-case t)
 	 beg (end (point)) slash part spart completion all-completions
 	 dpart dcompletion)
@@ -5903,7 +6198,8 @@
 	  dpart (downcase part)
 	  spart (idlwave-sintern stype part)
 	  completion (try-completion part list selector)
-	  dcompletion (if (stringp completion) (downcase completion)))
+	  dcompletion (if (stringp completion) (downcase completion))
+	  idlwave-completion-help-links nil)
     (cond
      ((null completion)
       ;; nothing available.
@@ -5923,24 +6219,35 @@
 	  (idlwave-after-successful-completion type slash beg))
       t)
      ((or (eq completion t)
-	  (and (equal dpart dcompletion)
-	       (= 1 (length (setq all-completions
+	  (and (= 1 (length (setq all-completions
 				  (idlwave-uniquify
-				   (all-completions part list selector)))))))
+				   (all-completions part list 
+						    (or special-selector 
+							selector))))))
+	       (equal dpart dcompletion)))
       ;; This is already complete
       (idlwave-after-successful-completion type slash beg)
       (message "%s is already the complete %s" part isa)
       nil)
-     (t
+     (t        
       ;; We cannot add something - offer a list.
       (message "Making completion list...")
+      
+      (unless idlwave-completion-help-links ; already set somewhere?
+	(mapcar (lambda (x)  ; Pass link prop through to highlight-linked
+		  (let ((link (get-text-property 0 'link (car x))))
+		    (if link
+			(push (cons (car x) link) 
+			      idlwave-completion-help-links))))
+		list))
       (let* ((list all-completions)
 	     ;; "complete" means, this is already a valid completion
 	     (complete (memq spart all-completions))
-	     (completion-highlight-first-word-only t) ; XEmacs
-	     (completion-fixup-function               ; Emacs
-	      (lambda () (and (eq (preceding-char) ?>)
-			      (re-search-backward " <" beg t)))))
+	     (completion-highlight-first-word-only t)) ; XEmacs
+;	     (completion-fixup-function               ; Emacs
+;	      (lambda () (and (eq (preceding-char) ?>)
+;			      (re-search-backward " <" beg t)))))
+	     
 	(setq list (sort list (lambda (a b)
 				(string< (downcase a) (downcase b)))))
 	(if prepare-display-function
@@ -5950,7 +6257,7 @@
 		     idlwave-complete-empty-string-as-lower-case)
 		 (not idlwave-completion-force-default-case))
 	    (setq list (mapcar (lambda (x)
-				 (if (listp x)
+				 (if (listp x) 
 				     (setcar x (downcase (car x)))
 				   (setq x (downcase x)))
 				 x)
@@ -5970,13 +6277,22 @@
 	   (re-search-backward "\\<\\(pro\\|function\\)[ \t]+\\="
 			       (- (point) 15) t)
 	   (goto-char (point-min))
-	   (re-search-forward
+	   (re-search-forward 
 	    "^[ \t]*\\(pro\\|function\\)[ \t]+\\([a-zA-Z0-9_]+::\\)" nil t))))
       ;; Yank the full class specification
       (insert (match-string 2))
-    ;; Do the completion
-    (idlwave-complete-in-buffer 'class 'class (idlwave-class-alist) nil
-				"Select a class" "class")))
+    ;; Do the completion, using list gathered from `idlwave-routines'
+    (idlwave-complete-in-buffer 
+     'class 'class (idlwave-class-alist) nil 
+     "Select a class" "class"
+     '(lambda (list)  ;; Push it to help-links if system help available
+	(mapcar (lambda (x)
+		  (let* ((entry (idlwave-class-info x))
+			 (link (nth 1 (assq 'link entry))))
+		    (if link (push (cons x link) 
+				   idlwave-completion-help-links))
+		    x))
+		list)))))
 
 (defun idlwave-attach-classes (list type show-classes)
   ;; Attach the proper class list to a LIST of completion items.
@@ -5985,7 +6301,7 @@
   ;; SHOW-CLASSES is the value of `idlwave-completion-show-classes'.
   (if (or (null show-classes)           ; don't want to see classes
 	  (null class-selector)         ; not a method call
-	  (and
+	  (and 
 	   (stringp class-selector) ; the class is already known
 	   (not super-classes)))    ; no possibilities for inheritance
       ;; In these cases, we do not have to do anything
@@ -6000,22 +6316,22 @@
 	   (max (abs show-classes))
 	   (lmax (if do-dots (apply 'max (mapcar 'length list))))
 	  classes nclasses class-info space)
-      (mapcar
+      (mapcar 
        (lambda (x)
 	 ;; get the classes
 	 (if (eq type 'class-tag)
 	     ;; Just one class for tags
 	     (setq classes
-		   (list
+		   (list 
 		    (idlwave-class-or-superclass-with-tag class-selector x)))
-	   ;; Multiple classes for method of method-keyword
+	   ;; Multiple classes for method or method-keyword
 	   (setq classes
 		 (if (eq type 'kwd)
 		     (idlwave-all-method-keyword-classes
 		      method-selector x type-selector)
 		   (idlwave-all-method-classes x type-selector)))
 	   (if inherit
-	       (setq classes
+	       (setq classes 
 		     (delq nil
 			   (mapcar (lambda (x) (if (memq x inherit) x nil))
 				   classes)))))
@@ -6036,8 +6352,8 @@
 	   ;; We do want properties
 	   (setq x (copy-sequence x))
 	   (put-text-property 0 (length x)
-			      'help-echo (mapconcat 'identity classes " ")
-			      x))
+                              'help-echo (mapconcat 'identity classes " ")
+                              x))
 	 (if class-info
 	     (list x class-info)
 	   x))
@@ -6052,7 +6368,7 @@
 (defun idlwave-attach-class-tag-classes (list)
   ;; Call idlwave-attach-classes with class structure tags
   (idlwave-attach-classes list 'class-tag idlwave-completion-show-classes))
-
+					
 
 ;;----------------------------------------------------------------------
 ;;----------------------------------------------------------------------
@@ -6073,7 +6389,7 @@
 	  ((= 1 (length list))
 	   (setq rtn (car list)))
 	  ((featurep 'xemacs)
-	   (if sort (setq list (sort list (lambda (a b)
+	   (if sort (setq list (sort list (lambda (a b) 
 					    (string< (upcase a) (upcase b))))))
 	   (setq menu
 		 (append (list title)
@@ -6084,7 +6400,7 @@
 	   (setq resp (get-popup-menu-response menu))
 	   (funcall (event-function resp) (event-object resp)))
 	  (t
-	   (if sort (setq list (sort list (lambda (a b)
+	   (if sort (setq list (sort list (lambda (a b) 
 					    (string< (upcase a) (upcase b))))))
 	   (setq menu (cons title
 			    (list
@@ -6175,7 +6491,7 @@
     (setq idlwave-before-completion-wconf (current-window-configuration)))
 
   (if (featurep 'xemacs)
-      (idlwave-display-completion-list-xemacs
+      (idlwave-display-completion-list-xemacs 
        list)
     (idlwave-display-completion-list-emacs list))
 
@@ -6204,7 +6520,7 @@
   (if (and (eq major-mode 'idlwave-shell-mode)
 	   (boundp 'font-lock-mode)
 	   (not font-lock-mode))
-      ;; Remove the fontification of the word before point
+      ;; For the shell, remove the fontification of the word before point
       (let ((beg (save-excursion
 		   (skip-chars-backward "a-zA-Z0-9_")
 		   (point))))
@@ -6224,6 +6540,94 @@
        idlwave-before-completion-wconf
        (set-window-configuration idlwave-before-completion-wconf)))
 
+(defun idlwave-one-key-select (sym prompt delay)
+  "Make the user select an element from the alist in the variable SYM.
+The keys of the alist are expected to be strings.  The function returns the
+car of the selected association.
+To do this, PROMPT is displayed and and the user must hit a letter key to
+select an entry.  If the user does not reply within DELAY seconds, a help
+window with the options is displayed automatically.
+The key which is associated with each option is generated automatically.
+First, the strings are checked for preselected keys, like in \"[P]rint\".
+If these don't exist, a letter in the string is automatically selected."
+  (let* ((alist (symbol-value sym))
+         (temp-buffer-show-hook (if (fboundp 'fit-window-to-buffer)
+				    '(fit-window-to-buffer)))
+         keys-alist char)
+    ;; First check the cache
+    (if (and (eq (symbol-value sym) (get sym :one-key-alist-last)))
+        (setq keys-alist (get sym :one-key-alist-cache))
+      ;; Need to make new list
+      (setq keys-alist (idlwave-make-one-key-alist alist))
+      (put sym :one-key-alist-cache keys-alist)
+      (put sym :one-key-alist-last alist))
+    ;; Display prompt and wait for quick reply
+    (message "%s[%s]" prompt
+             (mapconcat (lambda(x) (char-to-string (car x)))
+                        keys-alist ""))
+    (if (sit-for delay)
+        ;; No quick reply: Show help
+        (save-window-excursion
+          (with-output-to-temp-buffer "*Completions*"
+            (mapcar (lambda(x)
+                      (princ (nth 1 x))
+                      (princ "\n"))
+                    keys-alist))            
+          (setq char (read-char)))
+      (setq char (read-char)))
+    (message nil)
+    ;; Return the selected result
+    (nth 2 (assoc char keys-alist))))
+
+;; Used for, e.g., electric debug super-examine.
+(defun idlwave-make-one-key-alist (alist)
+  "Make an alist for single key selection."
+  (let ((l alist) keys-alist name start char help
+        (cnt 0)
+        (case-fold-search nil))
+    (while l
+      (setq name (car (car l))
+            l (cdr l))
+      (catch 'exit
+        ;; First check if the configuration predetermined a key
+        (if (string-match "\\[\\(.\\)\\]" name)
+            (progn
+              (setq char (string-to-char (downcase (match-string 1 name)))
+                    help (format "%c:  %s" char name)
+                    keys-alist (cons (list char help name) keys-alist))
+              (throw 'exit t)))
+        ;; Then check for capital letters
+        (setq start 0)
+        (while (string-match "[A-Z]" name start)
+          (setq start (match-end 0)
+                char (string-to-char (downcase (match-string 0 name))))
+          (if (not (assoc char keys-alist))
+              (progn
+                (setq help (format "%c:  %s" char
+                                   (replace-match
+                                    (concat "[" (match-string 0 name) "]")
+                                          t t name))
+                      keys-alist (cons (list char help name) keys-alist))
+                (throw 'exit t))))
+        ;; Now check for lowercase letters
+        (setq start 0)
+        (while (string-match "[a-z]" name start)
+          (setq start (match-end 0)
+                char (string-to-char (match-string 0 name)))
+          (if (not (assoc char keys-alist))
+              (progn
+                (setq help (format "%c:  %s" char
+                                   (replace-match
+                                    (concat "[" (match-string 0 name) "]")
+                                    t t name))
+                      keys-alist (cons (list char help name) keys-alist))
+                (throw 'exit t))))
+        ;; Bummer, nothing found!  Use a stupid number
+        (setq char (string-to-char (int-to-string (setq cnt (1+ cnt))))
+              help (format "%c:  %s" char name)
+              keys-alist (cons (list char help name) keys-alist))))
+    (nreverse keys-alist)))
+
 (defun idlwave-set-local (var value &optional buffer)
   "Set the buffer-local value of VAR in BUFFER to VALUE."
   (save-excursion
@@ -6288,7 +6692,7 @@
 (defun idlwave-make-modified-completion-map-emacs (old-map)
   "Replace `choose-completion' and `mouse-choose-completion' in OLD-MAP."
   (let ((new-map (copy-keymap old-map)))
-    (substitute-key-definition
+    (substitute-key-definition 
      'choose-completion 'idlwave-choose-completion new-map)
     (substitute-key-definition
      'mouse-choose-completion 'idlwave-mouse-choose-completion new-map)
@@ -6309,13 +6713,25 @@
 ;;----------------------------------------------------------------------
 
 ;;; ------------------------------------------------------------------------
-;;; Sturucture parsing code, and code to manage class info
+;;; Stucture parsing code, and code to manage class info
 
 ;;
 ;; - Go again over the documentation how to write a completion
 ;;   plugin.  It is in self.el, but currently still very bad.
-;;   This could be in a separate file in the distribution, or
-;;   in an appendix for the manual.
+;;   This could be in a separate file in the distribution, or 
+;;   in an appendix for the manual.  
+
+(defvar idlwave-struct-skip
+  "[ \t]*\\(\\$.*\n\\(^[ \t]*\\(\\$[ \t]*\\)?\\(;.*\\)?\n\\)*\\)?[ \t]*"
+  "Regexp for skipping continued blank or comment-only lines in
+structures")
+
+(defvar idlwave-struct-tag-regexp
+  (concat "[{,]" ;leading comma/brace
+	  idlwave-struct-skip ; 4 groups
+	  "\\([a-zA-Z][a-zA-Z0-9_]*\\)" ;the tag itself, group 5
+	  "[ \t]*:") ; the final colon
+  "Regexp for structure tags.")
 
 (defun idlwave-struct-tags ()
   "Return a list of all tags in the structure defined at point.
@@ -6326,13 +6742,15 @@
 	   (end (cdr borders))
 	   tags)
       (goto-char beg)
-      (while (re-search-forward "[{,][ \t]*\\(\\$.*\n\\(^[ \t]*\\(\\$[ \t]*\\)?\\(;.*\\)?\n\\)*[ \t]*\\)?\\([a-zA-Z][a-zA-Z0-9_]*\\)[ \t]*:" end t)
-	;; Check if we are still on the top level of the structure.
-	(if (and (condition-case nil (progn (up-list -1) t) (error nil))
-		 (= (point) beg))
-	    (push (match-string 5) tags))
-	(goto-char (match-end 0)))
-      (nreverse tags))))
+      (save-restriction
+	(narrow-to-region beg end)
+	(while (re-search-forward idlwave-struct-tag-regexp end t)
+	  ;; Check if we are still on the top level of the structure.
+	  (if (and (condition-case nil (progn (up-list -1) t) (error nil))
+		   (= (point) beg))
+	      (push (match-string-no-properties 5) tags))
+	  (goto-char (match-end 0))))
+	(nreverse tags))))
 
 (defun idlwave-find-struct-tag (tag)
   "Find a given TAG in the structure defined at point."
@@ -6340,7 +6758,7 @@
 	 (beg (car borders))
 	 (end (cdr borders))
 	 (case-fold-search t))
-    (re-search-forward (concat "\\(^[ \t]*\\|[,{][ \t]*\\)" tag "[ \t]*:")
+    (re-search-forward (concat "\\(^[ \t]*\\|[,{][ \t]*\\)" tag "[ \t]*:") 
 		       end t)))
 
 (defun idlwave-struct-inherits ()
@@ -6353,16 +6771,24 @@
 	   (case-fold-search t)
 	   names)
       (goto-char beg)
-      (while (re-search-forward "[{,][ \t]*\\(\\$.*\n[ \t]*\\)?inherits[ \t]*\\(\\$.*\n[ \t]*\\)?\\([a-zA-Z][a-zA-Z0-9_]*\\)" end t)
-	;; Check if we are still on the top level of the structure.
-	(if (and (condition-case nil (progn (up-list -1) t) (error nil))
-		 (= (point) beg))
-	    (push (match-string 3) names))
-	(goto-char (match-end 0)))
+      (save-restriction
+	(narrow-to-region beg end)
+	(while (re-search-forward 
+		(concat "[{,]"  ;leading comma/brace
+			idlwave-struct-skip ; 4 groups
+			"inherits"    ; The INHERITS tag
+			idlwave-struct-skip ; 4 more
+			"\\([a-zA-Z][a-zA-Z0-9_]*\\)") ; The super-group, #9
+		end t)
+	  ;; Check if we are still on the top level of the structure.
+	  (if (and (condition-case nil (progn (up-list -1) t) (error nil))
+		   (= (point) beg))
+	      (push (match-string-no-properties 9) names))
+	  (goto-char (match-end 0))))
       (nreverse names))))
 
 (defun idlwave-in-structure ()
-  "Return t if point is inside an IDL structure."
+  "Return t if point is inside an IDL structure definition."
   (let ((beg (point)))
     (save-excursion
       (if (not (or (idlwave-in-comment) (idlwave-in-quote)))
@@ -6382,12 +6808,13 @@
       (cons beg (point)))))
 
 (defun idlwave-find-structure-definition (&optional var name bound)
-  "Search forward for a structure definition.
-If VAR is non-nil, search for a structure assigned to variable VAR.
-If NAME is non-nil, search for a named structure NAME.  If BOUND is an
-integer, limit the search.  If BOUND is the symbol `all', we search
-first back and then forward through the entire file.  If BOUND is the
-symbol `back' we search only backward."
+  "Search forward for a structure definition.  If VAR is non-nil,
+search for a structure assigned to variable VAR.  If NAME is non-nil,
+search for a named structure NAME, if a string, or a generic named
+structure otherwise.  If BOUND is an integer, limit the search.  If
+BOUND is the symbol `all', we search first back and then forward
+through the entire file.  If BOUND is the symbol `back' we search only
+backward."
   (let* ((ws "[ \t]*\\(\\$.*\n[ \t]*\\)*")
 	 (case-fold-search t)
 	 (lim (if (integerp bound) bound nil))
@@ -6396,36 +6823,53 @@
 		  (concat "\\<" (regexp-quote (downcase var)) "\\>" ws)
 		"\\(\\)")
 	      "=" ws "\\({\\)"
-	      (if name (concat ws "\\<" (downcase name) "[^a-zA-Z0-9_$]") ""))))
+	      (if name 
+		  (if (stringp name)
+		      (concat ws "\\(\\<" (downcase name) "\\)[^a-zA-Z0-9_$]") 
+		    ;; Just a generic name
+		    (concat ws "\\<\\([a-zA-Z_0-9$]+\\)" ws ","))
+		""))))
     (if (or (and (or (eq bound 'all) (eq bound 'back))
 		 (re-search-backward re nil t))
 	    (and (not (eq bound 'back)) (re-search-forward re lim t)))
-	(goto-char (match-beginning 3)))))
-
-(defvar idlwave-class-info nil)
-(defvar idlwave-system-class-info nil)
+	(progn
+	  (goto-char (match-beginning 3))
+	  (match-string-no-properties 5)))))
+
+(defvar idlwave-class-info nil) 
+(defvar idlwave-system-class-info nil) ; Gathered from idlw-rinfo
+(defvar idlwave-class-reset nil) ; to reset buffer-local classes
+
 (add-hook 'idlwave-update-rinfo-hook
-	  (lambda () (setq idlwave-class-info nil)))
+	  (lambda () (setq idlwave-class-reset t)))
 (add-hook 'idlwave-after-load-rinfo-hook
 	  (lambda () (setq idlwave-class-info nil)))
 
 (defun idlwave-class-info (class)
   (let (list entry)
-    (unless idlwave-class-info
-      ;; Info is nil, put in the system stuff.
+    (if idlwave-class-info
+	(if idlwave-class-reset
+	    (setq 	    
+	     idlwave-class-reset nil
+	     idlwave-class-info ; Remove any visited in a buffer
+	     (delq nil (mapcar 
+			(lambda (x) 
+			  (let ((filebuf 
+				 (idlwave-class-file-or-buffer 
+				  (or (cdr (assq 'found-in x)) (car x)))))
+			    (if (cdr filebuf)
+				nil
+			      x)))
+			idlwave-class-info))))
+      ;; Info is nil, put in the system stuff to start.
       (setq idlwave-class-info idlwave-system-class-info)
       (setq list idlwave-class-info)
       (while (setq entry (pop list))
 	(idlwave-sintern-class-info entry)))
     (setq class (idlwave-sintern-class class))
-    (setq entry (assq class idlwave-class-info))
-    (unless entry
-      (setq entry (idlwave-find-class-info class))
-      (when entry
-	;; Sintern and cache the info
-	(idlwave-sintern-class-info entry)
-	(push entry idlwave-class-info)))
-    entry))
+    (or (assq class idlwave-class-info)
+	(progn (idlwave-scan-class-info class)
+	       (assq class idlwave-class-info)))))
 
 (defun idlwave-sintern-class-info (entry)
   "Sintern the class names in a class-info entry."
@@ -6436,28 +6880,50 @@
 	(setcdr inherits (mapcar (lambda (x) (idlwave-sintern-class x 'set))
 				 (cdr inherits))))))
 
-(defun idlwave-find-class-definition (class)
-  (let ((case-fold-search t))
-    (if (re-search-forward
-	 (concat "^[ \t]*pro[ \t]+" (downcase class) "__define" "\\>") nil t)
-	;; FIXME: should we limit to end of pro here?
-	(idlwave-find-structure-definition nil class))))
-
-(defun idlwave-find-class-info (class)
-  "Find the __define procedure for a class structure and return info entry."
+(defun idlwave-find-class-definition (class &optional all-hook alt-class)
+  "Find class structure definition(s)
+If ALL-HOOK is set, find all named structure definitions in a given
+class__define routine, on which ALL-HOOK will be run.  If ALT-CLASS is
+set, look for the name__define pro, and inside of it, for the ALT-CLASS
+class/struct definition"
+  (let ((case-fold-search t) end-lim list name)
+    (when (re-search-forward
+	   (concat "^[ \t]*pro[ \t]+" (downcase class) "__define" "\\>") nil t)
+      (if all-hook
+	  (progn
+	    ;; For everything there
+	    (setq end-lim (save-excursion (idlwave-end-of-subprogram) (point)))
+	    (while (setq name 
+			 (idlwave-find-structure-definition nil t end-lim))
+	      (funcall all-hook name)))
+	(idlwave-find-structure-definition nil (or alt-class class))))))
+
+
+(defun idlwave-class-file-or-buffer (class)
+  "Find buffer visiting CLASS definition"
   (let* ((pro (concat (downcase class) "__define"))
-	 (class (idlwave-sintern-class class))
-	 (idlwave-auto-routine-info-updates nil)
-	 (file (cdr (nth 3 (idlwave-rinfo-assoc pro 'pro nil
-						(idlwave-routines)))))
-	 buf)
-    (if (or (not file)
-	    (not (file-regular-p
-		  (setq file (idlwave-expand-lib-file-name file)))))
-	nil ; Cannot get info
+	 (file (idlwave-routine-source-file
+		(nth 3 (idlwave-rinfo-assoc pro 'pro nil
+					    (idlwave-routines))))))
+    (cons file (if file (idlwave-get-buffer-visiting file)))))
+
+
+(defun idlwave-scan-class-info (class)
+  "Scan all class and named structure info in the class__define pro"
+  (let* ((idlwave-auto-routine-info-updates nil)
+	 (filebuf (idlwave-class-file-or-buffer class))
+	 (file (car filebuf))
+	 (buf (cdr filebuf))
+	 (class (idlwave-sintern-class class)))
+    (if (or
+	 (not file)
+	 (and ;; neither a regular file nor a visited buffer
+	  (not buf)
+	  (not (file-regular-p file))))
+	nil ; Cannot find the file/buffer to get any info
       (save-excursion
-	(if (setq buf (idlwave-get-buffer-visiting file))
-	    (set-buffer buf)
+	(if buf (set-buffer buf)
+	  ;; Read the file in temporarily
 	  (set-buffer (get-buffer-create " *IDLWAVE-tmp*"))
 	  (erase-buffer)
 	  (unless (eq major-mode 'idlwave-mode)
@@ -6465,11 +6931,22 @@
 	  (insert-file-contents file))
 	(save-excursion
 	  (goto-char 1)
-	  (if (idlwave-find-class-definition class)
-	      (list class
-		    (cons 'tags (idlwave-struct-tags))
-		    (cons 'inherits (idlwave-struct-inherits)))))))))
-
+	  (idlwave-find-class-definition class 
+	   ;; Scan all of the structures found there
+	   (lambda (name)
+	     (let* ((this-class (idlwave-sintern-class name))
+		    (entry 
+		     (list this-class
+			   (cons 'tags (idlwave-struct-tags))
+			   (cons 'inherits (idlwave-struct-inherits)))))
+	       (if (not (eq this-class class))
+		   (setq entry (nconc entry (list (cons 'found-in class)))))
+	       (idlwave-sintern-class-info entry)
+	       (push entry idlwave-class-info)))))))))
+
+(defun idlwave-class-found-in (class)
+  "Return the FOUND-IN property of the class."
+  (cdr (assq 'found-in (idlwave-class-info class))))
 (defun idlwave-class-tags (class)
   "Return the native tags in CLASS."
   (cdr (assq 'tags (idlwave-class-info class))))
@@ -6477,12 +6954,13 @@
   "Return the direct superclasses of CLASS."
   (cdr (assq 'inherits (idlwave-class-info class))))
 
+
 (defun idlwave-all-class-tags (class)
   "Return a list of native and inherited tags in CLASS."
   (condition-case err
       (apply 'append (mapcar 'idlwave-class-tags
 			     (cons class (idlwave-all-class-inherits class))))
-    (error
+    (error           
      (idlwave-class-tag-reset)
      (error "%s" (error-message-string err)))))
 
@@ -6518,6 +6996,49 @@
 	  (nconc info (list (cons 'all-inherits all-inherits)))
 	  all-inherits))))))
 
+(defun idlwave-entry-keywords (entry &optional record-link)
+  "Return the flat entry keywords alist from routine-info entry.  
+If RECORD-LINK is non-nil, the keyword text is copied and a text
+property indicating the link is added."
+  (let (kwds)
+    (mapcar
+     (lambda (key-list) 
+       (let ((file (car key-list)))
+	 (mapcar (lambda (key-cons)
+		   (let ((key (car key-cons))
+			 (link (cdr key-cons)))
+		     (when (and record-link file)
+			 (setq key (copy-sequence key))
+			 (put-text-property 
+			  0 (length key)
+			  'link 
+			  (concat 
+			   file 
+			   (if link 
+			       (concat idlwave-html-link-sep
+				       (number-to-string link))))
+			  key))
+		     (push (list key) kwds)))
+		 (cdr key-list))))
+     (nthcdr 5 entry))
+    (nreverse kwds)))
+
+(defun idlwave-entry-find-keyword (entry keyword)
+  "Find keyword KEYWORD in entry ENTRY, and return (with link) if set"
+  (catch 'exit
+    (mapc
+     (lambda (key-list) 
+       (let ((file (car key-list))
+	     (kwd (assoc keyword (cdr key-list))))
+	 (when kwd
+	   (setq kwd (cons (car kwd) 
+			   (if (and file (cdr kwd))
+			       (concat file 
+				       idlwave-html-link-sep
+				       (number-to-string (cdr kwd)))
+			     (cdr kwd))))
+	   (throw 'exit kwd))))
+     (nthcdr 5 entry))))
 
 ;;==========================================================================
 ;;
@@ -6539,7 +7060,7 @@
 	(case-fold-search t))
     (if (save-excursion
 	  ;; Check if the context is right
-	  (skip-chars-backward "[a-zA-Z0-9._$]")
+	  (skip-chars-backward "a-zA-Z0-9._$")
 	  (and (< (point) (- pos 4))
 	       (looking-at "self\\.")))
 	(let* ((class-selector (nth 2 (idlwave-current-routine)))
@@ -6550,14 +7071,14 @@
 	  ;; Check if we need to update the "current" class
 	  (if (not (equal class-selector idlwave-current-tags-class))
 	      (idlwave-prepare-class-tag-completion class-selector))
-	  (setq idlwave-completion-help-info
+	  (setq idlwave-completion-help-info 
 		(list 'idlwave-complete-class-structure-tag-help
-		      (idlwave-sintern-routine
+		      (idlwave-sintern-routine 
 		       (concat class-selector "__define"))
 		      nil))
 	  (let  ((idlwave-cpl-bold idlwave-current-native-class-tags))
 	    (idlwave-complete-in-buffer
-	     'class-tag 'class-tag
+	     'class-tag 'class-tag 
 	     idlwave-current-class-tags nil
 	     (format "Select a tag of class %s" class-selector)
 	     "class tag"
@@ -6582,9 +7103,7 @@
 ;===========================================================================
 ;;
 ;; Completing system variables and their structure fields
-;; This is also a plugin.  It is a bit bigger since we support loading
-;; current system variables from the shell and highlighting in the
-;; completions buffer.
+;; This is also a plugin.
 
 (defvar idlwave-sint-sysvars nil)
 (defvar idlwave-sint-sysvartags nil)
@@ -6592,13 +7111,14 @@
 (idlwave-new-sintern-type 'sysvartag)
 (add-to-list 'idlwave-complete-special 'idlwave-complete-sysvar-or-tag)
 (add-hook 'idlwave-update-rinfo-hook 'idlwave-sysvars-reset)
-(add-hook 'idlwave-after-load-rinfo-hook 'idlwave-remember-builtin-sysvars)
 (add-hook 'idlwave-after-load-rinfo-hook 'idlwave-sintern-sysvar-alist)
 
+(defvar idlwave-executive-commands-alist nil
+  "Alist of system variables and their help files.")
+
 (defvar idlwave-system-variables-alist nil
   "Alist of system variables and the associated structure tags.
 Gets set in `idlw-rinfo.el'.")
-(defvar idlwave-builtin-system-variables nil)
 
 (defun idlwave-complete-sysvar-or-tag ()
   "Complete a system variable."
@@ -6610,69 +7130,90 @@
 	     (skip-chars-backward "[a-zA-Z0-9_$]")
 	     (equal (char-before) ?!))
 	   (setq idlwave-completion-help-info '(idlwave-complete-sysvar-help))
-	   (idlwave-complete-in-buffer 'sysvar 'sysvar
+	   (idlwave-complete-in-buffer 'sysvar 'sysvar 
 				       idlwave-system-variables-alist nil
 				       "Select a system variable"
 				       "system variable")
 	   t)  ; return t to skip other completions
 	  ((save-excursion
 	     ;; Check if the context is right for sysvar tag
-	     (skip-chars-backward "[a-zA-Z0-9_$.]")
+	     (skip-chars-backward "a-zA-Z0-9_$.")
 	     (and (equal (char-before) ?!)
 		  (looking-at "\\([a-zA-Z][a-zA-Z0-9_$]*\\)\\.")
 		  (<= (match-end 0) pos)))
 	   ;; Complete a system variable tag
 	   (let* ((var (idlwave-sintern-sysvar (match-string 1)))
 		  (entry (assq var idlwave-system-variables-alist))
-		  (tags (cdr entry)))
-	     (or entry (error "!%s is not know to be a system variable" var))
+		  (tags (cdr (assq 'tags entry))))
+	     (or entry (error "!%s is not a known system variable" var))
 	     (or tags (error "System variable !%s is not a structure" var))
 	     (setq idlwave-completion-help-info
-		   (list 'idlwave-complete-sysvar-help var))
-	     (idlwave-complete-in-buffer 'sysvartag 'sysvartag
+		   (list 'idlwave-complete-sysvar-tag-help var))
+	     (idlwave-complete-in-buffer 'sysvartag 'sysvartag 
 					 tags nil
 					 "Select a system variable tag"
 					 "system variable tag")
 	     t)) ; return t to skip other completions
 	  (t nil))))
 
-;; Here we fake help using the routine "system variables" with keyword
-;; set to the sysvar.  Name and kwd are global variables here.
-(defvar name)
-(defvar kwd)
 (defun idlwave-complete-sysvar-help (mode word)
-  (cond
-   ((eq mode 'test)
-    (or (and (eq nil (nth 1 idlwave-completion-help-info))
-	     (member (downcase word) idlwave-builtin-system-variables))
-	(and (stringp (nth 1 idlwave-completion-help-info))
-	     (member (downcase (nth 1 idlwave-completion-help-info))
-		     idlwave-builtin-system-variables))))
-   ((eq mode 'set)
-    (setq name "system variables"
-	  kwd (concat "!"
-		      (if (stringp (nth 1 idlwave-completion-help-info))
-			  (nth 1 idlwave-completion-help-info)
-			word))))
-   (t (error "This should not happen"))))
+  (let ((word (or (nth 1 idlwave-completion-help-info) word))
+	(entry (assoc word idlwave-system-variables-alist)))
+    (cond
+     ((eq mode 'test)
+      (and (stringp word) entry (nth 1 (assq 'link entry))))
+     ((eq mode 'set)
+      (if entry (setq link (nth 1 (assq 'link entry))))) ;; setting dynamic!!!
+     (t (error "This should not happen")))))
+
+(defun idlwave-complete-sysvar-tag-help (mode word)
+  (let* ((var (nth 1 idlwave-completion-help-info))
+	(entry (assoc var idlwave-system-variables-alist))
+	(tags (cdr (assq 'tags entry)))
+	(main (nth 1 (assq 'link entry)))
+	target main-base)
+    (cond
+     ((eq mode 'test) ; we can at least link the main
+      (and (stringp word) entry main))
+     ((eq mode 'set)
+      (if entry 
+	  (setq link 
+		(if (setq target (cdr (assoc word tags)))
+		  (idlwave-substitute-link-target main target)
+		main)))) ;; setting dynamic!!!
+     (t (error "This should not happen")))))
+
+(defun idlwave-substitute-link-target (link target)
+  "Substitute the target anchor for the given link."
+  (let (main-base)
+    (setq main-base (if (string-match "#" link)
+			(substring link 0 (match-beginning 0))
+		      link))
+    (if target
+	(concat main-base idlwave-html-link-sep (number-to-string target))
+      link)))
 
 ;; Fake help in the source buffer for class structure tags.
-;; kwd and name are global-variables here.
+;; KWD AND NAME ARE GLOBAL-VARIABLES HERE.
+(defvar name) 
+(defvar kwd)
 (defvar idlwave-help-do-class-struct-tag nil)
 (defun idlwave-complete-class-structure-tag-help (mode word)
   (cond
    ((eq mode 'test) ; nothing gets fontified for class tags
     nil)
    ((eq mode 'set)
-    (let (class-with)
-      (when (setq class-with
-		(idlwave-class-or-superclass-with-tag
+    (let (class-with found-in)
+      (when (setq class-with 
+		(idlwave-class-or-superclass-with-tag 
 		 idlwave-current-tags-class
 		 word))
-	(if (assq (idlwave-sintern-class class-with)
+	(if (assq (idlwave-sintern-class class-with) 
 		  idlwave-system-class-info)
 	    (error "No help available for system class tags."))
-	(setq name (concat class-with "__define"))))
+	(if (setq found-in (idlwave-class-found-in class-with))
+	    (setq name (cons (concat found-in "__define") class-with))
+	  (setq name (concat class-with "__define")))))
     (setq kwd word
 	  idlwave-help-do-class-struct-tag t))
    (t (error "This should not happen"))))
@@ -6680,7 +7221,7 @@
 (defun idlwave-class-or-superclass-with-tag (class tag)
   "Find and return the CLASS or one of its superclass with the
 associated TAG, if any."
-  (let ((sclasses (cons class (cdr (assq 'all-inherits
+  (let ((sclasses (cons class (cdr (assq 'all-inherits 
 					 (idlwave-class-info class)))))
 	cl)
    (catch 'exit
@@ -6689,13 +7230,14 @@
        (let ((tags (idlwave-class-tags cl)))
 	 (while tags
 	   (if (eq t (compare-strings tag 0 nil (car tags) 0 nil t))
-	     (throw 'exit cl))
+	     (throw 'exit cl))	       
 	   (setq tags (cdr tags))))))))
 
 
 (defun idlwave-sysvars-reset ()
   (if (and (fboundp 'idlwave-shell-is-running)
-	   (idlwave-shell-is-running))
+	   (idlwave-shell-is-running)
+	   idlwave-idlwave_routine_info-compiled)
       (idlwave-shell-send-command "idlwave_get_sysvars"
 				  'idlwave-process-sysvars 'hide)))
 
@@ -6705,34 +7247,45 @@
 	idlwave-sint-sysvartags nil)
   (idlwave-sintern-sysvar-alist))
 
-(defun idlwave-remember-builtin-sysvars ()
-  (setq idlwave-builtin-system-variables
-	(mapcar 'downcase
-		(mapcar 'car idlwave-system-variables-alist))))
-
 (defun idlwave-sintern-sysvar-alist ()
-  (let ((list idlwave-system-variables-alist) entry)
+  (let ((list idlwave-system-variables-alist) entry tags)
     (while (setq entry (pop list))
       (setcar entry (idlwave-sintern-sysvar (car entry) 'set))
-      (setcdr entry (mapcar (lambda (x)
-			      (list (idlwave-sintern-sysvartag (car x) 'set)))
-			    (cdr entry))))))
+      (setq tags (assq 'tags entry))
+      (if tags
+	  (setcdr tags 
+		  (mapcar (lambda (x) 
+			    (cons (idlwave-sintern-sysvartag (car x) 'set)
+				  (cdr x)))
+			  (cdr tags)))))))
 
 (defvar idlwave-shell-command-output)
 (defun idlwave-shell-filter-sysvars ()
-  "Get the system variables and structure tags."
+  "Get any new system variables and tags."
   (let ((text idlwave-shell-command-output)
 	(start 0)
 	(old idlwave-system-variables-alist)
-	var tags type name class)
+	var tags type name class link old-entry)
     (setq idlwave-system-variables-alist nil)
     (while (string-match "^IDLWAVE-SYSVAR: !\\([a-zA-Z0-9_$]+\\)\\( \\(.*\\)\\)?"
 			 text start)
       (setq start (match-end 0)
 	    var (match-string 1 text)
-	    tags (if (match-end 3) (idlwave-split-string (match-string 3 text))))
+	    tags (if (match-end 3) 
+		     (idlwave-split-string (match-string 3 text))))
+      ;; Maintain old links, if present
+      (setq old-entry (assq (idlwave-sintern-sysvar var) old))
+      (setq link (assq 'link old-entry))
       (setq idlwave-system-variables-alist
-	    (cons (cons var (mapcar 'list tags))
+	    (cons (list var 
+			(cons 
+			 'tags 
+			 (mapcar (lambda (x) 
+				   (cons x 
+					 (cdr (assq 
+					       (idlwave-sintern-sysvartag x) 
+					       (cdr (assq 'tags old-entry))))))
+				 tags)) link)
 		  idlwave-system-variables-alist)))
     ;; Keep the old value if query was not successful
     (setq idlwave-system-variables-alist
@@ -6751,10 +7304,13 @@
 			       'face 'font-lock-string-face)))))))
 
 (defun idlwave-uniquify (list)
-  (let (nlist)
-    (loop for x in list do
-      (add-to-list 'nlist x))
-    nlist))
+  (let ((ht (make-hash-table :size (length list) :test 'equal)))
+    (delq nil 
+	  (mapcar (lambda (x)
+		    (unless (gethash x ht) 
+		      (puthash x t ht)
+		      x))
+		  list))))
 
 (defun idlwave-after-successful-completion (type slash &optional verify)
   "Add `=' or `(' after successful completion of keyword and function.
@@ -6779,11 +7335,11 @@
       nil)))
 
   ;; Restore the pre-completion window configuration if this is safe.
-
-  (if (or (eq verify 'force)                                    ; force
-	  (and
+  
+  (if (or (eq verify 'force)                                    ; force 
+	  (and 
 	   (get-buffer-window "*Completions*")                  ; visible
-	   (idlwave-local-value 'idlwave-completion-p
+	   (idlwave-local-value 'idlwave-completion-p 
 				"*Completions*")                ; cib-buffer
 	   (eq (marker-buffer idlwave-completion-mark)
 	       (current-buffer))                                ; buffer OK
@@ -6810,62 +7366,21 @@
 `idlwave-help-source-try-header' is non-nil) or the routine definition
 itself."
   (interactive "P")
-  (idlwave-require-online-help)
   (idlwave-do-context-help arg))
 
 (defun idlwave-mouse-completion-help (ev)
   "Display online help about the completion at point."
   (interactive "eP")
-  (idlwave-require-online-help)
-  ;; Restore last-command for next command, to make scrolling of completions
-  ;; work.
+  ;; Restore last-command for next command, to make
+  ;; scrolling/cancelling of completions work.
   (setq this-command last-command)
   (idlwave-do-mouse-completion-help ev))
 
-(defvar idlwave-help-is-loaded nil
-  "Is online help avaiable?")
-;; The following variables will be defined by `idlw-help.el'.
-(defvar idlwave-help-frame-width nil)
-(defvar idlwave-help-file nil)
-(defvar idlwave-help-topics nil)
-
-(defun idlwave-help-directory ()
-  "Return the help directory, or nil if that is not known."
-  (or (and (stringp idlwave-help-directory)
-	   (> (length idlwave-help-directory) 0)
-	   idlwave-help-directory)
-      (getenv "IDLWAVE_HELP_DIRECTORY")))
-
-(defun idlwave-require-online-help ()
-  (if idlwave-help-is-loaded
-      t  ;; everything is OK.
-    (let* ((dir (or (idlwave-help-directory)
-		    (error "Online Help not installed (help directory unknown) - download at idlwave.org")))
-	   (lfile1 (expand-file-name "idlw-help.elc" dir))
-	   (lfile2 (expand-file-name "idlw-help.el" dir))
-	   (hfile (expand-file-name "idlw-help.txt" dir)))
-      (if (or (and (file-regular-p lfile1) (load-file lfile1))
-	      (and (file-regular-p lfile2) (load-file lfile2)))
-	  (progn
-	    (if (and idlwave-help-frame-parameters
-		     (not (assoc 'width idlwave-help-frame-parameters)))
-		(push (cons 'width idlwave-help-frame-width)
-		      idlwave-help-frame-parameters))
-	    (or idlwave-help-topics
-		(error "File `%s' in help dir `%s' does not define `idlwave-help-topics'"
-			 "idlw-help.el" dir)))
-	(error "No such file `%s' in help dir `%s'" "idlw-help.el" dir))
-      (if (file-regular-p hfile)
-	  (setq idlwave-help-is-loaded t
-		idlwave-help-file hfile)
-	(error "No such file `%s' in dir `%s'" "idlw-help.txt" dir)))))
-
 (defun idlwave-routine-info (&optional arg external)
-  "Display a routines calling sequence and list of keywords.
-When point is on the name a function or procedure, or in the argument
-list of a function or procedure, this command displays a help buffer
-with the information.  When called with prefix arg, enforce class
-query.
+  "Display a routines calling sequence and list of keywords.  When
+point is on the name a function or procedure, or in the argument list
+of a function or procedure, this command displays a help buffer with
+the information.  When called with prefix arg, enforce class query.
 
 When point is on an object operator `->', display the class stored in
 this arrow, if any (see `idlwave-store-inquired-class').  With a
@@ -6903,7 +7418,7 @@
 	(error "Don't know which calling sequence to show")))))
 
 (defun idlwave-resolve (&optional arg)
-  "Call RESOLVE on the module name at point.
+  "Call RESOLVE_ROUTINE on the module name at point.
 Like `idlwave-routine-info', this looks for a routine call at point.
 After confirmation in the minibuffer, it will use the shell to issue
 a RESOLVE call for this routine, to attempt to make it defined and its
@@ -6922,7 +7437,7 @@
     (if (string-match "\\(pro\\|function\\)[ \t]+\\(\\(.*\\)::\\)?\\(.*\\)"
 		      resolve)
 	(setq type (match-string 1 resolve)
-	      class (if (match-beginning 2)
+	      class (if (match-beginning 2) 
 			(match-string 3 resolve)
 		      nil)
 	      name (match-string 4 resolve)))
@@ -6931,44 +7446,54 @@
 
     (cond
      ((null class)
-      (idlwave-shell-send-command
+      (idlwave-shell-send-command 
        (format "resolve_routine,'%s'%s" (downcase name) kwd)
        'idlwave-update-routine-info
        nil t))
      (t
-      (idlwave-shell-send-command
+      (idlwave-shell-send-command 
        (format "resolve_routine,'%s__define'%s" (downcase class) kwd)
-       (list 'idlwave-shell-send-command
-	     (format "resolve_routine,'%s__%s'%s"
+       (list 'idlwave-shell-send-command 
+	     (format "resolve_routine,'%s__%s'%s" 
 		     (downcase class) (downcase name) kwd)
 	     '(idlwave-update-routine-info)
 	     nil t))))))
 
 (defun idlwave-find-module (&optional arg)
   "Find the source code of an IDL module.
-Works for modules for which IDLWAVE has routine info available.
-The function offers as default the module name `idlwave-routine-info' would
-use.  With ARG force class query for object methods."
+Works for modules for which IDLWAVE has routine info available.  The
+function offers as default the module name `idlwave-routine-info'
+would use.  With ARG limit to this buffer.  With two prefix ARG's
+force class query for object methods."
   (interactive "P")
   (let* ((idlwave-query-class nil)
-	 (idlwave-force-class-query (equal arg '(4)))
+	 (idlwave-force-class-query (equal arg '(16)))
+	 (this-buffer (equal arg '(4)))
 	 (module (idlwave-fix-module-if-obj_new (idlwave-what-module)))
-	 (default (concat (idlwave-make-full-name (nth 2 module) (car module))
-			  (if (eq (nth 1 module) 'pro) "<p>" "<f>")))
-	 (list
-	  (delq nil
-		(mapcar (lambda (x)
-			  (if (eq 'system (car-safe (nth 3 x)))
-			      ;; Take out system routines with no source.
-			      nil
-			    (cons
-			     (concat (idlwave-make-full-name (nth 2 x) (car x))
-				     (if (eq (nth 1 x) 'pro) "<p>" "<f>"))
-			     (cdr x))))
-			(idlwave-routines))))
+	 (default (if module
+		      (concat (idlwave-make-full-name 
+			       (nth 2 module) (car module))
+			      (if (eq (nth 1 module) 'pro) "<p>" "<f>"))
+		    "none"))
+	 (list 
+	  (idlwave-uniquify
+	   (delq nil
+		 (mapcar (lambda (x) 
+			   (if (eq 'system (car-safe (nth 3 x)))
+			       ;; Take out system routines with no source.
+			       nil
+			     (list
+			      (concat (idlwave-make-full-name 
+				       (nth 2 x) (car x))
+				      (if (eq (nth 1 x) 'pro) "<p>" "<f>")))))
+			 (if this-buffer
+			     (idlwave-save-buffer-update)
+			   (idlwave-routines))))))
 	 (name (idlwave-completing-read
-		(format "Module (Default %s): "
-			(if default default "none"))
+		(if (or (not this-buffer)
+			(assoc default list))
+		    (format "Module (Default %s): " default)
+		  (format "Module in this file: "))
 		list))
 	 type class)
     (if (string-match "\\`\\s-*\\'" name)
@@ -6985,47 +7510,51 @@
 	  type (cond ((equal type "f") 'fun)
 		     ((equal type "p") 'pro)
 		     (t t)))
-    (idlwave-do-find-module name type class)))
-
-(defun idlwave-do-find-module (name type class &optional force-source)
+    (idlwave-do-find-module name type class nil this-buffer)))
+
+(defun idlwave-do-find-module (name type class 
+				    &optional force-source this-buffer)
   (let ((name1 (idlwave-make-full-name class name))
-	source buf1 entry
+	source buf1 entry 
 	(buf (current-buffer))
 	(pos (point))
-	name2)
-    (setq entry (idlwave-best-rinfo-assq name type class (idlwave-routines))
+	file name2)
+    (setq entry (idlwave-best-rinfo-assq name type class (idlwave-routines)
+					 'WITH-FILE)
 	  source (or force-source (nth 3 entry))
 	  name2 (if (nth 2 entry)
 		    (idlwave-make-full-name (nth 2 entry) name)
 		  name1))
+    (if source	
+	(setq file (idlwave-routine-source-file source)))
+    (unless file  ; Try to find it on the path.
+      (setq file 
+	    (idlwave-expand-lib-file-name 
+	     (if class
+		 (format "%s__define.pro" (downcase class))
+	       (format "%s.pro" (downcase name))))))
     (cond
      ((or (null name) (equal name ""))
       (error "Abort"))
-     ((null entry)
-      (error "Nothing known about a module %s" name2))
      ((eq (car source) 'system)
-      (error "Source code for system routine %s is not available"
+      (error "Source code for system routine %s is not available" 
 	     name2))
-     ((equal (cdr source) "")
+     ((or (not file) (not (file-regular-p file)))
       (error "Source code for routine %s is not available"
 	     name2))
-     ((memq (car source) '(buffer lib compiled))
-      (setq buf1
-	    (if (eq (car source) 'lib)
-		(idlwave-find-file-noselect
-		 (idlwave-expand-lib-file-name
-		  (or (cdr source)
-		      (format "%s.pro" (downcase name)))) 'find)
-	      (idlwave-find-file-noselect (cdr source) 'find)))
-      (pop-to-buffer buf1 t)
+     (t
+      (when (not this-buffer)
+	(setq buf1 
+	      (idlwave-find-file-noselect file 'find))
+	(pop-to-buffer buf1 t))
       (goto-char (point-max))
       (let ((case-fold-search t))
 	(if (re-search-backward
 	     (concat "^[ \t]*\\<"
-		     (cond ((equal type "f") "function")
-			   ((equal type "p") "pro")
+		     (cond ((eq type 'fun) "function")
+			   ((eq type 'pro) "pro")
 			   (t "\\(pro\\|function\\)"))
-		     "\\>[ \t]+"
+		     "\\>[ \t]+" 
 		     (regexp-quote (downcase name2))
 		     "[^a-zA-Z0-9_$]")
 	     nil t)
@@ -7045,12 +7574,12 @@
       ;; This is a function or procedure definition statement
       ;; We return the defined routine as module.
       (list
-       (idlwave-sintern-routine-or-method (match-string 4)
-					  (match-string 2))
+       (idlwave-sintern-routine-or-method (match-string-no-properties 4)
+					  (match-string-no-properties 2))
        (if (equal (downcase (match-string 1)) "pro") 'pro 'fun)
        (idlwave-sintern-class (match-string 3)))
 
-    ;; Not a definition statement - analyze precise positon.
+    ;; Not a definition statement - analyze precise position.
     (let* ((where (idlwave-where))
 	   (cw (nth 2 where))
 	   (pro (car (nth 0 where)))
@@ -7062,17 +7591,17 @@
       (cond
        ((and (eq cw 'procedure)
 	     (not (equal this-word "")))
-	(setq this-word (idlwave-sintern-routine-or-method
+	(setq this-word (idlwave-sintern-routine-or-method 
 			 this-word (nth 2 (nth 3 where))))
 	(list this-word 'pro
-	      (idlwave-determine-class
+	      (idlwave-determine-class 
 	       (cons this-word (cdr (nth 3 where)))
 	       'pro)))
-       ((and (eq cw 'function)
+       ((and (eq cw 'function) 
 	     (not (equal this-word ""))
 	     (or (eq next-char ?\()	; exclude arrays, vars.
 		 (looking-at "[a-zA-Z0-9_]*[ \t]*(")))
-	(setq this-word (idlwave-sintern-routine-or-method
+	(setq this-word (idlwave-sintern-routine-or-method 
 			 this-word (nth 2 (nth 3 where))))
 	(list this-word 'fun
 	      (idlwave-determine-class
@@ -7109,8 +7638,9 @@
       class)))
 
 (defun idlwave-fix-module-if-obj_new (module)
-  "Check if MODULE points to obj_new.  If yes, and if the cursor is in the
-keyword region, change to the appropriate Init method."
+  "Check if MODULE points to obj_new.  
+If yes, and if the cursor is in the keyword region, change to the
+appropriate Init method."
   (let* ((name (car module))
 	 (pos (point))
 	 (case-fold-search t)
@@ -7129,9 +7659,10 @@
 			     (idlwave-sintern-class class)))))
     module))
 
-
-(defun idlwave-fix-keywords (name type class keywords)
-  ;; This fixes the list of keywords.
+(defun idlwave-fix-keywords (name type class keywords &optional super-classes)
+  "Update a list of keywords.
+Translate OBJ_NEW, adding all super-class keywords, or all keywords
+from all classes if class equals t."
   (let ((case-fold-search t))
 
     ;; If this is the OBJ_NEW function, try to figure out the class and use
@@ -7147,48 +7678,50 @@
 			     string)
 	       (setq class (idlwave-sintern-class (match-string 1 string)))
 	       (setq idlwave-current-obj_new-class class)
-	       (setq keywords
-		     (append keywords
-			     (nth 5 (idlwave-rinfo-assq
-				     (idlwave-sintern-method "INIT")
-				     'fun
-				     class
-				     (idlwave-routines))))))))
-
+	       (setq keywords 
+		     (append keywords 
+			     (idlwave-entry-keywords
+			      (idlwave-rinfo-assq
+			       (idlwave-sintern-method "INIT")
+			       'fun
+			       class
+			       (idlwave-routines)) 'do-link))))))
+    
     ;; If the class is `t', combine all keywords of all methods NAME
     (when (eq class t)
-      (loop for x in (idlwave-routines) do
-	    (and (nth 2 x)                ; non-nil class
-		 (eq (nth 1 x) type)      ; correct type
-		 (eq (car x) name)        ; correct name
-		 (mapcar (lambda (k) (add-to-list 'keywords k))
-			 (nth 5 x))))
+      (mapc (lambda (entry)
+	      (and
+	       (nth 2 entry)             ; non-nil class
+	       (eq (nth 1 entry) type)   ; correct type
+	       (setq keywords 
+		     (append keywords 
+			     (idlwave-entry-keywords entry 'do-link)))))
+	    (idlwave-all-assq name (idlwave-routines)))
       (setq keywords (idlwave-uniquify keywords)))
-
+    
     ;; If we have inheritance, add all keywords from superclasses, if
-    ;; the user indicated that method in
-    ;; `idlwave-keyword-class-inheritance'
-    (when (and
+    ;; the user indicated that method in `idlwave-keyword-class-inheritance'
+    (when (and 
+	   super-classes
 	   idlwave-keyword-class-inheritance
 	   (stringp class)
 	   (or (assq (idlwave-sintern-keyword "_extra") keywords)
 	       (assq (idlwave-sintern-keyword "_ref_extra") keywords))
-	   (boundp 'super-classes)
 	   ;; Check if one of the keyword-class regexps matches the name
 	   (let ((regexps idlwave-keyword-class-inheritance) re)
 	     (catch 'exit
 	       (while (setq re (pop regexps))
 		 (if (string-match re name) (throw 'exit t))))))
-      (loop for x in (idlwave-routines) do
-	    (and (nth 2 x)                           ; non-nil class
-		 (or (eq (nth 2 x) class)            ; the right class
-		     (memq (nth 2 x) super-classes)) ; an inherited class
-		 (eq (nth 1 x) type)                 ; correct type
-		 (eq (car x) name)                   ; correct name
+
+      (loop for entry in (idlwave-routines) do
+	    (and (nth 2 entry)                           ; non-nil class
+		 (memq (nth 2 entry) super-classes)      ; an inherited class
+		 (eq (nth 1 entry) type)                 ; correct type
+		 (eq (car entry) name)                   ; correct name
 		 (mapcar (lambda (k) (add-to-list 'keywords k))
-			 (nth 5 x))))
+			 (idlwave-entry-keywords entry 'do-link))))
       (setq keywords (idlwave-uniquify keywords)))
-
+    
     ;; Return the final list
     keywords))
 
@@ -7208,19 +7741,19 @@
 	 (class (nth 2 module))
 	 (kwd (idlwave-sintern-keyword keyword))
 	 (entry (idlwave-best-rinfo-assoc name type class (idlwave-routines)))
-	 (kwd-alist (nth 5 entry))
+	 (kwd-alist (idlwave-entry-keywords entry))
 	 (extra (or (assq (idlwave-sintern-keyword "_EXTRA") kwd-alist)
 		    (assq (idlwave-sintern-keyword "_REF_EXTRA") kwd-alist)))
 	 (completion-ignore-case t)
 	 candidates)
-    (cond ((assq kwd kwd-alist)
+    (cond ((assq kwd kwd-alist) 
 	   kwd)
 	  ((setq candidates (all-completions kwd kwd-alist))
 	   (if (= (length candidates) 1)
 	       (car candidates)
 	     candidates))
 	  ((and entry extra)
-	   ;; Inheritance may cause this keyword to be correct
+	   ;; Inheritance may cause this keyword to be correct 
 	   keyword)
 	  (entry
 	   ;; We do know the function, which does not have the keyword.
@@ -7232,13 +7765,13 @@
 
 (defvar idlwave-rinfo-mouse-map (make-sparse-keymap))
 (defvar idlwave-rinfo-map (make-sparse-keymap))
-(define-key idlwave-rinfo-mouse-map
+(define-key idlwave-rinfo-mouse-map 
   (if (featurep 'xemacs) [button2] [mouse-2])
   'idlwave-mouse-active-rinfo)
-(define-key idlwave-rinfo-mouse-map
+(define-key idlwave-rinfo-mouse-map 
   (if (featurep 'xemacs) [(shift button2)] [(shift mouse-2)])
   'idlwave-mouse-active-rinfo-shift)
-(define-key idlwave-rinfo-mouse-map
+(define-key idlwave-rinfo-mouse-map 
   (if (featurep 'xemacs) [button3] [mouse-3])
   'idlwave-mouse-active-rinfo-right)
 (define-key idlwave-rinfo-mouse-map " " 'idlwave-active-rinfo-space)
@@ -7264,7 +7797,7 @@
   (let* ((initial-class (or initial-class class))
 	 (entry (or (idlwave-best-rinfo-assq name type class
 					     (idlwave-routines))
-		    (idlwave-rinfo-assq name type class
+		    (idlwave-rinfo-assq name type class 
 					idlwave-unresolved-routines)))
 	 (name (or (car entry) name))
 	 (class (or (nth 2 entry) class))
@@ -7272,34 +7805,25 @@
 	 (twins (idlwave-routine-twins entry))
 	 (dtwins (idlwave-study-twins twins))
 	 (all dtwins)
-	 (system (idlwave-rinfo-assq
-		  name type class idlwave-system-routines))
-	 (have-sysdoc (and system (idlwave-help-directory)))
-	 ;; (source (nth 3 entry))
-	 (have-olh (and (or system idlwave-extra-help-function)
-			(idlwave-help-directory)))
+	 (system (eq (car (nth 3 entry)) 'system))
 	 (calling-seq (nth 4 entry))
-	 (keywords (nth 5 entry))
-	 (olh (nth 6 entry))
+	 (keywords (idlwave-entry-keywords entry 'do-link))
+	 (html-file (car (nth 5 entry)))
 	 (help-echo-kwd
-	  (if have-olh
-	      "Button2: Insert KEYWORD (SHIFT=`/KEYWORD')    Button3: Online Help "
-	    "Button2: Insert KEYWORD (SHIFT=`/KEYWORD')."))
+	  "Button2: Insert KEYWORD (SHIFT=`/KEYWORD') | Button3: Online Help ")
 	 (help-echo-use
-	  (if have-olh
-	      "Button2/3: Online Help"
-	    nil))
+	  "Button2/3: Online Help")
 	 (help-echo-src
-	  (if (idlwave-help-directory)
-	      "Button2: Pop to source and back.             Button3: Source in Help window."
-	    "Button2: Pop to source and back."))
+	  "Button2: Jump to source and back | Button3: Source in Help window.")
 	 (help-echo-class
 	  "Button2: Display info about same method in superclass")
 	 (col 0)
-	 (data (list name type class (current-buffer) olh initial-class))
+	 (data (list name type class (current-buffer) nil initial-class))
 	 (km-prop (if (featurep 'xemacs) 'keymap 'local-map))
 	 (face 'idlwave-help-link-face)
 	 beg props win cnt total)
+    ;; Fix keywords, but don't add chained super-classes, since these 
+    ;; are shown separately for that super-class
     (setq keywords (idlwave-fix-keywords name type class keywords))
     (cond
      ((null entry)
@@ -7308,7 +7832,7 @@
      ((or (null name) (equal name ""))
       (error "No function or procedure call at point"))
      ((null calling-seq)
-      (error "Calling sequence of %s %s is not available" type name))
+      (error "Calling sequence of %s %s not available" type name))
      (t
       (save-excursion
 	(move-marker idlwave-rinfo-marker (point))
@@ -7332,56 +7856,62 @@
 	      (insert c)
 	      (if (equal (downcase c) (downcase class))
 		  (add-text-properties beg (point) (list 'face 'bold))
+		;; If Method exists in a different class link it
 		(if (idlwave-rinfo-assq name type c (idlwave-routines))
 		    (add-text-properties beg (point) props))))
 	    (insert "\n")))
-	(setq props (if have-olh
-			(list 'mouse-face 'highlight
-			      km-prop idlwave-rinfo-mouse-map
-			      'help-echo help-echo-use
-			      'data (cons 'usage data))))
-	(if have-sysdoc (setq props (append (list 'face face) props)))
+	(setq props (list 'mouse-face 'highlight
+			  km-prop idlwave-rinfo-mouse-map
+			  'help-echo help-echo-use
+			  'data (cons 'usage data)))
+	(if html-file (setq props (append (list 'face face 'link html-file) 
+					  props)))
 	(insert "Usage:    ")
 	(setq beg (point))
 	(insert (if class
-		    (format calling-seq class name)
-		  (format calling-seq name))
+		    (format calling-seq class name class name class name)
+		  (format calling-seq name name name name))
 		"\n")
 	(add-text-properties beg (point) props)
-
+	
 	(insert "Keywords:")
 	(if (null keywords)
 	    (insert " No keywords accepted.")
 	  (setq col 9)
 	  (mapcar
 	   (lambda (x)
-	     (if (>= (+ col 1 (length (car x)))
+	     (if (>= (+ col 1 (length (car x))) 
 		     (window-width))
 		 (progn
 		   (insert "\n         ")
 		   (setq col 9)))
 	     (insert " ")
 	     (setq beg (point)
+		   ;; Relevant keywords already have link property attached
 		   props (list 'mouse-face 'highlight
 			       km-prop idlwave-rinfo-mouse-map
 			       'data (cons 'keyword data)
 			       'help-echo help-echo-kwd
 			       'keyword (car x)))
-	     (if have-sysdoc (setq props (append (list 'face face) props)))
+	     (if system (setq props (append (list 'face face) props)))
 	     (insert (car x))
 	     (add-text-properties beg (point) props)
 	     (setq col (+ col 1 (length (car x)))))
 	   keywords))
-
+	
 	(setq cnt 1 total (length all))
+	;; Here entry is (key file (list of type-conses))
 	(while (setq entry (pop all))
 	  (setq props (list 'mouse-face 'highlight
 			    km-prop idlwave-rinfo-mouse-map
 			    'help-echo help-echo-src
-			    'source (cons (car (nth 2 entry)) (nth 1 entry))
+			    'source (list (car (car (nth 2 entry))) ;type
+					  (nth 1 entry)
+					  nil
+					  (cdr (car (nth 2 entry))))
 			    'data (cons 'source data)))
 	  (idlwave-insert-source-location
-	   (format "\n%-8s  %s"
+	   (format "\n%-8s  %s" 
 		   (if (equal cnt 1)
 		       (if (> total 1) "Sources:" "Source:")
 		     "")
@@ -7390,11 +7920,11 @@
 	  (incf cnt)
 	  (when (and all (> cnt idlwave-rinfo-max-source-lines))
 	    ;; No more source lines, please
-	    (insert (format
+	    (insert (format 
 		     "\n          Source information truncated to %d entries."
 		     idlwave-rinfo-max-source-lines))
 	    (setq all nil)))
-
+	(beginning-of-buffer)
 	(setq buffer-read-only t))
       (display-buffer "*Help*")
       (if (and (setq win (get-buffer-window "*Help*"))
@@ -7404,24 +7934,25 @@
 	      (unwind-protect
 		  (progn
 		    (select-window win)
-		    (enlarge-window (- (/ (frame-height) 2)
+		    (enlarge-window (- (/ (frame-height) 2) 
 				       (window-height)))
 		    (shrink-window-if-larger-than-buffer))
 		(select-window ww)))))))))
 
 (defun idlwave-insert-source-location (prefix entry &optional file-props)
   "Insert a source location into the routine info buffer.
-Start line with PREFIX.
-If a file name is inserted, add FILE-PROPS to it."
-
+Start line with PREFIX.  If a file name is inserted, add FILE-PROPS to
+it."
   (let* ((key (car entry))
 	 (file (nth 1 entry))
 	 (types (nth 2 entry))
-	 (shell-flag (member 'compiled types))
-	 (buffer-flag (member 'buffer types))
-	 (lib-flag (member 'lib types))
-	 (ndupl (or (and buffer-flag (idlwave-count-eq 'buffer types))
-		    (and lib-flag (idlwave-count-eq 'lib types))
+	 (shell-flag (assq 'compiled types))
+	 (buffer-flag (assq 'buffer types))
+	 (user-flag (assq 'user types))
+	 (lib-flag (assq 'lib types))
+	 (ndupl (or (and buffer-flag (idlwave-count-memq 'buffer types))
+		    (and user-flag (idlwave-count-memq 'user types))
+		    (and lib-flag (idlwave-count-memq 'lib types))
 		    1))
 	 (doflags t)
 	 beg special)
@@ -7431,30 +7962,47 @@
     (cond
      ((eq key 'system)
       (setq doflags nil)
-                                (insert "System    "))
+      (insert "System    "))
+
      ((eq key 'builtin)
       (setq doflags nil)
-                                (insert "Builtin   "))
+      (insert "Builtin   "))
+
      ((and (not file) shell-flag)
-                                (insert "Unresolved"))
-     ((null file)               (insert "ERROR"))
+      (insert "Unresolved"))
+
+     ((null file)               
+      (insert "ERROR"))
+     
+     ((idlwave-syslib-p file)
+      (if (string-match "obsolete" (file-name-directory file))
+	  (insert "Obsolete  ")
+	(insert "SystemLib ")))
+
+     ;; New special syntax: taken directly from routine-info for
+     ;; library catalog routines
+     ((setq special (or (cdr lib-flag) (cdr user-flag)))
+      (insert (format "%-10s" special)))
+
+     ;; Old special syntax: a matching regexp
      ((setq special (idlwave-special-lib-test file))
       (insert (format "%-10s" special)))
-     ((idlwave-syslib-p file)
-      (if (string-match "obsolete" (file-name-directory file))
-	                        (insert "Obsolete  ")
-                                (insert "SystemLib ")))
+     
+     ;; Catch-all with file
      ((idlwave-lib-p file)      (insert "Library   "))
+
+     ;; Sanity catch all
      (t                         (insert "Other     ")))
 
     (when doflags
       (insert (concat
 	       "  ["
-	       (if lib-flag "C" "-")
+	       (if lib-flag "L" "-")
+	       (if user-flag "C" "-")
 	       (if shell-flag "S" "-")
 	       (if buffer-flag "B" "-")
 	       "] ")))
-    (when (> ndupl 1)
+    (when (> ndupl 1) 
       (setq beg (point))
       (insert (format "(%dx) " ndupl))
       (add-text-properties beg (point) (list 'face 'bold)))
@@ -7478,7 +8026,7 @@
 		  alist nil)))
       rtn)
      (t nil))))
-
+  
 (defun idlwave-mouse-active-rinfo-right (ev)
   (interactive "e")
   (idlwave-mouse-active-rinfo ev 'right))
@@ -7497,34 +8045,35 @@
 was pressed."
   (interactive "e")
   (if ev (mouse-set-point ev))
-  (let (data id name type class buf keyword bufwin source word initial-class)
+  (let (data id name type class buf bufwin source word initial-class)
     (setq data (get-text-property (point) 'data)
 	  source (get-text-property (point) 'source)
 	  keyword (get-text-property (point) 'keyword)
+	  link (get-text-property (point) 'link)
 	  id (car data)
 	  name (nth 1 data) type (nth 2 data) class (nth 3 data)
 	  buf (nth 4 data)
 	  initial-class (nth 6 data)
 	  word (idlwave-this-word)
 	  bufwin (get-buffer-window buf t))
-    (cond ((eq id 'class)
+
+    (cond ((eq id 'class) ; Switch class being displayed
 	   (if (window-live-p bufwin) (select-window bufwin))
-	   (idlwave-display-calling-sequence
+	   (idlwave-display-calling-sequence 
 	    (idlwave-sintern-method name)
-	    type (idlwave-sintern-class word)
+	    type (idlwave-sintern-class word) 
 	    initial-class))
-	  ((eq id 'usage)
-	   (idlwave-require-online-help)
-	   (idlwave-online-help nil name type class))
-	  ((eq id 'source)
-	   (if (and right (idlwave-help-directory))
+	  ((eq id 'usage) ; Online help on this routine
+	   (idlwave-online-help link name type class))
+	  ((eq id 'source) ; Source in help or buffer
+	   (if right ; In help
 	       (let ((idlwave-extra-help-function 'idlwave-help-with-source)
 		     (idlwave-help-source-try-header nil)
-		     ;; Fake idlwave-routines, to make help find the right entry
+		     ;; Fake idlwave-routines so help will find the right entry
 		     (idlwave-routines
-		      (list (list (nth 1 data) (nth 2 data) (nth 3 data) source ""))))
-		 (idlwave-require-online-help)
+		      (list (list name type class source ""))))
 		 (idlwave-help-get-special-help name type class nil))
+	     ;; Otherwise just pop to the source
 	     (setq idlwave-popup-source (not idlwave-popup-source))
 	     (if idlwave-popup-source
 		 (condition-case err
@@ -7539,9 +8088,7 @@
 	       (goto-char (marker-position idlwave-rinfo-marker)))))
 	  ((eq id 'keyword)
 	   (if right
-	       (progn
-		 (idlwave-require-online-help)
-		 (idlwave-online-help nil name type class keyword))
+	       (idlwave-online-help link name type class keyword)
 	     (idlwave-rinfo-insert-keyword keyword buf shift))))))
 
 (defun idlwave-rinfo-insert-keyword (keyword buffer &optional shift)
@@ -7555,9 +8102,9 @@
       (setq bwin (get-buffer-window buffer)))
     (if (eq (preceding-char) ?/)
 	(insert keyword)
-      (unless (save-excursion
+      (unless (save-excursion 
 		(re-search-backward
-		 "[(,][ \t]*\\(\\$[ \t]*\\(;.*\\)?\n\\)?[ \t]*\\="
+		 "[(,][ \t]*\\(\\$[ \t]*\\(;.*\\)?\n\\)?[ \t]*\\=" 
 		 (min (- (point) 100) (point-min)) t))
 	(insert ", "))
       (if shift (insert "/"))
@@ -7608,20 +8155,21 @@
 the load path in order to find a definition.  The output of this
 command can be used to detect possible name clashes during this process."
   (idlwave-routines)  ; Make sure everything is loaded.
-  (unless idlwave-library-routines
-    (or (y-or-n-p
-	 "You don't have a library catalog.  Continue anyway? ")
+  (unless (or idlwave-user-catalog-routines idlwave-library-catalog-routines)
+    (or (y-or-n-p 
+	 "You don't have any user or library catalogs.  Continue anyway? ")
 	(error "Abort")))
   (let* ((routines (append idlwave-system-routines
 			   idlwave-compiled-routines
-			   idlwave-library-routines
+			   idlwave-library-catalog-routines
+			   idlwave-user-catalog-routines
 			   idlwave-buffer-routines
 			   nil))
 	 (km-prop (if (featurep 'xemacs) 'keymap 'local-map))
 	 (keymap (make-sparse-keymap))
 	 (props (list 'mouse-face 'highlight
 		      km-prop keymap
-		      'help-echo "Mouse2: Find source"))
+		      'help-echo "Mouse2: Find source"))      
 	 (nroutines (length (or special-routines routines)))
 	 (step (/ nroutines 99))
 	 (n 0)
@@ -7645,13 +8193,13 @@
     (message "Sorting routines...done")
 
     (define-key keymap (if (featurep 'xemacs) [(button2)] [(mouse-2)])
-      (lambda (ev)
+      (lambda (ev) 
 	(interactive "e")
 	(mouse-set-point ev)
 	(apply 'idlwave-do-find-module
 	       (get-text-property (point) 'find-args))))
     (define-key keymap [(return)]
-      (lambda ()
+      (lambda () 
 	(interactive)
 	(apply 'idlwave-do-find-module
 	       (get-text-property (point) 'find-args))))
@@ -7674,18 +8222,19 @@
 	;; Mark all twins as dealt with
 	(setq done (append twins done))
 	(when (or (> (length dtwins) 1)
-		  (> (idlwave-count-eq 'lib (nth 2 (car dtwins))) 1)
-		  (> (idlwave-count-eq 'buffer (nth 2 (car dtwins))) 1))
+		  (> (idlwave-count-memq 'lib (nth 2 (car dtwins))) 1)
+		  (> (idlwave-count-memq 'user (nth 2 (car dtwins))) 1)
+		  (> (idlwave-count-memq 'buffer (nth 2 (car dtwins))) 1))
 	  (incf cnt)
 	  (insert (format "\n%s%s"
-			  (idlwave-make-full-name (nth 2 routine) (car routine))
+			  (idlwave-make-full-name (nth 2 routine) 
+						  (car routine))
 			  (if (eq (nth 1 routine) 'fun) "()" "")))
 	  (while (setq twin (pop dtwins))
 	    (setq props1 (append (list 'find-args
-				       (list (nth 0 routine)
-					     (nth 1 routine)
-					     (nth 2 routine)
-					     (cons 'lib (nth 1 twin))))
+				       (list (nth 0 routine) 
+					     (nth 1 routine) 
+					     (nth 2 routine)))
 				 props))
 	    (idlwave-insert-source-location "\n   - " twin props1))))
       (goto-char (point-min))
@@ -7701,16 +8250,13 @@
 (defun idlwave-print-source (routine)
   (let* ((source (nth 3 routine))
 	 (stype (car source))
-	 (sfile (cdr source)))
-    (if (and (eq stype 'lib) sfile)
-	(progn
-	  (setq sfile (idlwave-expand-lib-file-name sfile))
-	  (if (idlwave-syslib-p sfile) (setq stype 'syslib))))
+	 (sfile (idlwave-routine-source-file source)))
+    (if (idlwave-syslib-p sfile) (setq stype 'syslib))
     (if (and (eq stype 'compiled)
 	     (or (not (stringp sfile))
 		 (not (string-match "\\S-" sfile))))
 	(setq stype 'unresolved))
-    (princ (format "      %-10s %s\n"
+    (princ (format "      %-10s %s\n" 
 		   stype
 		   (if sfile sfile "No source code available")))))
 
@@ -7729,52 +8275,56 @@
 	       (eq type (nth 1 candidate))
 	       (eq class (nth 2 candidate)))
 	  (push candidate twins)))
-    (if (setq candidate (idlwave-rinfo-assq name type class
+    (if (setq candidate (idlwave-rinfo-assq name type class 
 					    idlwave-unresolved-routines))
 	(push candidate twins))
     (cons entry (nreverse twins))))
 
 (defun idlwave-study-twins (entries)
-  "Return dangerous twins of first entry in TWINS.
-Dangerous twins are routines with same name, but in different files
-on the load path.
-If a file is in the system library and has an entry in the
-`idlwave-system-routines' list, we omit the latter because many IDL
-routines are implemented as library routines."
+  "Return dangerous twins of first entry in ENTRIES.  
+Dangerous twins are routines with same name, but in different files on
+the load path.  If a file is in the system library and has an entry in
+the `idlwave-system-routines' list, we omit the latter as
+non-dangerous because many IDL routines are implemented as library
+routines, and may have been scanned."
   (let* ((entry (car entries))
-	 (name (car entry))      ;
+	 (name (car entry))      ; 
 	 (type (nth 1 entry))    ; Must be bound for
 	 (class (nth 2 entry))   ;  idlwave-routine-twin-compare
 	 (cnt 0)
-	 source type file thefile alist syslibp key)
+	 source type type-cons file alist syslibp key)
     (while (setq entry (pop entries))
       (incf cnt)
       (setq source (nth 3 entry)
 	    type (car source)
-	    file (cdr source))
-      (if (eq type 'lib)
-	  (setq file (idlwave-expand-lib-file-name file)))
+	    type-cons (cons type (nth 3 source))
+	    file (idlwave-routine-source-file source))
+
       ;; Make KEY to index entry properly
       (setq key (cond ((eq type 'system) type)
 		      (file (file-truename file))
 		      (t 'unresolved)))
-      (if (and file
+
+      ;; Check for an entry in the system library
+      (if (and file 
 	       (not syslibp)
 	       (idlwave-syslib-p file))
-	  ;; We do have an entry in the system library
 	  (setq syslibp t))
-
-      (setq thefile (or thefile file))
+      
+      ;; If there's more than one matching entry for the same file, just
+      ;; append the type-cons to the type list.
       (if (setq entry (assoc key alist))
-	  (push type (nth 2 entry))
-	(push (list key file (list type)) alist)))
-
+	  (push type-cons (nth 2 entry))
+	(push (list key file (list type-cons)) alist)))
+    
     (setq alist (nreverse alist))
-
+    
     (when syslibp
-      ;; File is system *library* - remove any system entry
-      (setq alist (delq (assoc 'system alist) alist)))
-
+      ;; File is in system *library* - remove any 'system entry
+      (setq alist (delq (assq 'system alist) alist)))
+    
+    ;; If 'system remains and we've scanned the syslib, it's a builtin
+    ;; (rather than a !DIR/lib/.pro file bundled as source).
     (when (and (idlwave-syslib-scanned-p)
 	       (setq entry (assoc 'system alist)))
       (setcar entry 'builtin))
@@ -7809,23 +8359,22 @@
      ((not (eq type (nth 1 b)))
       ;; Type decides
       (< (if (eq type 'fun) 1 0) (if (eq (nth 1 b) 'fun) 1 0)))
-     (t
+     (t	
       ;; A and B are twins - so the decision is more complicated.
       ;; Call twin-compare with the proper arguments.
       (idlwave-routine-entry-compare-twins a b)))))
 
 (defun idlwave-routine-entry-compare-twins (a b)
-  "Compare two routine entries, under the assumption that they are twins.
-This basically calles `idlwave-routine-twin-compare' with the correct args."
-  (let ((name (car a)) (type (nth 1 a)) (class (nth 2 a)) ; needed outside
-	(atype (car (nth 3 a)))
-	(btype (car (nth 3 b)))
-	(afile (cdr (nth 3 a)))
-	(bfile (cdr (nth 3 b))))
-    (if (eq atype 'lib)
-	(setq afile (idlwave-expand-lib-file-name afile)))
-    (if (eq btype 'lib)
-	(setq bfile (idlwave-expand-lib-file-name bfile)))
+  "Compare two routine entries, under the assumption that they are
+twins.  This basically calls `idlwave-routine-twin-compare' with the
+correct args."
+  (let* ((name (car a)) (type (nth 1 a)) (class (nth 2 a)) ; needed outside
+	 (asrc (nth 3 a))
+	 (atype (car asrc))
+	 (bsrc (nth 3 b))
+	 (btype (car bsrc))
+	 (afile (idlwave-routine-source-file asrc))
+	 (bfile (idlwave-routine-source-file bsrc)))
     (idlwave-routine-twin-compare
      (if (stringp afile)
 	 (list (file-truename afile) afile (list atype))
@@ -7860,8 +8409,10 @@
 	 (bbufp (memq 'buffer btypes))
 	 ;; On search path?
 	 (tpath-alist (idlwave-true-path-alist))
-	 (apathp (assoc akey tpath-alist))
-	 (bpathp (assoc bkey tpath-alist))
+	 (apathp (and (stringp akey)
+		      (assoc (file-name-directory akey) tpath-alist)))
+	 (bpathp (and (stringp bkey) 
+		      (assoc (file-name-directory bkey) tpath-alist)))
 	 ;; How early on search path?  High number means early since we
 	 ;; measure the tail of the path list
 	 (anpath (length (memq apathp tpath-alist)))
@@ -7895,6 +8446,11 @@
      ((> anpath bnpath)                t)	; Who is first on path?
      (t                                nil))))	; Default
 
+(defun idlwave-routine-source-file (source)
+  (if (nth 2 source) 
+      (expand-file-name (nth 1 source) (nth 2 source))
+    (nth 1 source)))
+
 (defun idlwave-downcase-safe (string)
   "Donwcase if string, else return unchanged."
   (if (stringp string)
@@ -7905,8 +8461,12 @@
   "How often is ELT in LIST?"
   (length (delq nil (mapcar (lambda (x) (eq x elt)) list))))
 
+(defun idlwave-count-memq (elt alist)
+  "How often is ELT a key in ALIST?"
+  (length (delq nil (mapcar (lambda (x) (eq (car x) elt)) alist))))
+
 (defun idlwave-syslib-p (file)
-  "Non-nil of FILE is in the system library."
+  "Non-nil if FILE is in the system library."
   (let* ((true-syslib (file-name-as-directory
 		       (file-truename
 			(expand-file-name "lib" (idlwave-sys-dir)))))
@@ -7918,9 +8478,20 @@
   (let ((true-dir (file-name-directory (file-truename file))))
     (assoc true-dir (idlwave-true-path-alist))))
 
+(defun idlwave-path-alist-add-flag (list-entry flag)
+  "Add a flag to the path list entry, if not set."
+  (let ((flags (cdr list-entry)))
+    (add-to-list 'flags flag)
+    (setcdr list-entry flags)))
+
+(defun idlwave-path-alist-remove-flag (list-entry flag)
+  "Remove a flag to the path list entry, if set."
+  (let ((flags (delq flag (cdr list-entry))))
+    (setcdr list-entry flags)))
+
 (defun idlwave-true-path-alist ()
   "Return `idlwave-path-alist' alist with true-names.
-Info is cached, but relies on the functons setting `idlwave-path-alist'
+Info is cached, but relies on the functions setting `idlwave-path-alist'
 to reset the variable `idlwave-true-path-alist' to nil."
   (or idlwave-true-path-alist
       (setq idlwave-true-path-alist
@@ -7966,7 +8537,8 @@
   (forward-sexp 2)
   (forward-sexp -1)
   (let ((begin (point)))
-    (re-search-forward "[a-zA-Z][a-zA-Z0-9$_]+\\(::[a-zA-Z][a-zA-Z0-9$_]+\\)?")
+    (re-search-forward 
+     "[a-zA-Z_][a-zA-Z0-9$_]+\\(::[a-zA-Z_][a-zA-Z0-9$_]+\\)?")
     (if (fboundp 'buffer-substring-no-properties)
         (buffer-substring-no-properties begin (point))
       (buffer-substring begin (point)))))
@@ -7982,7 +8554,7 @@
 		 'imenu)
 	     (error nil)))))
 
-;; Here we kack func-menu.el in order to support this new mode.
+;; Here we hack func-menu.el in order to support this new mode.
 ;; The latest versions of func-menu.el already have this stuff in, so
 ;; we hack only if it is not already there.
 (when (fboundp 'eval-after-load)
@@ -8005,12 +8577,12 @@
   (start-process "idldeclient" nil
 		 idlwave-shell-explicit-file-name "-c" "-e"
                  (buffer-file-name) "&"))
-
+                
 (defun idlwave-launch-idlhelp ()
   "Start the IDLhelp application."
   (interactive)
   (start-process "idlhelp" nil idlwave-help-application))
-
+ 
 ;; Menus - using easymenu.el
 (defvar idlwave-mode-menu-def
   `("IDLWAVE"
@@ -8065,15 +8637,15 @@
       ["9 Class Name"  idlwave-complete-class t]))
     ("Routine Info"
      ["Show Routine Info" idlwave-routine-info t]
-     ["Online Context Help" idlwave-context-help (idlwave-help-directory)]
+     ["Online Context Help" idlwave-context-help t]
      "--"
      ["Find Routine Source" idlwave-find-module t]
      ["Resolve Routine" idlwave-resolve (featurep 'idlw-shell)]
      "--"
      ["Update Routine Info" idlwave-update-routine-info t]
      "--"
-     "IDL Library Catalog"
-     ["Select Catalog Directories" (idlwave-create-libinfo-file nil) t]
+     "IDL User Catalog"
+     ["Select Catalog Directories" (idlwave-create-user-catalog-file nil) t]
      ["Scan Directories" (idlwave-update-routine-info '(16))
       (and idlwave-path-alist (not idlwave-catalog-process))]
      ["Scan Directories &" (idlwave-update-routine-info '(64))
@@ -8097,7 +8669,7 @@
     ("Customize"
      ["Browse IDLWAVE Group" idlwave-customize t]
      "--"
-     ["Build Full Customize Menu" idlwave-create-customize-menu
+     ["Build Full Customize Menu" idlwave-create-customize-menu 
       (fboundp 'customize-menu-create)])
     ("Documentation"
      ["Describe Mode" describe-mode t]
@@ -8114,22 +8686,22 @@
   '("Debug"
     ["Start IDL shell" idlwave-shell t]
     ["Save and .RUN buffer" idlwave-shell-save-and-run
-     (and (boundp 'idlwave-shell-automatic-start)
+     (and (boundp 'idlwave-shell-automatic-start) 
 	  idlwave-shell-automatic-start)]))
 
 (if (or (featurep 'easymenu) (load "easymenu" t))
     (progn
-      (easy-menu-define idlwave-mode-menu idlwave-mode-map
-			"IDL and WAVE CL editing menu"
+      (easy-menu-define idlwave-mode-menu idlwave-mode-map 
+			"IDL and WAVE CL editing menu" 
 			idlwave-mode-menu-def)
-      (easy-menu-define idlwave-mode-debug-menu idlwave-mode-map
-			"IDL and WAVE CL editing menu"
+      (easy-menu-define idlwave-mode-debug-menu idlwave-mode-map 
+			"IDL and WAVE CL editing menu" 
 			idlwave-mode-debug-menu-def)))
 
 (defun idlwave-customize ()
   "Call the customize function with idlwave as argument."
   (interactive)
-  ;; Try to load the code for the shell, so that we can customize it
+  ;; Try to load the code for the shell, so that we can customize it 
   ;; as well.
   (or (featurep 'idlw-shell)
       (load "idlw-shell" t))
@@ -8140,11 +8712,11 @@
   (interactive)
   (if (fboundp 'customize-menu-create)
       (progn
-	;; Try to load the code for the shell, so that we can customize it
+	;; Try to load the code for the shell, so that we can customize it 
 	;; as well.
 	(or (featurep 'idlw-shell)
 	    (load "idlw-shell" t))
-	(easy-menu-change
+	(easy-menu-change 
 	 '("IDLWAVE") "Customize"
 	 `(["Browse IDLWAVE group" idlwave-customize t]
 	   "--"
@@ -8192,7 +8764,7 @@
   (let ((table (symbol-value 'idlwave-mode-abbrev-table))
 	abbrevs
 	str rpl func fmt (len-str 0) (len-rpl 0))
-    (mapatoms
+    (mapatoms 
      (lambda (sym)
        (if (symbol-value sym)
 	   (progn
@@ -8218,7 +8790,7 @@
     (with-output-to-temp-buffer "*Help*"
       (if arg
 	  (progn
-	    (princ "Abbreviations and Actions in IDLWAVE-Mode\n")
+	    (princ "Abbreviations and Actions in IDLWAVE-Mode\n") 
 	    (princ "=========================================\n\n")
 	    (princ (format fmt "KEY" "REPLACE" "HOOK"))
 	    (princ (format fmt "---" "-------" "----")))
@@ -8241,19 +8813,16 @@
 ;; Add .pro files to speedbar for support, if it's loaded
 (eval-after-load "speedbar" '(speedbar-add-supported-extension ".pro"))
 
-;; Try to load online help, but catch any errors.
-(condition-case nil
-    (idlwave-require-online-help)
-  (error nil))
-
 ;; Set an idle timer to load the routine info.
 ;; Will only work on systems which support this.
 (or idlwave-routines (idlwave-start-load-rinfo-timer))
 
+;;;###autoload(add-to-list 'auto-mode-alist '("\\.[Pp][Rr][Oo]\\'" . idlwave-mode))
+
 ;; Run the hook
 (run-hooks 'idlwave-load-hook)
 
 (provide 'idlwave)
 
-;;; arch-tag: f77f3b0c-c37c-424f-a328-0886fd42b6fb
+;; arch-tag: f77f3b0c-c37c-424f-a328-0886fd42b6fb
 ;;; idlwave.el ends here
--- a/lisp/progmodes/python.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/progmodes/python.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1235,15 +1235,17 @@
   "Switch to the Python process buffer.
 With prefix arg, position cursor at end of buffer."
   (interactive "P")
-  (if (get-buffer python-buffer)
-      (pop-to-buffer python-buffer)
-    (error "No current process buffer.  See variable `python-buffer'"))
+  ;; Start python unless we have a buffer.
+  (unless (and python-buffer
+	       (get-buffer python-buffer))
+    (run-python nil t))
+  (pop-to-buffer python-buffer)
+  ;; Make extra sure python is running in this buffer.
+  (python-proc)
   (when eob-p
     (push-mark)
     (goto-char (point-max))))
 
-(add-to-list 'debug-ignored-errors "^No current process buffer.")
-
 (defun python-send-region-and-go (start end)
   "Send the region to the inferior Python process.
 Then switch to the process buffer."
--- a/lisp/ps-print.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/ps-print.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1443,115 +1443,115 @@
 
 ;;; Code:
 
-(eval-and-compile
-  (require 'lpr)
-
-  (or (featurep 'lisp-float-type)
-      (error "`ps-print' requires floating point support"))
-
-
-  (defvar ps-print-emacs-type
-    (let ((case-fold-search t))
-      (cond ((string-match "XEmacs" emacs-version) 'xemacs)
-	    ((string-match "Lucid" emacs-version)
-	     (error "`ps-print' doesn't support Lucid"))
-	    ((string-match "Epoch" emacs-version)
-	     (error "`ps-print' doesn't support Epoch"))
-	    (t
-	     (unless (and (boundp 'emacs-major-version)
-			  (> emacs-major-version 19))
-	       (error "`ps-print' only supports Emacs 20 and higher"))
-	     'emacs))))
-
-
-  ;; For Emacs 20.2 and the earlier version.
-
-  (or (fboundp 'set-buffer-multibyte)
-      (defun set-buffer-multibyte (arg)
-	(setq enable-multibyte-characters arg)))
-
-  (or (fboundp 'string-as-unibyte)
-      (defun string-as-unibyte (arg) arg))
-
-  (or (fboundp 'string-as-multibyte)
-      (defun string-as-multibyte (arg) arg))
-
-  (or (fboundp 'char-charset)
-      (defun char-charset (arg) 'ascii))
-
-  (or (fboundp 'charset-after)
-      (defun charset-after (&optional arg)
-	(char-charset (char-after arg))))
-
-
-  ;; GNU Emacs
-  (or (fboundp 'line-beginning-position)
-      (defun line-beginning-position (&optional n)
-	(save-excursion
-	  (and n (/= n 1) (forward-line (1- n)))
-	  (beginning-of-line)
-	  (point))))
-
-
-  ;; to avoid compilation gripes
-
-  ;; XEmacs
-  (defalias 'ps-x-color-instance-p              'color-instance-p)
-  (defalias 'ps-x-color-instance-rgb-components 'color-instance-rgb-components)
-  (defalias 'ps-x-color-name                    'color-name)
-  (defalias 'ps-x-color-specifier-p             'color-specifier-p)
-  (defalias 'ps-x-copy-coding-system            'copy-coding-system)
-  (defalias 'ps-x-device-class                  'device-class)
-  (defalias 'ps-x-extent-end-position           'extent-end-position)
-  (defalias 'ps-x-extent-face                   'extent-face)
-  (defalias 'ps-x-extent-priority               'extent-priority)
-  (defalias 'ps-x-extent-start-position         'extent-start-position)
-  (defalias 'ps-x-face-font-instance            'face-font-instance)
-  (defalias 'ps-x-find-coding-system            'find-coding-system)
-  (defalias 'ps-x-font-instance-properties      'font-instance-properties)
-  (defalias 'ps-x-make-color-instance           'make-color-instance)
-  (defalias 'ps-x-map-extents                   'map-extents)
-
-  ;; GNU Emacs
-  (defalias 'ps-e-face-bold-p         'face-bold-p)
-  (defalias 'ps-e-face-italic-p       'face-italic-p)
-  (defalias 'ps-e-next-overlay-change 'next-overlay-change)
-  (defalias 'ps-e-overlays-at         'overlays-at)
-  (defalias 'ps-e-overlay-get         'overlay-get)
-  (defalias 'ps-e-overlay-end         'overlay-end)
-  (defalias 'ps-e-x-color-values      'x-color-values)
-  (defalias 'ps-e-color-values        'color-values)
-  (if (fboundp 'find-composition)
-      (defalias 'ps-e-find-composition 'find-composition)
-    (defalias 'ps-e-find-composition 'ignore))
-
-
-  (defconst ps-windows-system
-    (memq system-type '(emx win32 w32 mswindows ms-dos windows-nt)))
-  (defconst ps-lp-system
-    (memq system-type '(usg-unix-v dgux hpux irix)))
-
-
-  (defun ps-xemacs-color-name (color)
-    (if (ps-x-color-specifier-p color)
-	(ps-x-color-name color)
-      color))
-
-
-  (cond ((eq ps-print-emacs-type 'emacs) ; emacs
-	 (defvar mark-active nil)
-	 (defun ps-mark-active-p ()
-	   mark-active)
-	 (defalias 'ps-face-foreground-name 'face-foreground)
-	 (defalias 'ps-face-background-name 'face-background)
-	 )
-	(t				; xemacs
-	 (defalias 'ps-mark-active-p 'region-active-p)
-	 (defun ps-face-foreground-name (face)
-	   (ps-xemacs-color-name (face-foreground face)))
-	 (defun ps-face-background-name (face)
-	   (ps-xemacs-color-name (face-background face)))
-	 )))
+
+(require 'lpr)
+
+(or (featurep 'lisp-float-type)
+    (error "`ps-print' requires floating point support"))
+
+
+(defvar ps-print-emacs-type
+  (let ((case-fold-search t))
+    (cond ((string-match "XEmacs" emacs-version) 'xemacs)
+	  ((string-match "Lucid" emacs-version)
+	   (error "`ps-print' doesn't support Lucid"))
+	  ((string-match "Epoch" emacs-version)
+	   (error "`ps-print' doesn't support Epoch"))
+	  (t
+	   (unless (and (boundp 'emacs-major-version)
+			(> emacs-major-version 19))
+	     (error "`ps-print' only supports Emacs 20 and higher"))
+	   'emacs))))
+
+
+;; For Emacs 20.2 and the earlier version.
+
+(or (fboundp 'set-buffer-multibyte)
+    (defun set-buffer-multibyte (arg)
+      (setq enable-multibyte-characters arg)))
+
+(or (fboundp 'string-as-unibyte)
+    (defun string-as-unibyte (arg) arg))
+
+(or (fboundp 'string-as-multibyte)
+    (defun string-as-multibyte (arg) arg))
+
+(or (fboundp 'char-charset)
+    (defun char-charset (arg) 'ascii))
+
+(or (fboundp 'charset-after)
+    (defun charset-after (&optional arg)
+      (char-charset (char-after arg))))
+
+
+;; GNU Emacs
+(or (fboundp 'line-beginning-position)
+    (defun line-beginning-position (&optional n)
+      (save-excursion
+	(and n (/= n 1) (forward-line (1- n)))
+	(beginning-of-line)
+	(point))))
+
+
+;; to avoid compilation gripes
+
+;; XEmacs
+(defalias 'ps-x-color-instance-p              'color-instance-p)
+(defalias 'ps-x-color-instance-rgb-components 'color-instance-rgb-components)
+(defalias 'ps-x-color-name                    'color-name)
+(defalias 'ps-x-color-specifier-p             'color-specifier-p)
+(defalias 'ps-x-copy-coding-system            'copy-coding-system)
+(defalias 'ps-x-device-class                  'device-class)
+(defalias 'ps-x-extent-end-position           'extent-end-position)
+(defalias 'ps-x-extent-face                   'extent-face)
+(defalias 'ps-x-extent-priority               'extent-priority)
+(defalias 'ps-x-extent-start-position         'extent-start-position)
+(defalias 'ps-x-face-font-instance            'face-font-instance)
+(defalias 'ps-x-find-coding-system            'find-coding-system)
+(defalias 'ps-x-font-instance-properties      'font-instance-properties)
+(defalias 'ps-x-make-color-instance           'make-color-instance)
+(defalias 'ps-x-map-extents                   'map-extents)
+
+;; GNU Emacs
+(defalias 'ps-e-face-bold-p         'face-bold-p)
+(defalias 'ps-e-face-italic-p       'face-italic-p)
+(defalias 'ps-e-next-overlay-change 'next-overlay-change)
+(defalias 'ps-e-overlays-at         'overlays-at)
+(defalias 'ps-e-overlay-get         'overlay-get)
+(defalias 'ps-e-overlay-end         'overlay-end)
+(defalias 'ps-e-x-color-values      'x-color-values)
+(defalias 'ps-e-color-values        'color-values)
+(if (fboundp 'find-composition)
+    (defalias 'ps-e-find-composition 'find-composition)
+  (defalias 'ps-e-find-composition 'ignore))
+
+
+(defconst ps-windows-system
+  (memq system-type '(emx win32 w32 mswindows ms-dos windows-nt)))
+(defconst ps-lp-system
+  (memq system-type '(usg-unix-v dgux hpux irix)))
+
+
+(defun ps-xemacs-color-name (color)
+  (if (ps-x-color-specifier-p color)
+      (ps-x-color-name color)
+    color))
+
+
+(cond ((featurep 'xemacs)		; xemacs
+       (defalias 'ps-mark-active-p 'region-active-p)
+       (defun ps-face-foreground-name (face)
+	 (ps-xemacs-color-name (face-foreground face)))
+       (defun ps-face-background-name (face)
+	 (ps-xemacs-color-name (face-background face)))
+       )
+      (t				; emacs
+       (defvar mark-active nil)
+       (defun ps-mark-active-p ()
+	 mark-active)
+       (defalias 'ps-face-foreground-name 'face-foreground)
+       (defalias 'ps-face-background-name 'face-background)
+       ))
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1563,12 +1563,14 @@
 (defgroup postscript nil
   "PostScript Group"
   :tag "PostScript"
+  :version "20"
   :group 'emacs)
 
 (defgroup ps-print nil
   "PostScript generator for Emacs"
   :link '(emacs-library-link :tag "Source Lisp File" "ps-print.el")
   :prefix "ps-"
+  :version "20"
   :group 'wp
   :group 'postscript)
 
@@ -1576,36 +1578,42 @@
   "Horizontal page layout"
   :prefix "ps-"
   :tag "Horizontal"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-vertical nil
   "Vertical page layout"
   :prefix "ps-"
   :tag "Vertical"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-headers nil
   "Headers & footers layout"
   :prefix "ps-"
   :tag "Header & Footer"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-font nil
   "Fonts customization"
   :prefix "ps-"
   :tag "Font"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-color nil
   "Color customization"
   :prefix "ps-"
   :tag "Color"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-face nil
   "Faces customization"
   :prefix "ps-"
   :tag "PS Faces"
+  :version "20"
   :group 'ps-print
   :group 'faces)
 
@@ -1613,36 +1621,42 @@
   "N-up customization"
   :prefix "ps-"
   :tag "N-Up"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-zebra nil
   "Zebra customization"
   :prefix "ps-"
   :tag "Zebra"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-background nil
   "Background customization"
   :prefix "ps-"
   :tag "Background"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-printer '((lpr custom-group))
   "Printer customization"
   :prefix "ps-"
   :tag "Printer"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-page nil
   "Page customization"
   :prefix "ps-"
   :tag "Page"
+  :version "20"
   :group 'ps-print)
 
 (defgroup ps-print-miscellany nil
   "Miscellany customization"
   :prefix "ps-"
   :tag "Miscellany"
+  :version "20"
   :group 'ps-print)
 
 
@@ -1669,6 +1683,7 @@
 		 :tag "Error Handler Message"
 		 (const none)   (const paper)
 		 (const system) (const paper-and-system))
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-user-defined-prologue nil
@@ -1700,6 +1715,7 @@
   :type '(choice :menu-tag "User Defined Prologue"
 		 :tag "User Defined Prologue"
 		 (const :tag "none" nil) string symbol)
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-print-prologue-header nil
@@ -1729,6 +1745,7 @@
   :type '(choice :menu-tag "Prologue Header"
 		 :tag "Prologue Header"
 		 (const :tag "none" nil) string symbol)
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-printer-name (and (boundp 'printer-name)
@@ -1760,6 +1777,7 @@
 		 (const :tag "No Printer Name" t)
 		 (file :tag "Print to file")
 		 (string :tag "Pipe to ps-lpr-command"))
+  :version "20"
   :group 'ps-print-printer)
 
 (defcustom ps-printer-name-option
@@ -1803,6 +1821,7 @@
 the destination for output; any other program is treated like `lpr' except that
 an explicit filename is given as the last argument."
   :type 'string
+  :version "20"
   :group 'ps-print-printer)
 
 (defcustom ps-lpr-switches lpr-switches
@@ -1811,6 +1830,7 @@
 		 (choice :menu-tag "PostScript lpr Switch"
 			 :tag "PostScript lpr Switch"
 			 string symbol (repeat sexp)))
+  :version "20"
   :group 'ps-print-printer)
 
 (defcustom ps-print-region-function nil
@@ -1818,6 +1838,7 @@
 See definition of `call-process-region' for calling conventions.  The fourth
 and the sixth arguments are both nil."
   :type '(choice (const nil) function)
+  :version "20"
   :group 'ps-print-printer)
 
 (defcustom ps-manual-feed nil
@@ -1825,12 +1846,14 @@
 
 If it's nil, automatic feeding takes place."
   :type 'boolean
+  :version "20"
   :group 'ps-print-printer)
 
 (defcustom ps-end-with-control-d (and ps-windows-system t)
   "*Non-nil means insert C-d at end of PostScript file generated."
   :version "21.1"
   :type 'boolean
+  :version "20"
   :group 'ps-print-printer)
 
 ;;; Page layout
@@ -1874,6 +1897,7 @@
 		       (number :tag "Width")
 		       (number :tag "Height")
 		       (string :tag "Media")))
+  :version "20"
   :group 'ps-print-page)
 
 ;;;###autoload
@@ -1887,6 +1911,7 @@
 				 nil
 			       (widget-put wid :error "Unknown paper size")
 			       wid)))
+  :version "20"
   :group 'ps-print-page)
 
 (defcustom ps-warn-paper-type t
@@ -1894,11 +1919,13 @@
 
 It's used when `ps-spool-config' is set to `setpagedevice'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-page)
 
 (defcustom ps-landscape-mode nil
   "*Non-nil means print in landscape mode."
   :type 'boolean
+  :version "20"
   :group 'ps-print-page)
 
 (defcustom ps-print-upside-down nil
@@ -1931,6 +1958,7 @@
 			(cons :tag "Range"
 			      (integer :tag "From")
 			      (integer :tag "To"))))
+  :version "20"
   :group 'ps-print-page)
 
 (defcustom ps-even-or-odd-pages nil
@@ -1989,6 +2017,7 @@
 		 (const :tag "Only Odd Pages" odd-page)
 		 (const :tag "Only Even Sheets" even-sheet)
 		 (const :tag "Only Odd Sheets" odd-sheet))
+  :version "20"
   :group 'ps-print-page)
 
 (defcustom ps-print-control-characters 'control-8-bit
@@ -2020,6 +2049,7 @@
 		 :tag "Control Char"
 		 (const 8-bit)   (const control-8-bit)
 		 (const control) (const :tag "nil" nil))
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-n-up-printing 1
@@ -2035,16 +2065,19 @@
 	       wid :error
 	       "Number of pages per sheet paper must be between 1 and 100.")
 	      wid)))
+  :version "20"
   :group 'ps-print-n-up)
 
 (defcustom ps-n-up-margin (/ (* 72  1.0) 2.54) ; 1 cm
   "*Specify the margin in points between the sheet border and n-up printing."
   :type 'number
+  :version "20"
   :group 'ps-print-n-up)
 
 (defcustom ps-n-up-border-p t
   "*Non-nil means a border is drawn around each page."
   :type 'boolean
+  :version "20"
   :group 'ps-print-n-up)
 
 (defcustom ps-n-up-filling 'left-top
@@ -2076,23 +2109,27 @@
 		 (const right-top) (const right-bottom)
 		 (const top-left)  (const bottom-left)
 		 (const top-right) (const bottom-right))
+  :version "20"
   :group 'ps-print-n-up)
 
 (defcustom ps-number-of-columns (if ps-landscape-mode 2 1)
   "*Specify the number of columns."
   :type 'number
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-zebra-stripes nil
   "*Non-nil means print zebra stripes.
 See also documentation for `ps-zebra-stripe-height' and `ps-zebra-color'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-zebra)
 
 (defcustom ps-zebra-stripe-height 3
   "*Number of zebra stripe lines.
 See also documentation for `ps-zebra-stripes' and `ps-zebra-color'."
   :type 'number
+  :version "20"
   :group 'ps-print-zebra)
 
 (defcustom ps-zebra-color 0.95
@@ -2106,6 +2143,7 @@
 		       (number :tag "Red")
 		       (number :tag "Green")
 		       (number :tag "Blue")))
+  :version "20"
   :group 'ps-print-zebra)
 
 (defcustom ps-zebra-stripe-follow nil
@@ -2149,11 +2187,13 @@
 		 (const :tag "Continue on Next Page" follow)
 		 (const :tag "Print Only Full Stripe" full)
 		 (const :tag "Continue on Full Stripe" full-follow))
+  :version "20"
   :group 'ps-print-zebra)
 
 (defcustom ps-line-number nil
   "*Non-nil means print line number."
   :type 'boolean
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-line-number-step 1
@@ -2183,6 +2223,7 @@
 		 :tag "Line Number Step"
 		 (integer :tag "Step Interval")
 		 (const :tag "Synchronize Zebra" zebra))
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-line-number-start 1
@@ -2212,6 +2253,7 @@
      value of `ps-zebra-strip-height' inclusive.  Use this combination if you
      wish that line number be relative to zebra stripes."
   :type '(integer :tag "Start Step Interval")
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-print-background-image nil
@@ -2258,6 +2300,7 @@
 			  (cons :tag "Range"
 				(integer :tag "From")
 				(integer :tag "To"))))))
+  :version "20"
   :group 'ps-print-background)
 
 (defcustom ps-print-background-text nil
@@ -2309,6 +2352,7 @@
 			  (cons :tag "Range"
 				(integer :tag "From")
 				(integer :tag "To"))))))
+  :version "20"
   :group 'ps-print-background)
 
 ;;; Horizontal layout
@@ -2322,16 +2366,19 @@
 (defcustom ps-left-margin   (/ (* 72  2.0) 2.54) ;   2 cm
   "*Left margin in points (1/72 inch)."
   :type 'number
+  :version "20"
   :group 'ps-print-horizontal)
 
 (defcustom ps-right-margin  (/ (* 72  2.0) 2.54) ;   2 cm
   "*Right margin in points (1/72 inch)."
   :type 'number
+  :version "20"
   :group 'ps-print-horizontal)
 
 (defcustom ps-inter-column  (/ (* 72  2.0) 2.54) ;   2 cm
   "*Horizontal space between columns in points (1/72 inch)."
   :type 'number
+  :version "20"
   :group 'ps-print-horizontal)
 
 ;;; Vertical layout
@@ -2351,16 +2398,19 @@
 (defcustom ps-bottom-margin (/ (* 72  1.5) 2.54) ; 1.5 cm
   "*Bottom margin in points (1/72 inch)."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 (defcustom ps-top-margin    (/ (* 72  1.5) 2.54) ; 1.5 cm
   "*Top margin in points (1/72 inch)."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 (defcustom ps-header-offset (/ (* 72  1.0) 2.54) ; 1.0 cm
   "*Vertical space in points (1/72 inch) between the main text and the header."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 (defcustom ps-header-line-pad 0.15
@@ -2368,11 +2418,13 @@
 The insertion is done between the header frame and the text it contains,
 both in the vertical and horizontal directions."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 (defcustom ps-footer-offset (/ (* 72  1.0) 2.54) ; 1.0 cm
   "*Vertical space in points (1/72 inch) between the main text and the footer."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 (defcustom ps-footer-line-pad 0.15
@@ -2380,6 +2432,7 @@
 The insertion is done between the footer frame and the text it contains,
 both in the vertical and horizontal directions."
   :type 'number
+  :version "20"
   :group 'ps-print-vertical)
 
 ;;; Header/Footer setup
@@ -2390,11 +2443,13 @@
 buffer is visiting a file, the file's directory.  Headers are customizable by
 changing variables `ps-left-header' and `ps-right-header'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-print-header-frame t
   "*Non-nil means draw a gaudy frame around the header."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-header-frame-alist
@@ -2474,11 +2529,13 @@
 				      (number :tag "Red")
 				      (number :tag "Green")
 				      (number :tag "Blue"))))))
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-header-lines 2
   "*Number of lines to display in page header, when generating PostScript."
   :type 'integer
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-print-footer nil
@@ -2486,14 +2543,14 @@
 By default, the footer displays page number.
 Footers are customizable by changing variables `ps-left-footer' and
 `ps-right-footer'."
+  :type 'boolean
   :version "21.1"
-  :type 'boolean
   :group 'ps-print-headers)
 
 (defcustom ps-print-footer-frame t
   "*Non-nil means draw a gaudy frame around the footer."
+  :type 'boolean
   :version "21.1"
-  :type 'boolean
   :group 'ps-print-headers)
 
 (defcustom ps-footer-frame-alist
@@ -2508,7 +2565,6 @@
 `ps-get', `ps-put' and `ps-del' functions (see them for documentation).
 
 See also `ps-header-frame-alist' for documentation."
-  :version "21.1"
   :type '(repeat
 	  (choice :menu-tag "Header Frame Element"
 		  :tag ""
@@ -2555,12 +2611,13 @@
 				      (number :tag "Red")
 				      (number :tag "Green")
 				      (number :tag "Blue"))))))
+  :version "21.1"
   :group 'ps-print-headers)
 
 (defcustom ps-footer-lines 2
   "*Number of lines to display in page footer, when generating PostScript."
+  :type 'integer
   :version "21.1"
-  :type 'integer
   :group 'ps-print-headers)
 
 (defcustom ps-print-only-one-header nil
@@ -2569,6 +2626,7 @@
 only one header/footer over all columns or one header/footer per column.
 See also `ps-print-header' and `ps-print-footer'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-switch-header 'duplex
@@ -2591,6 +2649,7 @@
 		 (const :tag "Never Switch" nil)
 		 (const :tag "Always Switch" t)
 		 (const :tag "Switch When Duplexing" duplex))
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-show-n-of-n t
@@ -2598,6 +2657,7 @@
 NOTE: page numbers are displayed as part of headers,
       see variable `ps-print-header'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-spool-config
@@ -2633,6 +2693,7 @@
 		 :tag "Spool Config"
 		 (const lpr-switches) (const setpagedevice)
 		 (const :tag "nil" nil))
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-spool-duplex nil		; Not many people have duplex printers,
@@ -2646,6 +2707,7 @@
 
 See also `ps-spool-tumble'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-spool-tumble nil
@@ -2656,6 +2718,7 @@
 
 It has effect only when `ps-spool-duplex' is non-nil."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 ;;; Fonts
@@ -2806,11 +2869,13 @@
 		(cons :format "%v"
 		      (const :format "" avg-char-width)
 		      (number :tag "Average Character Width"))))
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-font-family 'Courier
   "*Font family name for ordinary text, when generating PostScript."
   :type 'symbol
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-font-size   '(7 . 8.5)
@@ -2821,11 +2886,13 @@
 		 (cons :tag "Landscape/Portrait"
 		       (number :tag "Landscape Text Size")
 		       (number :tag "Portrait Text Size")))
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-header-font-family      'Helvetica
   "*Font family name for text in the header, when generating PostScript."
   :type 'symbol
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-header-font-size       '(10 . 12)
@@ -2836,6 +2903,7 @@
 		 (cons :tag "Landscape/Portrait"
 		       (number :tag "Landscape Header Size")
 		       (number :tag "Portrait Header Size")))
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-header-title-font-size '(12 . 14)
@@ -2846,23 +2914,24 @@
 		 (cons :tag "Landscape/Portrait"
 		       (number :tag "Landscape Header Title Size")
 		       (number :tag "Portrait Header Title Size")))
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-footer-font-family      'Helvetica
   "*Font family name for text in the footer, when generating PostScript."
+  :type 'symbol
   :version "21.1"
-  :type 'symbol
   :group 'ps-print-font)
 
 (defcustom ps-footer-font-size       '(10 . 12)
   "*Font size, in points, for text in the footer, when generating PostScript."
-  :version "21.1"
   :type '(choice :menu-tag "Footer Font Size"
 		 :tag "Footer Font Size"
 		 (number :tag "Footer Size")
 		 (cons :tag "Landscape/Portrait"
 		       (number :tag "Landscape Footer Size")
 		       (number :tag "Portrait Footer Size")))
+  :version "21.1"
   :group 'ps-print-font)
 
 (defcustom ps-line-number-color      "black"
@@ -2882,6 +2951,7 @@
 (defcustom ps-line-number-font      "Times-Italic"
   "*Font for line-number, when generating PostScript."
   :type 'string
+  :version "20"
   :group 'ps-print-font
   :group 'ps-print-miscellany)
 
@@ -2893,6 +2963,7 @@
 		 (cons :tag "Landscape/Portrait"
 		       (number :tag "Landscape Font Size")
 		       (number :tag "Portrait Font Size")))
+  :version "20"
   :group 'ps-print-font
   :group 'ps-print-miscellany)
 
@@ -2923,6 +2994,7 @@
 		 (const :tag "Do NOT Print Color" nil)
 		 (const :tag "Print Always Color" t)
 		 (const :tag "Print Black/White Color" black-white))
+  :version "20"
   :group 'ps-print-color)
 
 (defcustom ps-default-fg '(0.0 0.0 0.0) ; black
@@ -2962,6 +3034,7 @@
 		       (number :tag "Red")
 		       (number :tag "Green")
 		       (number :tag "Blue")))
+  :version "20"
   :group 'ps-print-color)
 
 (defcustom ps-default-bg '(1.0 1.0 1.0) ; white
@@ -3003,6 +3076,7 @@
 		       (number :tag "Red")
 		       (number :tag "Green")
 		       (number :tag "Blue")))
+  :version "20"
   :group 'ps-print-color)
 
 (defcustom ps-auto-font-detect t
@@ -3010,6 +3084,7 @@
 If nil, we rely solely on the lists `ps-bold-faces', `ps-italic-faces', and
 `ps-underlined-faces'."
   :type 'boolean
+  :version "20"
   :group 'ps-print-font)
 
 (defcustom ps-black-white-faces
@@ -3049,6 +3124,7 @@
 				(const shadow)
 				(const box)
 				(const outline)))))
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-bold-faces
@@ -3061,6 +3137,7 @@
   "*A list of the \(non-bold\) faces that should be printed in bold font.
 This applies to generating PostScript."
   :type '(repeat face)
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-italic-faces
@@ -3073,6 +3150,7 @@
   "*A list of the \(non-italic\) faces that should be printed in italic font.
 This applies to generating PostScript."
   :type '(repeat face)
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-underlined-faces
@@ -3083,6 +3161,7 @@
   "*A list of the \(non-underlined\) faces that should be printed underlined.
 This applies to generating PostScript."
   :type '(repeat face)
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-use-face-background nil
@@ -3102,6 +3181,7 @@
 		 (repeat :menu-tag "Face Background List"
 			 :tag "Face Background List"
 			 face))
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-left-header
@@ -3125,6 +3205,7 @@
   :type '(repeat (choice :menu-tag "Left Header"
 			 :tag "Left Header"
 			 string symbol))
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-right-header
@@ -3155,6 +3236,7 @@
   :type '(repeat (choice :menu-tag "Right Header"
 			 :tag "Right Header"
 			 string symbol))
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-left-footer
@@ -3175,10 +3257,10 @@
 variable, the string value has PostScript string delimiters added to it.
 
 If symbols are unbounded, they are silently ignored."
-  :version "21.1"
   :type '(repeat (choice :menu-tag "Left Footer"
 			 :tag "Left Footer"
 			 string symbol))
+  :version "21.1"
   :group 'ps-print-headers)
 
 (defcustom ps-right-footer
@@ -3206,15 +3288,16 @@
 
 You can also create your own time stamp function by using `format-time-string'
 \(which see)."
-  :version "21.1"
   :type '(repeat (choice :menu-tag "Right Footer"
 			 :tag "Right Footer"
 			 string symbol))
+  :version "21.1"
   :group 'ps-print-headers)
 
 (defcustom ps-razzle-dazzle t
   "*Non-nil means report progress while formatting buffer."
   :type 'boolean
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-adobe-tag "%!PS-Adobe-3.0\n"
@@ -3222,6 +3305,7 @@
 By default, `ps-adobe-tag' contains the standard identifier.  Some printers
 require slightly different versions of this line."
   :type 'string
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-build-face-reference t
@@ -3236,6 +3320,7 @@
 face, or create new faces.  Most users shouldn't have to worry about its
 setting, though."
   :type 'boolean
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-always-build-face-reference nil
@@ -3245,28 +3330,30 @@
 of bold and italic faces *every* time one of the ...-with-faces commands is
 called.  Most users shouldn't need to set this variable."
   :type 'boolean
+  :version "20"
   :group 'ps-print-face)
 
 (defcustom ps-banner-page-when-duplexing nil
   "*Non-nil means the very first page is skipped.
 It's like the very first character of buffer (or region) is ^L (\\014)."
   :type 'boolean
+  :version "20"
   :group 'ps-print-headers)
 
 (defcustom ps-postscript-code-directory
-  (or (cond
-       ((eq ps-print-emacs-type 'emacs)	; emacs
-	data-directory)
-       ((fboundp 'locate-data-directory) ; xemacs
-	(locate-data-directory "ps-print"))
-       ((boundp 'data-directory)	; xemacs
-	data-directory)
-       (t				; don't know what to do
-	nil))
+  (or (if (featurep 'xemacs)
+	  (cond ((fboundp 'locate-data-directory) ; xemacs
+		 (locate-data-directory "ps-print"))
+		((boundp 'data-directory) ; xemacs
+		 data-directory)
+		(t			; don't know what to do
+		 nil))
+	data-directory)			; emacs
       (error "`ps-postscript-code-directory' isn't set properly"))
   "*Directory where it's located the PostScript prologue file used by ps-print.
 By default, this directory is the same as in the variable `data-directory'."
   :type 'directory
+  :version "20"
   :group 'ps-print-miscellany)
 
 (defcustom ps-line-spacing 0
@@ -3505,6 +3592,7 @@
      (list
       (concat "\n;;; ps-print version " ps-print-version "\n")
       ";; internal vars"
+      (ps-comment-string "emacs-version      " emacs-version)
       (ps-comment-string "ps-print-emacs-type" ps-print-emacs-type)
       (ps-comment-string "ps-windows-system  " ps-windows-system)
       (ps-comment-string "ps-lp-system       " ps-lp-system)
@@ -3749,106 +3837,105 @@
   (format-time-string "%T"))
 
 
-(eval-and-compile
-  (and (eq ps-print-emacs-type 'xemacs)
-       ;; XEmacs change: Need to check for emacs-major-version too.
-       (or (< emacs-major-version 19)
-	   (and (= emacs-major-version 19) (< emacs-minor-version 12)))
-       (setq ps-print-color-p nil))
-
-
-  ;; Return t if the device (which can be changed during an emacs session)
-  ;; can handle colors.
-  ;; This function is not yet implemented for GNU emacs.
-  (cond ((and (eq ps-print-emacs-type 'xemacs)
-	      ;; XEmacs change: Need to check for emacs-major-version too.
-	      (or (> emacs-major-version 19)
-		  (and (= emacs-major-version 19)
-		       (>= emacs-minor-version 12)))) ; xemacs >= 19.12
-	 (defun ps-color-device ()
-	   (eq (ps-x-device-class) 'color)))
-
-	(t				; emacs
-	 (defun ps-color-device ()
-	   (if (fboundp 'color-values)
-	       (ps-e-color-values "Green")
-	     t))))
-
-
-  (defun ps-mapper (extent list)
-    (nconc list
-	   (list (list (ps-x-extent-start-position extent) 'push extent)
-		 (list (ps-x-extent-end-position extent) 'pull extent)))
-    nil)
-
-  (defun ps-extent-sorter (a b)
-    (< (ps-x-extent-priority a) (ps-x-extent-priority b)))
-
-  (defun ps-xemacs-face-kind-p (face kind kind-regex)
-    (let* ((frame-font (or (ps-x-face-font-instance face)
-			   (ps-x-face-font-instance 'default)))
-	   (kind-cons
-	    (and frame-font
-		 (assq kind
-		       (ps-x-font-instance-properties frame-font))))
-	   (kind-spec (cdr-safe kind-cons))
-	   (case-fold-search t))
-      (and kind-spec (string-match kind-regex kind-spec))))
-
-  (cond ((eq ps-print-emacs-type 'emacs) ; emacs
-
-	 (defun ps-color-values (x-color)
+(and (featurep 'xemacs)
+     ;; XEmacs change: Need to check for emacs-major-version too.
+     (or (< emacs-major-version 19)
+	 (and (= emacs-major-version 19) (< emacs-minor-version 12)))
+     (setq ps-print-color-p nil))
+
+
+;; Return t if the device (which can be changed during an emacs session)
+;; can handle colors.
+;; This function is not yet implemented for GNU emacs.
+(cond ((and (featurep 'xemacs)
+	    ;; XEmacs change: Need to check for emacs-major-version too.
+	    (or (> emacs-major-version 19)
+		(and (= emacs-major-version 19)
+		     (>= emacs-minor-version 12)))) ; xemacs >= 19.12
+       (defun ps-color-device ()
+	 (eq (ps-x-device-class) 'color)))
+
+      (t				; emacs
+       (defun ps-color-device ()
+	 (if (fboundp 'color-values)
+	     (ps-e-color-values "Green")
+	   t))))
+
+
+(defun ps-mapper (extent list)
+  (nconc list
+	 (list (list (ps-x-extent-start-position extent) 'push extent)
+	       (list (ps-x-extent-end-position extent) 'pull extent)))
+  nil)
+
+(defun ps-extent-sorter (a b)
+  (< (ps-x-extent-priority a) (ps-x-extent-priority b)))
+
+(defun ps-xemacs-face-kind-p (face kind kind-regex)
+  (let* ((frame-font (or (ps-x-face-font-instance face)
+			 (ps-x-face-font-instance 'default)))
+	 (kind-cons
+	  (and frame-font
+	       (assq kind
+		     (ps-x-font-instance-properties frame-font))))
+	 (kind-spec (cdr-safe kind-cons))
+	 (case-fold-search t))
+    (and kind-spec (string-match kind-regex kind-spec))))
+
+(cond ((featurep 'xemacs)		; xemacs
+
+       ;; to avoid XEmacs compilation gripes
+       (defvar coding-system-for-write   nil)
+       (defvar coding-system-for-read    nil)
+       (defvar buffer-file-coding-system nil)
+
+       (and (fboundp 'find-coding-system)
+	    (or (ps-x-find-coding-system 'raw-text-unix)
+		(ps-x-copy-coding-system 'no-conversion-unix 'raw-text-unix)))
+
+       (defun ps-color-values (x-color)
+	 (let ((color (ps-xemacs-color-name x-color)))
 	   (cond
-	    ((fboundp 'color-values)
-	     (ps-e-color-values x-color))
 	    ((fboundp 'x-color-values)
-	     (ps-e-x-color-values x-color))
+	     (ps-e-x-color-values color))
+	    ((and (fboundp 'color-instance-rgb-components)
+		  (ps-color-device))
+	     (ps-x-color-instance-rgb-components
+	      (if (ps-x-color-instance-p x-color)
+		  x-color
+		(ps-x-make-color-instance color))))
 	    (t
-	     (error "No available function to determine X color values"))))
-
-	 (defun ps-face-bold-p (face)
-	   (or (ps-e-face-bold-p face)
-	       (memq face ps-bold-faces)))
-
-	 (defun ps-face-italic-p (face)
-	   (or (ps-e-face-italic-p face)
-	       (memq face ps-italic-faces)))
-	 )
-
-	(t				; xemacs
-
-	 ;; to avoid XEmacs compilation gripes
-	 (defvar coding-system-for-write   nil)
-	 (defvar coding-system-for-read    nil)
-	 (defvar buffer-file-coding-system nil)
-
-	 (and (fboundp 'find-coding-system)
-	      (or (ps-x-find-coding-system 'raw-text-unix)
-		  (ps-x-copy-coding-system 'no-conversion-unix 'raw-text-unix)))
-
-	 (defun ps-color-values (x-color)
-	   (let ((color (ps-xemacs-color-name x-color)))
-	     (cond
-	      ((fboundp 'x-color-values)
-	       (ps-e-x-color-values color))
-	      ((and (fboundp 'color-instance-rgb-components)
-		    (ps-color-device))
-	       (ps-x-color-instance-rgb-components
-		(if (ps-x-color-instance-p x-color)
-		    x-color
-		  (ps-x-make-color-instance color))))
-	      (t
-	       (error "No available function to determine X color values")))))
-
-	 (defun ps-face-bold-p (face)
-	   (or (ps-xemacs-face-kind-p face 'WEIGHT_NAME "bold\\|demibold")
-	       (memq face ps-bold-faces))) ; Kludge-compatible
-
-	 (defun ps-face-italic-p (face)
-	   (or (ps-xemacs-face-kind-p face 'ANGLE_NAME "i\\|o")
-	       (ps-xemacs-face-kind-p face 'SLANT "i\\|o")
-	       (memq face ps-italic-faces))) ; Kludge-compatible
-	 )))
+	     (error "No available function to determine X color values")))))
+
+       (defun ps-face-bold-p (face)
+	 (or (ps-xemacs-face-kind-p face 'WEIGHT_NAME "bold\\|demibold")
+	     (memq face ps-bold-faces))) ; Kludge-compatible
+
+       (defun ps-face-italic-p (face)
+	 (or (ps-xemacs-face-kind-p face 'ANGLE_NAME "i\\|o")
+	     (ps-xemacs-face-kind-p face 'SLANT "i\\|o")
+	     (memq face ps-italic-faces))) ; Kludge-compatible
+       )
+
+      (t				; emacs
+
+       (defun ps-color-values (x-color)
+	 (cond
+	  ((fboundp 'color-values)
+	   (ps-e-color-values x-color))
+	  ((fboundp 'x-color-values)
+	   (ps-e-x-color-values x-color))
+	  (t
+	   (error "No available function to determine X color values"))))
+
+       (defun ps-face-bold-p (face)
+	 (or (ps-e-face-bold-p face)
+	     (memq face ps-bold-faces)))
+
+       (defun ps-face-italic-p (face)
+	 (or (ps-e-face-italic-p face)
+	     (memq face ps-italic-faces)))
+       ))
 
 
 (defvar ps-print-color-scale 1.0)
@@ -3931,15 +4018,14 @@
 
 (defvar ps-color-p nil)
 (defvar ps-color-format
-  (if (eq ps-print-emacs-type 'emacs)
-
-      ;; Emacs understands the %f format; we'll use it to limit color RGB
-      ;; values to three decimals to cut down some on the size of the
-      ;; PostScript output.
-      "%0.3f %0.3f %0.3f"
-
-    ;; XEmacs will have to make do with %s (princ) for floats.
-    "%s %s %s"))
+  (if (featurep 'xemacs)
+      ;; XEmacs will have to make do with %s (princ) for floats.
+      "%s %s %s"
+
+    ;; Emacs understands the %f format; we'll use it to limit color RGB
+    ;; values to three decimals to cut down some on the size of the
+    ;; PostScript output.
+    "%0.3f %0.3f %0.3f"))
 
 ;; These values determine how much print-height to deduct when headers/footers
 ;; are turned on.  This is a pretty clumsy way of handling it, but it'll do for
@@ -4723,7 +4809,7 @@
   (save-excursion
     (set-buffer ps-spool-buffer)
     (goto-char (point-max))
-    (insert-file fname)))
+    (insert-file-contents fname)))
 
 ;; These functions are used in `ps-mule' to get charset of header and footer.
 ;; To avoid unnecessary calls to functions in `ps-left-header',
@@ -4855,9 +4941,9 @@
 ;; to three decimals to cut down some on the size of the PostScript output.
 ;; XEmacs will have to make do with %s (princ) for floats.
 
-(defvar ps-float-format (if (eq ps-print-emacs-type 'emacs)
-			    "%0.3f "	; emacs
-			  "%s "))	; xemacs
+(defvar ps-float-format (if (featurep 'xemacs)
+			    "%s "	; xemacs
+			  "%0.3f "))	; emacs
 
 
 (defun ps-float-format (value &optional default)
@@ -6360,14 +6446,16 @@
 
 
 ;; to avoid compilation gripes
+(defalias 'ps-jitify 'jit-lock-fontify-now)
+(defalias 'ps-lazify 'lazy-lock-fontify-region)
+
+
+;; to avoid compilation gripes
 (defun ps-print-ensure-fontified (start end)
-  (cond
-   ((and (boundp 'jit-lock-mode) (symbol-value 'jit-lock-mode))
-    (defalias 'ps-jitify 'jit-lock-fontify-now) ; avoid compilation gripes
-    (ps-jitify start end))
-   ((and (boundp 'lazy-lock-mode) (symbol-value 'lazy-lock-mode))
-    (defalias 'ps-lazify 'lazy-lock-fontify-region) ; avoid compilation gripes
-    (ps-lazify start end))))
+  (cond ((and (boundp 'jit-lock-mode) (symbol-value 'jit-lock-mode))
+	 (ps-jitify start end))
+	((and (boundp 'lazy-lock-mode) (symbol-value 'lazy-lock-mode))
+	 (ps-lazify start end))))
 
 
 (defun ps-generate-postscript-with-faces (from to)
@@ -6393,7 +6481,7 @@
     (let ((face 'default)
 	  (position to))
       (cond
-       ((eq ps-print-emacs-type 'xemacs)
+       ((featurep 'xemacs)		; xemacs
 	;; Build the list of extents...
 	(let ((a (cons 'dummy nil))
 	      record type extent extent-list)
@@ -6437,7 +6525,7 @@
 		  from position
 		  a (cdr a)))))
 
-       ((eq ps-print-emacs-type 'emacs)
+       (t				; emacs
 	(let ((property-change from)
 	      (overlay-change from)
 	      (save-buffer-invisibility-spec buffer-invisibility-spec)
@@ -6714,11 +6802,11 @@
 ;; Don't use it unless you understand what it does!
 
 (defmacro ps-prsc ()
-  `(if (eq ps-print-emacs-type 'emacs) [f22] 'f22))
+  `(if (featurep 'xemacs) 'f22           [f22]))
 (defmacro ps-c-prsc ()
-  `(if (eq ps-print-emacs-type 'emacs) [C-f22] '(control f22)))
+  `(if (featurep 'xemacs) '(control f22) [C-f22]))
 (defmacro ps-s-prsc ()
-  `(if (eq ps-print-emacs-type 'emacs) [S-f22] '(shift f22)))
+  `(if (featurep 'xemacs) '(shift f22)   [S-f22]))
 
 ;; A hook to bind to `rmail-mode-hook' to locally bind prsc and set the
 ;; `ps-left-headers' specially for mail messages.
--- a/lisp/replace.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/replace.el	Mon Nov 22 11:06:39 2004 +0000
@@ -92,7 +92,7 @@
 		 (format "%s: " string))
 	       nil nil nil
 	       query-replace-from-history-variable
-	       nil t))))
+	       nil t t))))
       (if (and (zerop (length from)) lastto lastfrom)
 	  (cons lastfrom
 		(query-replace-compile-replacement lastto regexp-flag))
@@ -156,7 +156,7 @@
      (read-from-minibuffer
       (format "%s %s with: " string (query-replace-descr from))
       nil nil nil
-      query-replace-to-history-variable from t))
+      query-replace-to-history-variable from t t))
    regexp-flag))
 
 (defun query-replace-read-args (string regexp-flag &optional noerror)
--- a/lisp/saveplace.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/saveplace.el	Mon Nov 22 11:06:39 2004 +0000
@@ -61,7 +61,10 @@
 If you wish your place in any file to always be automatically saved,
 simply put this in your `~/.emacs' file:
 
-\(setq-default save-place t\)"
+\(setq-default save-place t)
+\(require 'saveplace)
+
+or else use the Custom facility to set this option."
   :type 'boolean
   :require 'saveplace
   :group 'save-place)
--- a/lisp/simple.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/simple.el	Mon Nov 22 11:06:39 2004 +0000
@@ -3111,6 +3111,7 @@
   ;; for intermediate positions.
   (let ((inhibit-point-motion-hooks t)
 	(opoint (point))
+	(forward (> arg 0))
 	new line-end line-beg)
     (unwind-protect
 	(progn
@@ -3185,9 +3186,10 @@
 	     ;; at least go to end of line.
 	     (beginning-of-line))
 	    (t
-	     (line-move-finish (or goal-column temporary-goal-column) opoint))))))
-
-(defun line-move-finish (column opoint)
+	     (line-move-finish (or goal-column temporary-goal-column)
+			       opoint forward))))))
+
+(defun line-move-finish (column opoint forward)
   (let ((repeat t))
     (while repeat
       ;; Set REPEAT to t to repeat the whole thing.
@@ -3197,10 +3199,11 @@
 	    (line-beg (save-excursion (beginning-of-line) (point)))
 	    (line-end
 	     ;; Compute the end of the line
-	     ;; ignoring effectively intangible newlines.
+	     ;; ignoring effectively invisible newlines.
 	     (save-excursion
-	       (let ((inhibit-point-motion-hooks nil)
-		     (inhibit-field-text-motion t))
+	       (end-of-line)
+	       (while (and (not (eobp)) (line-move-invisible-p (point)))
+		 (goto-char (next-char-property-change (point)))
 		 (end-of-line))
 	       (point))))
 
@@ -3224,7 +3227,13 @@
 	    ;; try the previous allowable position.
 	    ;; See if it is ok.
 	    (backward-char)
-	    (if (<= (point) line-end)
+	    (if (if forward
+		    ;; If going forward, don't accept the previous
+		    ;; allowable position if it is before the target line.
+		    (< line-beg (point)) 
+		  ;; If going backward, don't accept the previous
+		  ;; allowable position if it is still after the target line.
+		  (<= (point) line-end))
 		(setq new (point))
 	      ;; As a last resort, use the end of the line.
 	      (setq new line-end))))
--- a/lisp/subr.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/subr.el	Mon Nov 22 11:06:39 2004 +0000
@@ -484,6 +484,24 @@
 	    (setq inserted t)))
       (setq tail (cdr tail)))))
 
+(defun map-keymap-internal (function keymap &optional sort-first)
+  "Implement `map-keymap' with sorting.
+Don't call this function; it is for internal use only."
+  (if sort-first
+      (let (list)
+	(map-keymap (lambda (a b) (push (cons a b) list))
+		    keymap)
+	(setq list (sort list
+			 (lambda (a b)
+			   (setq a (car a) b (car b))
+			   (if (integerp a)
+			       (if (integerp b) (< a b)
+				 t)
+			     (if (integerp b) t
+			       (string< a b))))))
+	(dolist (p list)
+	  (funcall function (car p) (cdr p))))
+    (map-keymap function keymap)))
 
 (defmacro kbd (keys)
   "Convert KEYS to the internal Emacs key representation.
--- a/lisp/textmodes/flyspell.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/textmodes/flyspell.el	Mon Nov 22 11:06:39 2004 +0000
@@ -1,6 +1,6 @@
 ;;; flyspell.el --- on-the-fly spell checker
 
-;; Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000, 2001, 2002, 2004  Free Software Foundation, Inc.
 
 ;; Author: Manuel Serrano <Manuel.Serrano@sophia.inria.fr>
 ;; Maintainer: FSF
@@ -391,13 +391,9 @@
 
 (defvar flyspell-mouse-map
   (let ((map (make-sparse-keymap)))
-    (cond
-     ((eq flyspell-emacs 'xemacs)
-      (define-key map [(button2)] #'flyspell-correct-word)
-      (define-key map "\M-\t" #'flyspell-auto-correct-word))
-     (flyspell-use-local-map
-      (define-key map [(mouse-2)] #'flyspell-correct-word)
-      (define-key map "\M-\t" #'flyspell-auto-correct-word)))
+    (define-key map (if (featurep 'xemacs) [button2] [down-mouse-2])
+      #'flyspell-correct-word)
+    (define-key map "\M-\t" #'flyspell-auto-correct-word)
     map))
 
 ;;;###autoload
@@ -2123,5 +2119,5 @@
 
 (provide 'flyspell)
 
-;;; arch-tag: 05d915b9-e9cf-44fb-9137-fc28f5eaab2a
+;; arch-tag: 05d915b9-e9cf-44fb-9137-fc28f5eaab2a
 ;;; flyspell.el ends here
--- a/lisp/url/ChangeLog	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/url/ChangeLog	Mon Nov 22 11:06:39 2004 +0000
@@ -1,3 +1,9 @@
+2004-11-20  Masatake YAMATO  <jet@gyve.org>
+
+	* url.el (url-mm-callback): Delay the invocation
+	of `mm-destroy-parts'. Invoke `mm-destroy-parts'
+	when the buffer is killed.
+
 2004-11-12  Masatake YAMATO  <jet@gyve.org>
 
 	* url-mailto.el (url-mailto): Fix a typo in the 
--- a/lisp/url/url.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/url/url.el	Mon Nov 22 11:06:39 2004 +0000
@@ -207,7 +207,10 @@
 	    (message "Viewing externally")
 	    (kill-buffer (current-buffer)))
 	(display-buffer (current-buffer))
-	(mm-destroy-parts handle)))))
+	(add-hook 'kill-buffer-hook 
+		  `(lambda () (mm-destroy-parts ',handle))
+		  nil
+		  t)))))
 
 (defun url-mm-url (url)
   "Retrieve URL and pass to the appropriate viewing application."
--- a/lisp/vc-rcs.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/vc-rcs.el	Mon Nov 22 11:06:39 2004 +0000
@@ -419,7 +419,7 @@
 	    (vc-file-setprop file 'vc-workfile-version new-version)
 	    ;; if necessary, adjust the default branch
 	    (and rev (not (string= rev ""))
-		 (vc-rcs-set-default-branch 
+		 (vc-rcs-set-default-branch
 		  file
 		  (if (vc-rcs-latest-on-branch-p file new-version)
 		      (if (vc-trunk-p new-version) nil
@@ -497,6 +497,203 @@
                        (and newvers (concat "-r" newvers)))
                  (vc-switches 'RCS 'diff))))
 
+(defun vc-rcs-annotate-command (file buffer &optional revision)
+  "Annotate FILE, inserting the results in BUFFER.
+Optional arg REVISION is a revision to annotate from."
+  ;; Aside from the "head revision on the trunk", the instructions for
+  ;; each revision on the trunk are an ordered list of kill and insert
+  ;; commands necessary to go from the chronologically-following
+  ;; revision to this one.  That is, associated with revision N are
+  ;; edits that applied to revision N+1 would result in revision N.
+  ;;
+  ;; On a branch, however, (some) things are inverted: the commands
+  ;; listed are those necessary to go from the chronologically-preceding
+  ;; revision to this one.  That is, associated with revision N are
+  ;; edits that applied to revision N-1 would result in revision N.
+  ;;
+  ;; So, to get per-line history info, we apply reverse-chronological
+  ;; edits, starting with the head revision on the trunk, all the way
+  ;; back through the initial revision (typically "1.1" or similar),
+  ;; then apply forward-chronological edits -- keeping track of which
+  ;; revision is associated with each inserted line -- until we reach
+  ;; the desired revision for display (which may be either on the trunk
+  ;; or on a branch).
+  (let* ((tree (with-temp-buffer
+                 (insert-file-contents (vc-rcs-registered file))
+                 (vc-rcs-parse)))
+         (revisions (cdr (assq 'revisions tree)))
+         ;; The revision N whose instructions we currently are processing.
+         (cur (cdr (assq 'head (cdr (assq 'headers tree)))))
+         ;; Alist from the parse tree for N.
+         (meta (cdr (assoc cur revisions)))
+         ;; Point and temporary string, respectively.
+         p s
+         ;; "Next-branch list".  Nil means the desired revision to
+         ;; display lives on the trunk.  Non-nil means it lives on a
+         ;; branch, in which case the value is a list of revision pairs
+         ;; (PARENT . CHILD), the first PARENT being on the trunk, that
+         ;; links each series of revisions in the path from the initial
+         ;; revision to the desired revision to display.
+         nbls
+         ;; "Path-accumulate-predicate plus revision/date/author".
+         ;; Until set, forward-chronological edits are not accumulated.
+         ;; Once set, its value (updated every revision) is used for
+         ;; the text property `:vc-rcs-r/d/a' for inserts during
+         ;; processing of forward-chronological instructions for N.
+         ;; See internal func `r/d/a'.
+         prda
+         ;; List of forward-chronological instructions, each of the
+         ;; form: (POS . ACTION), where POS is a buffer position.  If
+         ;; ACTION is a string, it is inserted, otherwise it is taken as
+         ;; the number of characters to be deleted.
+         path
+         ;; N+1.  When `cur' is "", this is the initial revision.
+         pre)
+    (unless revision
+      (setq revision cur))
+    (unless (assoc revision revisions)
+      (error "No such revision: %s" revision))
+    ;; Find which branches (if any) must be included in the edits.
+    (let ((par revision)
+          bpt kids)
+      (while (setq bpt (vc-branch-part par)
+                   par (vc-branch-part bpt))
+        (setq kids (cdr (assq 'branches (cdr (assoc par revisions)))))
+        ;; A branchpoint may have multiple children.  Find the right one.
+        (while (not (string= bpt (vc-branch-part (car kids))))
+          (setq kids (cdr kids)))
+        (push (cons par (car kids)) nbls)))
+    ;; Start with the full text.
+    (set-buffer buffer)
+    (insert (cdr (assq 'text meta)))
+    ;; Apply reverse-chronological edits on the trunk, computing and
+    ;; accumulating forward-chronological edits after some point, for
+    ;; later.
+    (flet ((r/d/a () (vector pre
+                             (cdr (assq 'date meta))
+                             (cdr (assq 'author meta)))))
+      (while (when (setq pre cur cur (cdr (assq 'next meta)))
+               (not (string= "" cur)))
+        (setq
+         ;; Start accumulating the forward-chronological edits when N+1
+         ;; on the trunk is either the desired revision to display, or
+         ;; the appropriate branchpoint for it.  Do this before
+         ;; updating `meta' since `r/d/a' uses N+1's `meta' value.
+         prda (when (or prda (string= (if nbls (caar nbls) revision) pre))
+                (r/d/a))
+         meta (cdr (assoc cur revisions)))
+        ;; Edits in the parse tree specify a line number (in the buffer
+        ;; *BEFORE* editing occurs) to start from, but line numbers
+        ;; change as a result of edits.  To DTRT, we apply edits in
+        ;; order of descending buffer position so that edits further
+        ;; down in the buffer occur first w/o corrupting specified
+        ;; buffer positions of edits occurring towards the beginning of
+        ;; the buffer.  In this way we avoid using markers.  A pleasant
+        ;; property of this approach is ability to push instructions
+        ;; onto `path' directly, w/o need to maintain rev boundaries.
+        (dolist (insn (cdr (assq :insn meta)))
+          (goto-line (pop insn))
+          (setq p (point))
+          (case (pop insn)
+            (k (setq s (buffer-substring-no-properties
+                        p (progn (forward-line (car insn))
+                                 (point))))
+               (when prda
+                 (push `(,p . ,(propertize s :vc-rcs-r/d/a prda)) path))
+               (delete-region p (point)))
+            (i (setq s (car insn))
+               (when prda
+                 (push `(,p . ,(length s)) path))
+               (insert s)))))
+      ;; For the initial revision, setting `:vc-rcs-r/d/a' directly is
+      ;; equivalent to pushing an insert instruction (of the entire buffer
+      ;; contents) onto `path' then erasing the buffer, but less wasteful.
+      (put-text-property (point-min) (point-max) :vc-rcs-r/d/a (r/d/a))
+      ;; Now apply the forward-chronological edits for the trunk.
+      (dolist (insn path)
+        (goto-char (pop insn))
+        (if (stringp insn)
+            (insert insn)
+          (delete-char insn)))
+      ;; Now apply the forward-chronological edits (directly from the
+      ;; parse-tree) for the branch(es), if necessary.  We re-use vars
+      ;; `pre' and `meta' for the sake of internal func `r/d/a'.
+      (while nbls
+        (setq pre (cdr (pop nbls)))
+        (while (progn
+                 (setq meta (cdr (assoc pre revisions))
+                       prda nil)
+                 (dolist (insn (cdr (assq :insn meta)))
+                   (goto-line (pop insn))
+                   (case (pop insn)
+                     (k (delete-region
+                         (point) (progn (forward-line (car insn))
+                                        (point))))
+                     (i (insert (propertize
+                                 (car insn)
+                                 :vc-rcs-r/d/a
+                                 (or prda (setq prda (r/d/a))))))))
+                 (prog1 (not (string= (if nbls (caar nbls) revision) pre))
+                   (setq pre (cdr (assq 'next meta)))))))))
+  ;; Lastly, for each line, insert at bol nicely-formatted history info.
+  ;; We do two passes to collect summary information used to minimize
+  ;; the annotation's usage of screen real-estate: (1) Consider rendered
+  ;; width of revision plus author together as a unit; and (2) Omit
+  ;; author entirely if all authors are the same as the user.
+  (let ((ht (make-hash-table :test 'eq))
+        (me (user-login-name))
+        (maxw 0)
+        (all-me t)
+        rda w a)
+    (goto-char (point-max))
+    (while (not (bobp))
+      (forward-line -1)
+      (setq rda (get-text-property (point) :vc-rcs-r/d/a))
+      (unless (gethash rda ht)
+        (setq a (aref rda 2)
+              all-me (and all-me (string= a me)))
+        (puthash rda (setq w (+ (length (aref rda 0))
+                                (length a)))
+                 ht)
+        (setq maxw (max w maxw))))
+    (let ((padding (make-string maxw 32)))
+      (flet ((pad (w) (substring-no-properties padding w))
+             (render (rda &rest ls)
+                     (propertize
+                      (apply 'concat
+                             (format-time-string "%Y-%m-%d" (aref rda 1))
+                             "  "
+                             (aref rda 0)
+                             ls)
+                      :vc-rcs-r/d/a rda)))
+        (maphash
+         (if all-me
+             (lambda (rda w)
+               (puthash rda (render rda (pad w) ": ") ht))
+           (lambda (rda w)
+             (puthash rda (render rda " " (pad w) " " (aref rda 2) ": ") ht)))
+         ht)))
+    (while (not (eobp))
+      (insert (gethash (get-text-property (point) :vc-rcs-r/d/a) ht))
+      (forward-line 1))))
+
+(defun vc-rcs-annotate-current-time ()
+  "Return the current time, based at midnight of the current day, and
+encoded as fractional days."
+  (vc-annotate-convert-time
+   (apply 'encode-time 0 0 0 (nthcdr 3 (decode-time (current-time))))))
+
+(defun vc-rcs-annotate-time ()
+  "Return the time of the next annotation (as fraction of days)
+systime, or nil if there is none.  Also, reposition point."
+  (unless (eobp)
+    (search-forward ": ")
+    (vc-annotate-convert-time
+     (aref (get-text-property (point) :vc-rcs-r/d/a) 1))))
+
+(defun vc-rcs-annotate-extract-revision-at-line ()
+  (aref (get-text-property (point) :vc-rcs-r/d/a) 0))
+
 
 ;;;
 ;;; Snapshot system
@@ -761,7 +958,6 @@
 	     (not (eq installation 'unknown)))
 	(vc-release-greater-or-equal installation release))))
 
-
 (defun vc-rcs-system-release ()
   "Return the RCS release installed on this system, as a string.
 Return symbol UNKNOWN if the release cannot be deducted.  The user can
@@ -785,6 +981,272 @@
   (vc-do-command nil 0 "rcs" (vc-name file) (concat "-b" branch))
   (vc-file-setprop file 'vc-rcs-default-branch branch))
 
+(defun vc-rcs-parse (&optional buffer)
+  "Parse current buffer, presumed to be in RCS-style masterfile format.
+Optional arg BUFFER specifies another buffer to parse.  Return an alist
+of two elements, w/ keys `headers' and `revisions' and values in turn
+sub-alists.  For `headers', the values unless otherwise specified are
+strings and the keys are:
+
+  desc     -- description
+  head     -- latest revision
+  branch   -- the branch the \"head revision\" lies on;
+              absent if the head revision lies on the trunk
+  access   -- ???
+  symbols  -- sub-alist of (SYMBOL . REVISION) elements
+  locks    -- if file is checked out, something like \"ttn:1.7\"
+  strict   -- t if \"strict locking\" is in effect, otherwise nil
+  comment  -- may be absent; typically something like \"# \" or \"; \"
+  expand   -- may be absent; ???
+
+For `revisions', the car is REVISION (string), the cdr a sub-alist,
+with string values (unless otherwise specified) and keys:
+
+  date     -- a time value (like that returned by `encode-time'); as a
+              special case, a year value less than 100 is augmented by 1900
+  author   -- username
+  state    -- typically \"Exp\" or \"Rel\"
+  branches -- list of revisions that begin branches from this revision
+  next     -- on the trunk: the chronologically-preceding revision, or \"\";
+              on a branch: the chronologically-following revision, or \"\"
+  log      -- change log entry
+  text     -- for the head revision on the trunk, the body of the file;
+              other revisions have `:insn' instead
+  :insn    -- for non-head revisions, a list of parsed instructions
+              in one of two forms, in both cases START meaning \"first
+              go to line START\":
+               - `(START k COUNT)' -- kill COUNT lines
+               - `(START i TEXT)'  -- insert TEXT (a string)
+              The list is in descending order by START.
+
+The `:insn' key is a keyword to distinguish it as a vc-rcs.el extension."
+  (setq buffer (get-buffer (or buffer (current-buffer))))
+  (set-buffer buffer)
+  ;; An RCS masterfile can be viewed as containing four regular (for the
+  ;; most part) sections: (a) the "headers", (b) the "rev headers", (c)
+  ;; the "description" and (d) the "rev bodies", in that order.  In the
+  ;; returned alist (see docstring), elements from (b) and (d) are
+  ;; combined pairwise to form the "revisions", while those from (a) and
+  ;; (c) are simply combined to form the "headers".
+  ;;
+  ;; Loosely speaking, each section contains a series of alternating
+  ;; "tags" and "printed representations".  In the (b) and (d), many
+  ;; such series can appear, and a revision number on a line by itself
+  ;; precedes the series of tags and printed representations associated
+  ;; with it.
+  ;;
+  ;; In (a) and (b), the printed representations (with the exception of
+  ;; the `comment' tag in the headers) terminate with a semicolon, which
+  ;; is NOT part of the "value" finally associated with the tag.  All
+  ;; other printed representations are in "@@-format"; there is an "@",
+  ;; the middle part (to be translated into the value), another "@" and
+  ;; a newline.  Each "@@" in the middle part indicates the position of
+  ;; a single "@" (and consequently the requirement of an additional
+  ;; initial step when translating to the value).
+  ;;
+  ;; Parser state includes vars that collect parts of the return value...
+  (let ((desc nil) (headers nil) (revs nil)
+        ;; ... as well as vars that support a single-pass, tag-assisted,
+        ;; minimal-data-copying scan.  Basically -- skirting around the
+        ;; grouping by revision required in (b) and (d) -- we repeatedly
+        ;; and context-sensitively read a tag (that MUST be present),
+        ;; determine the bounds of the printed representation, translate
+        ;; it into a value, and push the tag plus value onto one of the
+        ;; collection vars.  Finally, we return the parse tree
+        ;; incorporating the values of the collection vars (see "rv").
+        ;;
+        ;; A symbol or string to keep track of context (for error messages).
+        context
+        ;; A symbol, the current tag.
+        tok
+        ;; Region (begin and end buffer positions) of the printed
+        ;; representation for the current tag.
+        b e
+        ;; A list of buffer positions where "@@" can be found within the
+        ;; printed representation region.  For each location, we push two
+        ;; elements onto the list, 1+ and 2+ the location, respectively,
+        ;; with the 2+ appearing at the head.  In this way, the expression
+        ;;   `(,e ,@@-holes ,b)
+        ;; describes regions that can be concatenated (in reverse order)
+        ;; to "de-@@-format" the printed representation as the first step
+        ;; to translating it into some value.  See internal func `gather'.
+        @-holes)
+    (flet ((sw () (skip-chars-forward " \t\n")) ; i.e., `[:space:]'
+           (at (tag) (save-excursion (eq tag (read buffer))))
+           (to-eol () (buffer-substring-no-properties
+                       (point) (progn (forward-line 1)
+                                      (1- (point)))))
+           (to-semi () (setq b (point)
+                             e (progn (search-forward ";")
+                                      (1- (point)))))
+           (to-one@ () (setq @-holes nil
+                             b (progn (search-forward "@") (point))
+                             e (progn (while (and (search-forward "@")
+                                                  (= ?@ (char-after))
+                                                  (progn
+                                                    (push (point) @-holes)
+                                                    (forward-char 1)
+                                                    (push (point) @-holes))))
+                                      (1- (point)))))
+           (tok+val (set-b+e name &optional proc)
+                    (unless (eq name (setq tok (read buffer)))
+                      (error "Missing `%s' while parsing %s" name context))
+                    (sw)
+                    (funcall set-b+e)
+                    (cons tok (if proc
+                                  (funcall proc)
+                                (buffer-substring-no-properties b e))))
+           (k-semi (name &optional proc) (tok+val 'to-semi name proc))
+           (gather () (let ((pairs `(,e ,@@-holes ,b))
+                            acc)
+                        (while pairs
+                          (push (buffer-substring-no-properties
+                                 (cadr pairs) (car pairs))
+                                acc)
+                          (setq pairs (cddr pairs)))
+                        (apply 'concat acc)))
+           (k-one@ (name &optional later) (tok+val 'to-one@ name
+                                                   (if later
+                                                       (lambda () t)
+                                                     'gather))))
+      (save-excursion
+        (goto-char (point-min))
+        ;; headers
+        (setq context 'headers)
+        (flet ((hpush (name &optional proc)
+                      (push (k-semi name proc) headers)))
+          (hpush 'head)
+          (when (at 'branch)
+            (hpush 'branch))
+          (hpush 'access)
+          (hpush 'symbols
+                 (lambda ()
+                   (mapcar (lambda (together)
+                             (let ((two (split-string together ":")))
+                               (setcar two (intern (car two)))
+                               (setcdr two (cadr two))
+                               two))
+                           (split-string
+                            (buffer-substring-no-properties b e)))))
+          (hpush 'locks))
+        (push `(strict . ,(when (at 'strict)
+                            (search-forward ";")
+                            t))
+              headers)
+        (when (at 'comment)
+          (push (k-one@ 'comment) headers)
+          (search-forward ";"))
+        (when (at 'expand)
+          (push (k-one@ 'expand) headers)
+          (search-forward ";"))
+        (setq headers (nreverse headers))
+        ;; rev headers
+        (sw) (setq context 'rev-headers)
+        (while (looking-at "[0-9]")
+          (push `(,(to-eol)
+                  ,(k-semi 'date
+                           (lambda ()
+                             (let ((ls (mapcar 'string-to-number
+                                               (split-string
+                                                (buffer-substring-no-properties
+                                                 b e)
+                                                "\\."))))
+                               ;; Hack the year -- verified to be the
+                               ;; same algorithm used in RCS 5.7.
+                               (when (< (car ls) 100)
+                                 (setcar ls (+ 1900 (car ls))))
+                               (apply 'encode-time (nreverse ls)))))
+                  ,@(mapcar 'k-semi '(author state))
+                  ,(k-semi 'branches
+                           (lambda ()
+                             (split-string
+                              (buffer-substring-no-properties b e))))
+                  ,(k-semi 'next))
+                revs)
+          (sw))
+        (setq revs (nreverse revs))
+        ;; desc
+        (sw) (setq context 'desc
+                   desc (k-one@ 'desc))
+        ;; rev bodies
+        (let (acc
+              ;; Element of `revs' that initially holds only header info.
+              ;; "Pairwise combination" occurs when we add body info.
+              rev
+              ;; Components of the editing commands (aside from the actual
+              ;; text) that comprise the `text' printed representations
+              ;; (not including the "head" revision).
+              cmd start act
+              ;; Ascending (reversed) `@-holes' which the internal func
+              ;; `incg' pops to effect incremental gathering.
+              asc
+              ;; Function to extract text (for the `a' command), either
+              ;; `incg' or `buffer-substring-no-properties'.  (This is
+              ;; for speed; strictly speaking, it is sufficient to use
+              ;; only the former since it behaves identically to the
+              ;; latter in the absense of "@@".)
+              sub)
+          (flet ((incg (beg end) (let ((b beg) (e end) @-holes)
+                                   (while (and asc (< (car asc) e))
+                                     (push (pop asc) @-holes))
+                                   ;; Self-deprecate when work is done.
+                                   ;; Folding many dimensions into one.
+                                   ;; Thanks B.Mandelbrot, for complex sum.
+                                   ;; O beauteous math! --the Unvexed Bum
+                                   (unless asc
+                                     (setq sub 'buffer-substring-no-properties))
+                                   (gather))))
+            (while (and (sw)
+                        (not (eobp))
+                        (setq context (to-eol)
+                              rev (or (assoc context revs)
+                                      (error "Rev `%s' has body but no head"
+                                             context))))
+              (push (k-one@ 'log) (cdr rev))
+              ;; For rev body `text' tags, delay translation slightly...
+              (push (k-one@ 'text t) (cdr rev))
+              ;; ... until we decide which tag and value is appropriate to
+              ;; collect.  For the "head" revision, compute the value of the
+              ;; `text' printed representation by simple `gather'.  For all
+              ;; other revisions, replace the `text' tag+value with `:insn'
+              ;; plus value, always scanning in-place.
+              (if (string= context (cdr (assq 'head headers)))
+                  (setcdr (cadr rev) (gather))
+                (if @-holes
+                    (setq asc (nreverse @-holes)
+                          sub 'incg)
+                  (setq sub 'buffer-substring-no-properties))
+                (goto-char b)
+                (setq acc nil)
+                (while (< (point) e)
+                  (forward-char 1)
+                  (setq cmd (char-before)
+                        start (read (current-buffer))
+                        act (read (current-buffer)))
+                  (forward-char 1)
+                  (push (case cmd
+                          (?d
+                           ;; `d' means "delete lines".
+                           ;; For Emacs spirit, we use `k' for "kill".
+                           `(,start k ,act))
+                          (?a
+                           ;; `a' means "append after this line" but
+                           ;; internally we normalize it so that START
+                           ;; specifies the actual line for insert, thus
+                           ;; requiring less hair in the realization algs.
+                           ;; For Emacs spirit, we use `i' for "insert".
+                           `(,(1+ start) i
+                             ,(funcall sub (point) (progn (forward-line act)
+                                                          (point)))))
+                          (t (error "Bad command `%c' in `text' for rev `%s'"
+                                    cmd context)))
+                        acc))
+                (goto-char (1+ e))
+                (setcar (cdr rev) (cons :insn acc)))))))
+      ;; rv
+      `((headers ,desc ,@headers)
+        (revisions ,@revs)))))
+
 (provide 'vc-rcs)
 
 ;; arch-tag: 759b4916-5b0d-431d-b647-b185b8c652cf
--- a/lisp/vc.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/vc.el	Mon Nov 22 11:06:39 2004 +0000
@@ -321,11 +321,13 @@
 ;;   vc-BACKEND-diff.  The default implementation does an explicit tree
 ;;   walk, calling vc-BACKEND-diff for each individual file.
 ;;
-;; - annotate-command (file buf rev)
+;; - annotate-command (file buf &optional rev)
 ;;
-;;   If this function is provided, it should produce an annotated version
-;;   of FILE in BUF, relative to version REV.  This is currently only
-;;   implemented for CVS, using the `cvs annotate' command.
+;;   If this function is provided, it should produce an annotated display
+;;   of FILE in BUF, relative to version REV.  Annotation means each line
+;;   of FILE displayed is prefixed with version information associated with
+;;   its addition (deleted lines leave no history) and that the text of the
+;;   file is fontified according to age.
 ;;
 ;; - annotate-time ()
 ;;
@@ -645,7 +647,6 @@
   :type '(repeat number)
   :group 'vc)
 
-;; vc-annotate functionality (CVS only).
 (defvar vc-annotate-mode-map
   (let ((m (make-sparse-keymap)))
     (define-key m [menu-bar] (make-sparse-keymap "VC-Annotate"))
--- a/lisp/winner.el	Sat Nov 13 18:34:40 2004 +0000
+++ b/lisp/winner.el	Mon Nov 22 11:06:39 2004 +0000
@@ -44,29 +44,24 @@
 (eval-when-compile
   (require 'cl))
 
-(eval-when-compile
-  (cond
-   ((eq (aref (emacs-version) 0) ?X)
-    (defmacro winner-active-region ()
-      '(region-active-p))
-    (defsetf winner-active-region () (store)
+
+(defmacro winner-active-region ()
+  (if (fboundp 'region-active-p)
+      '(region-active-p)
+    'mark-active))
+
+(defsetf winner-active-region () (store)
+  (if (fboundp 'zmacs-activate-region)
       `(if ,store (zmacs-activate-region)
-	 (zmacs-deactivate-region))))
-   (t (defmacro winner-active-region ()
-	'mark-active)
-      (defsetf winner-active-region () (store)
-	`(setq mark-active ,store)))) )
+	 (zmacs-deactivate-region))
+    `(setq mark-active ,store)))
 
-(eval-and-compile
-  (cond
-   ((eq (aref (emacs-version) 0) ?X)
-    (defalias 'winner-edges 'window-pixel-edges)
-    (defsubst winner-window-list ()
-      (remq (minibuffer-window)
-            (window-list nil 0))))
-   (t (defalias 'winner-edges 'window-edges)
-      (defsubst winner-window-list ()
-        (window-list nil 0)))) )
+(defalias 'winner-edges
+  (if (featurep 'xemacs) 'window-pixel-edges 'window-edges))
+(defalias 'winner-window-list
+  (if (featurep 'xemacs)
+      (lambda () (delq (minibuffer-window) (window-list nil 0)))
+    (lambda () (window-list nil 0))))
 
 (require 'ring)
 
@@ -86,8 +81,7 @@
   "Toggle winner-mode.
 Setting this variable directly does not take effect;
 use either \\[customize] or the function `winner-mode'."
-  :set #'(lambda (symbol value)
-	   (winner-mode (or value 0)))
+  :set #'(lambda (symbol value) (funcall symbol (or value 0)))
   :initialize 'custom-initialize-default
   :type    'boolean
   :group   'winner
@@ -363,7 +357,12 @@
   :type 'hook
   :group 'winner)
 
-(defvar winner-mode-map nil "Keymap for Winner mode.")
+(defvar winner-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [(control c) left] 'winner-undo)
+    (define-key map [(control c) right] 'winner-redo)
+    map)
+  "Keymap for Winner mode.")
 
 ;; Check if `window-configuration-change-hook' is working.
 (defun winner-hook-installed-p ()
@@ -389,7 +388,7 @@
       (cond
        ((winner-hook-installed-p)
 	(add-hook 'window-configuration-change-hook 'winner-change-fun)
-	(add-hook 'post-command-hook 'winner-save-old-configurations))
+      (add-hook 'post-command-hook 'winner-save-old-configurations))
        (t (add-hook 'post-command-hook 'winner-save-conditionally)))
       (add-hook 'minibuffer-setup-hook 'winner-save-unconditionally)
       (setq winner-modified-list (frame-list))
@@ -472,17 +471,11 @@
 
 ;;; To be evaluated when the package is loaded:
 
-(unless winner-mode-map
-  (setq winner-mode-map (make-sparse-keymap))
-  (define-key winner-mode-map [(control c) left] 'winner-undo)
-  (define-key winner-mode-map [(control c) right] 'winner-redo))
-
 (unless (or (assq 'winner-mode minor-mode-map-alist)
 	    winner-dont-bind-my-keys)
   (push (cons 'winner-mode winner-mode-map)
 	minor-mode-map-alist))
 
 (provide 'winner)
-
-;;; arch-tag: 686d1c1b-010e-42ca-a192-b5685112418f
+;; arch-tag: 686d1c1b-010e-42ca-a192-b5685112418f
 ;;; winner.el ends here
--- a/lispref/ChangeLog	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/ChangeLog	Mon Nov 22 11:06:39 2004 +0000
@@ -1,3 +1,64 @@
+2004-11-21  Jesper Harder  <harder@ifa.au.dk>
+
+	* processes.texi (Synchronous Processes, Output from Processes):
+	Markup fix.
+
+2004-11-20  Richard M. Stallman  <rms@gnu.org>
+
+	* positions.texi (Skipping Characters): skip-chars-forward
+	now handles char classes.
+
+	* intro.texi (Printing Notation): Avoid confusion of `print'
+	when explaining @print.
+
+	* macros.texi (Argument Evaluation): Fix 1st `for' expansion example.
+
+	* display.texi (Display Table Format): Minor fix.
+
+	* streams.texi (Output Functions): Fix print example.
+
+	* Makefile.in (elisp): New target.
+	(dist): Depend on $(infodir)/elisp, not elisp.
+	Copy the info files from $(infodir).
+
+	* minibuf.texi (Text from Minibuffer): Document KEEP-ALL arg in
+	read-from-minibuffer.
+
+	* searching.texi (Regexp Search): Rename that to search-spaces-regexp.
+
+2004-11-19  Richard M. Stallman  <rms@gnu.org>
+
+	* searching.texi (Regexp Search): Add search-whitespace-regexp.
+
+2004-11-19  CHENG Gao  <chenggao@gmail.com>  (tiny change)
+
+	* tips.texi (Coding Conventions): Fix typo.
+
+2004-11-16  Richard M. Stallman  <rms@gnu.org>
+
+	* tips.texi (Coding Conventions): Separate defvar and require
+	methods to avoid warnings.  Use require only when there are many
+	functions and variables from that package.
+
+	* minibuf.texi (Minibuffer Completion): When ignoring case,
+	predicate must not be case-sensitive.
+
+	* debugging.texi (Function Debugging, Explicit Debug): Clarified.
+	(Test Coverage): Don't talk about "splotches".  Clarified.
+
+2004-11-16  Thien-Thi Nguyen  <ttn@gnu.org>
+
+	* frames.texi (Window Frame Parameters): Fix typo.
+
+2004-11-15  Kim F. Storm  <storm@cua.dk>
+
+	* symbols.texi (Other Plists): Note that plist-get may signal error.
+	Add safe-plist-get.
+
+2004-11-15  Thien-Thi Nguyen  <ttn@gnu.org>
+
+	* modes.texi (Font Lock Basics): Fix typo.
+
 2004-11-08  Richard M. Stallman  <rms@gnu.org>
 
 	* syntax.texi (Syntax Table Functions): Add syntax-after.
--- a/lispref/Makefile.in	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/Makefile.in	Mon Nov 22 11:06:39 2004 +0000
@@ -106,11 +106,16 @@
 elisp.dvi: $(srcs)
 	$(TEXI2DVI) -I $(srcdir) $(srcdir)/elisp.texi
 
+# This is for use in a separate distro of the Emacs Lisp manual.
 install: elisp
 	$(srcdir)/mkinstalldirs $(infodir)
 	cp elisp elisp-[1-9] elisp-[1-9][0-9] $(infodir)
 	${INSTALL_INFO} --info-dir=${infodir} ${infodir}/elisp
 
+# This is for use in a separate distro of the Emacs Lisp manual.
+elisp: $(srcs)
+	$(MAKEINFO) -I. -I$(srcdir) $(srcdir)/elisp.texi
+
 clean:
 	rm -f *.toc *.aux *.log *.cp *.cps *.fn *.fns *.tp *.tps \
               *.vr *.vrs *.pg *.pgs *.ky *.kys
@@ -121,14 +126,15 @@
 maintainer-clean: clean
 	rm -f elisp elisp-[1-9] elisp-[1-9][0-9] elisp.dvi elisp.oaux
 
-dist: elisp elisp.dvi
+dist: $(infodir)/elisp elisp.dvi
 	-rm -rf temp
 	-mkdir temp
 	-mkdir temp/$(manual)
 	-ln $(srcdir)/README $(srcdir)/configure.in $(srcdir)/configure \
  $(srcdir)/Makefile.in $(srcs) \
  $(srcdir)/../man/texinfo.tex \
- elisp.dvi elisp.aux elisp.??s elisp elisp-[1-9] elisp-[1-9][0-9] \
+ elisp.dvi elisp.aux elisp.??s \
+ $(infodir)/elisp $(infodir)/elisp-[1-9] $(infodir)/elisp-[1-9][0-9] \
  temp/$(manual)
 	-(cd temp/$(manual); rm -f mkinstalldirs)
 	cp $(srcdir)/mkinstalldirs temp/$(manual)
--- a/lispref/debugging.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/debugging.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -221,6 +221,8 @@
 discarded by the redefinition.  In effect, redefining the function
 cancels the break-on-entry feature for that function.
 
+Here's an example to illustrate use of this function:
+
 @example
 @group
 (defun fact (n)
@@ -276,9 +278,9 @@
   You can cause the debugger to be called at a certain point in your
 program by writing the expression @code{(debug)} at that point.  To do
 this, visit the source file, insert the text @samp{(debug)} at the
-proper place, and type @kbd{C-M-x}.  @strong{Warning:} if you do this
-for temporary debugging purposes, be sure to undo this insertion before
-you save the file!
+proper place, and type @kbd{C-M-x} (@code{eval-defun}, a Lisp mode key
+binding).  @strong{Warning:} if you do this for temporary debugging
+purposes, be sure to undo this insertion before you save the file!
 
   The place where you insert @samp{(debug)} must be a place where an
 additional form can be evaluated and its value ignored.  (If the value
@@ -746,20 +748,21 @@
 @findex testcover-start
 @findex testcover-mark-all
 @findex testcover-next-mark
-  You can do coverage testing for a file of Lisp code by first using
-the command @kbd{M-x testcover-start @key{RET} @var{file} @key{RET}}
-to instrument it.  Then test your code by calling it one or more
-times.  Then use the command @kbd{M-x testcover-mark-all} to display
-``splotches'' on the code to show where coverage is insufficient.  The
-command @kbd{M-x testcover-next-mark} will move point forward to the
-next spot that has a splotch.
+  You can do coverage testing for a file of Lisp code by loading the
+@code{testcover} library and using the command @kbd{M-x
+testcover-start @key{RET} @var{file} @key{RET}} to instrument the
+code.  Then test your code by calling it one or more times.  Then use
+the command @kbd{M-x testcover-mark-all} to display colored highlights
+on the code to show where coverage is insufficient.  The command
+@kbd{M-x testcover-next-mark} will move point forward to the next
+highlighted spot.
 
-  Normally, a red splotch indicates the form was never completely
-evaluated; a brown splotch means it always evaluated to the same value
-(meaning there has been little testing of what is done with the
-result).  However, the red splotch is skipped for forms that can't
+  Normally, a red highlight indicates the form was never completely
+evaluated; a brown highlight means it always evaluated to the same
+value (meaning there has been little testing of what is done with the
+result).  However, the red highlight is skipped for forms that can't
 possibly complete their evaluation, such as @code{error}.  The brown
-splotch is skipped for forms that are expected to always evaluate to
+highlight is skipped for forms that are expected to always evaluate to
 the same value, such as @code{(setq x 14)}.
 
   For difficult cases, you can add do-nothing macros to your code to
--- a/lispref/display.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/display.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -4460,7 +4460,7 @@
 @item 1
 The glyph for the end of a continued line (the default is @samp{\}).
 Newer Emacs versions, on some platforms, display curved arrows to
-indicate truncation---the display table has no effect in these
+indicate continuation---the display table has no effect in these
 situations.
 @item 2
 The glyph for indicating a character displayed as an octal character
--- a/lispref/frames.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/frames.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -517,8 +517,8 @@
 Display a vertical bar @var{width} pixels wide between characters.
 @item hbar
 Display a horizontal bar.
-@item (bar . @var{width})
-Display a horizontal bar @var{width} pixels high.
+@item (hbar . @var{height})
+Display a horizontal bar @var{height} pixels high.
 @end table
 
 @vindex cursor-type
--- a/lispref/intro.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/intro.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -263,12 +263,13 @@
 displayed in the echo area.
 
   Examples in this manual indicate printed text with @samp{@print{}},
-irrespective of where that text goes.  The value returned by evaluating
-the form (here @code{bar}) follows on a separate line.
+irrespective of where that text goes.  The value returned by
+evaluating the form (here @code{bar}) follows on a separate line with
+@samp{@result{}}.
 
 @example
 @group
-(progn (print 'foo) (print 'bar))
+(progn (prin1 'foo) (princ "\n") (print 'bar))
      @print{} foo
      @print{} bar
      @result{} bar
--- a/lispref/macros.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/macros.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -448,7 +448,7 @@
 (let ((i 1))
   (while (<= i 3)
     (setq square (* i i))
-    (princ (format "%d      %d" i square))
+    (princ (format "\n%d %d" i square))
     (inc i)))
 @end group
 @group
--- a/lispref/minibuf.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/minibuf.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -118,7 +118,7 @@
 reading the arguments for a command, in the @code{interactive}
 specification.  @xref{Defining Commands}.
 
-@defun read-from-minibuffer prompt-string &optional initial-contents keymap read hist default inherit-input-method
+@defun read-from-minibuffer prompt-string &optional initial-contents keymap read hist default inherit-input-method keep-all
 This function is the most general way to get input through the
 minibuffer.  By default, it accepts arbitrary text and returns it as a
 string; however, if @var{read} is non-@code{nil}, then it uses
@@ -170,6 +170,9 @@
 Representations}) from whichever buffer was current before entering the
 minibuffer.
 
+If @var{keep-all} is non-@code{nil}, even empty and duplicate inputs
+are added to the history list.
+
 Use of @var{initial-contents} is mostly deprecated; we recommend using
 a non-@code{nil} value only in conjunction with specifying a cons cell
 for @var{hist}.  @xref{Initial Input}.
@@ -841,9 +844,11 @@
 (@pxref{Text Representations}) from whichever buffer was current before
 entering the minibuffer.
 
-Completion ignores case when comparing the input against the possible
-matches, if the built-in variable @code{completion-ignore-case} is
-non-@code{nil}.  @xref{Basic Completion}.
+If the built-in variable @code{completion-ignore-case} is
+non-@code{nil}, completion ignores case when comparing the input
+against the possible matches.  @xref{Basic Completion}.  In this mode
+of operation, @var{predicate} must also ignore case, or you will get
+surprising results.
 
 Here's an example of using @code{completing-read}:
 
--- a/lispref/modes.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/modes.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -2000,7 +2000,7 @@
 syntactic fontification (of strings and comments) is not performed.
 
 The third element, @var{case-fold}, specifies the value of
-@code{font-lock-case-fold-search}.  If it is non-@code{nil}, Font Lock
+@code{font-lock-keywords-case-fold-search}.  If it is non-@code{nil}, Font Lock
 mode ignores case when searching as directed by
 @code{font-lock-keywords}.
 
--- a/lispref/positions.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/positions.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -795,15 +795,6 @@
 ---------- Buffer: foo ----------
 @end group
 @end example
-
-Note that char classes are not currently supported in
-@var{character-set}; they will be treated as literals.  Thus you
-cannot use @code{"[:alpha:]"} instead of @code{"a-zA-Z"} to include
-non-@acronym{ASCII} letters.  A way to skip forward over all letters is:
-
-@example
-(re-search-forward "\\=[[:alpha:]]*" nil t)
-@end example
 @end defun
 
 @defun skip-chars-backward character-set &optional limit
--- a/lispref/processes.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/processes.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -328,7 +328,7 @@
 
 Some file handlers may not support all combinations and forms of the
 arguments @var{infile}, @var{buffer}, and @var{display}.  For example,
-some file handlers might behave as if @var{display} was nil,
+some file handlers might behave as if @var{display} was @code{nil},
 regardless of the value actually passed.  As another example, some
 file handlers might not support separating standard output and error
 output by way of the @var{buffer} argument.
@@ -975,7 +975,7 @@
 output data is read in very small blocks, potentially resulting in
 very poor performance.  This behaviour can be remedied to some extent
 by setting the variable @var{process-adaptive-read-buffering} to a
-non-nil value (the default), as it will automatically delay reading
+non-@code{nil} value (the default), as it will automatically delay reading
 from such processes, thus allowing them to produce more output before
 Emacs tries to read it.
 @end defvar
@@ -1316,7 +1316,7 @@
 
 @c Emacs 21.4 feature
 If @var{process} is a process, and the argument @var{just-this-one} is
-non-nil, only output from that process is handled, suspending output
+non-@code{nil}, only output from that process is handled, suspending output
 from other processes until some output has been received from that
 process or the timeout expires.  If @var{just-this-one} is an integer,
 also inhibit running timers.  This feature is generally not
--- a/lispref/searching.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/searching.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -1001,6 +1001,15 @@
 @end example
 @end defun
 
+@defvar search-spaces-regexp
+If this variable is non-@code{nil}, it should be a regular expression
+that says how to search for whitespace.  In that case, any group of
+spaces within in a regular expression being searched for stands for
+use of this regular expression.  However, spaces inside of constructs
+such as @samp{[@dots{}]} and @samp{*}, @samp{+}, @samp{?} are not
+affected by @code{search-spaces-regexp}.
+@end defvar
+
 @node POSIX Regexps
 @section POSIX Regular Expression Searching
 
--- a/lispref/streams.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/streams.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -574,7 +574,6 @@
      @print{} "the hat"
      @print{}
      @print{} " came back"
-     @print{}
      @result{} " came back"
 @end group
 @end example
--- a/lispref/symbols.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/symbols.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -528,11 +528,29 @@
 
 @defun plist-get plist property
 This returns the value of the @var{property} property
-stored in the property list @var{plist}.  For example,
+stored in the property list @var{plist}.
+A @code{wrong-type-argument} error may be signaled if @var{plist} is
+not a valid property list.  For example,
 
 @example
 (plist-get '(foo 4) 'foo)
      @result{} 4
+(plist-get '(foo 4 bad) 'foo)
+     @result{} 4
+(plist-get '(foo 4 bad) 'bar)
+     @result{} @code{wrong-type-argument} error
+@end example
+@end defun
+
+@defun safe-plist-get plist property
+This returns the value of the @var{property} property
+stored in the property list @var{plist}.  Unlike @code{plist-get}, it
+accepts a malformed @var{plist} argument and always returns @code{nil}
+if @var{property} is not found in the @var{plist}.  For example,
+
+@example
+(safe-plist-get '(foo 4 bad) 'bar)
+     @result{} nil
 @end example
 @end defun
 
--- a/lispref/tips.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/lispref/tips.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -370,25 +370,34 @@
 
 @item
 Try to avoid compiler warnings about undefined free variables, by adding
-@code{defvar} definitions for these variables.
+dummy @code{defvar} definitions for these variables, like this:
+
+@example
+(defvar foo)
+@end example
 
-Sometimes adding a @code{require} for another package is useful to avoid
-compilation warnings for variables and functions defined in that
-package.  If you do this, often it is better if the @code{require} acts
-only at compile time.  Here's how to do that:
+Such a definition has no effect except to tell the compiler
+not to warn about uses of the variable @code{foo} in this file.
+
+@item
+If you use many functions and variables from a certain file, you can
+add a @code{require} for that package to avoid compilation warnings
+for them.  It is better if the @code{require} acts only at compile
+time.  Here's how to do this:
 
 @example
 (eval-when-compile
-  (require 'foo)
-  (defvar bar-baz))
+  (require 'foo))
 @end example
 
-If you bind a variable in one function, and use it or set it in another
-function, the compiler warns about the latter function unless the
-variable has a definition.  But often these variables have short names,
-and it is not clean for Lisp packages to define such variable names.
-Therefore, you should rename the variable to start with the name prefix
-used for the other functions and variables in your package.
+@item
+If you bind a variable in one function, and use it or set it in
+another function, the compiler warns about the latter function unless
+the variable has a definition.  But adding a definition would be
+unclean if the variable has a short name, since Lisp packages should
+not define short variable names.  The right thing to do is to rename
+this variable to start with the name prefix used for the other
+functions and variables in your package.
 
 @item
 Indent each function with @kbd{C-M-q} (@code{indent-sexp}) using the
--- a/man/ChangeLog	Sat Nov 13 18:34:40 2004 +0000
+++ b/man/ChangeLog	Mon Nov 22 11:06:39 2004 +0000
@@ -1,3 +1,16 @@
+2004-11-20  Richard M. Stallman  <rms@gnu.org>
+
+	* text.texi (Fill Prefix): M-q doesn't apply fill prefix to first line.
+
+2004-11-09  Lars Brinkhoff  <lars@nocrew.org>
+
+	* building.texi (Lisp Eval): Delete hyphen in section name.
+
+2004-11-19  Thien-Thi Nguyen  <ttn@gnu.org>
+
+	* files.texi (Old Versions):
+	No longer document annotation as "CVS only".
+
 2004-11-10  Andre Spiegel  <spiegel@gnu.org>
 
 	* files.texi (Version Control): Rewrite the introduction about
@@ -12,10 +25,10 @@
 
 2004-11-03  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
 
-	* frames.texi (Dialog Boxes): 
-	* idlwave.texi (Continued Statement Indentation): 
+	* frames.texi (Dialog Boxes):
+	* idlwave.texi (Continued Statement Indentation):
 	* reftex.texi (Options (Index Support)):
-	(Displaying and Editing the Index, Table of Contents): 
+	(Displaying and Editing the Index, Table of Contents):
 	* speedbar.texi (Creating a display, Major Display Modes): Replace
 	non-nil with non-@code{nil}.
 
@@ -49,8 +62,8 @@
 2004-10-18  Jay Belanger  <belanger@truman.edu>
 
 	* calc.texi (Reporting Bugs):  Changed the address that bugs
-	should be sent to. 
-	
+	should be sent to.
+
 2004-10-15  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus.texi (New Features): Add 5.11.
@@ -69,7 +82,7 @@
 
 	* calc.texi (Help Commands):  Changed the descriptions of
 	calc-describe-function and calc-describe-variable to match their
-	current behavior. 
+	current behavior.
 
 2004-10-12  Reiner Steib  <Reiner.Steib@gmx.de>
 
@@ -236,7 +249,7 @@
 
 	* calc.texi (Notations Used in This Manual): Put in an earlier
 	mention that DEL could be called Backspace.
-	
+
 2004-09-20  Richard M. Stallman  <rms@gnu.org>
 
 	* custom.texi (Hooks): Explain using setq to clear out a hook.
--- a/man/Makefile.in	Sat Nov 13 18:34:40 2004 +0000
+++ b/man/Makefile.in	Mon Nov 22 11:06:39 2004 +0000
@@ -20,9 +20,8 @@
 # the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 # Boston, MA 02111-1307, USA.
 
-# Where to find the source code.  The source code for Emacs's C kernel is
-# expected to be in ${srcdir}/src, and the source code for Emacs's
-# utility programs is expected to be in ${srcdir}/lib-src.  This is
+# Where to find the source code.  $(srcdir) will be the man
+# subdirectory of the source tree.  This is
 # set by the configure script's `--srcdir' option.
 srcdir=@srcdir@
 top_srcdir=@top_srcdir@
--- a/man/building.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/man/building.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -949,7 +949,7 @@
 @code{t} if you want to try loading them.
 
 @node Lisp Eval
-@section Evaluating Emacs-Lisp Expressions
+@section Evaluating Emacs Lisp Expressions
 @cindex Emacs-Lisp mode
 @cindex mode, Emacs-Lisp
 
--- a/man/files.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/man/files.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -1502,7 +1502,7 @@
 Compare the specified two versions of @var{file}.
 
 @item C-x v g
-Display the result of the CVS annotate command using colors.
+Display the file with per-line version information and using colors.
 @end table
 
 @findex vc-version-other-window
@@ -1553,9 +1553,10 @@
 
 @findex vc-annotate
 @kindex C-x v g
-  For CVS-controlled files, you can display the result of the CVS
-annotate command, using colors to enhance the visual appearance.  Use
-the command @kbd{M-x vc-annotate} to do this.  It creates a new buffer
+  For some backends, you can display the file @dfn{annotated} with
+per-line version information and using colors to enhance the visual
+appearance, with the the command @kbd{M-x vc-annotate}.
+It creates a new buffer
 to display file's text, colored to show how old each part is.  Text
 colored red is new, blue means old, and intermediate colors indicate
 intermediate ages.  By default, the time scale is 360 days, so that
--- a/man/idlwave.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/man/idlwave.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -1,34 +1,38 @@
 \input texinfo  @c -*-texinfo-*-
 @c %**start of header
-@setfilename ../info/idlwave
+@setfilename idlwave
 @settitle IDLWAVE User Manual
+@dircategory Emacs
+@direntry
+* IDLWAVE: (idlwave).	Major mode and shell for IDL files.
+@end direntry
 @synindex ky cp
 @syncodeindex vr cp
 @syncodeindex fn cp
-@set VERSION 4.15
-@set EDITION 4.15
-@set IDLVERSION 5.5
-@set NSYSROUTINES 1324
-@set NSYSKEYWORDS 6129
-@set DATE September 2002
+@set VERSION 5.5
+@set EDITION 5.5
+@set IDLVERSION 6.1
+@set NSYSROUTINES 1850
+@set NSYSKEYWORDS 7685
+@set DATE November, 2004
 @set AUTHOR J.D. Smith & Carsten Dominik
-@set AUTHOR-EMAIL dominik@@astro.uva.nl
+@set AUTHOR-EMAIL jdsmith@@as.arizona.edu
 @set MAINTAINER J.D. Smith
 @set MAINTAINER-EMAIL jdsmith@@as.arizona.edu
 @set IDLWAVE-HOMEPAGE http://idlwave.org/
 @c %**end of header
-
-@copying
+@finalout
+
+@ifinfo 
 This file documents IDLWAVE, a major mode for editing IDL files with
 Emacs, and interacting with an IDL shell run as a subprocess.
 
 This is edition @value{EDITION} of the IDLWAVE User Manual for IDLWAVE
 @value{VERSION}
 
-Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation,
-Inc.
-
-@quotation
+Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004 Free Software
+Foundation, Inc.
+
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.1 or
 any later version published by the Free Software Foundation; with no
@@ -45,27 +49,38 @@
 Documentation License.  If you want to distribute this document
 separately from the collection, you can do so by adding a copy of the
 license to the document, as described in section 6 of the license.
-@end quotation
-@end copying
-
-@dircategory Emacs
-@direntry
-* IDLWAVE: (idlwave).	Major mode and shell for IDL files.
-@end direntry
-
-@finalout
+@end ifinfo
 
 @titlepage
 @title IDLWAVE User Manual
 @subtitle Emacs major mode and shell for IDL
 @subtitle Edition @value{EDITION}, @value{DATE}
 
-@author by Carsten Dominik & J.D. Smith
+@author by J.D. Smith & Carsten Dominik
 @page
 This is edition @value{EDITION} of the @cite{IDLWAVE User Manual} for
 IDLWAVE version @value{VERSION}, @value{DATE}.
+@sp 2
+Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004 Free Software
+Foundation, Inc.
+@sp 2
 @cindex Copyright, of IDLWAVE
-@insertcopying
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
+
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 @end titlepage
 @contents
 
@@ -75,23 +90,24 @@
 
 @node Top, Introduction, (dir), (dir)
 
-IDLWAVE is a package which supports editing source for the
-Interactive Data Language (IDL), and running IDL as an inferior
-shell.
+IDLWAVE is a package which supports editing source code written in the
+Interactive Data Language (IDL), and running IDL as an inferior shell.
 
 @end ifnottex
 
 @menu
-* Introduction::                What IDLWAVE is and what it's not
+* Introduction::                What IDLWAVE is, and what it is not
 * IDLWAVE in a Nutshell::       One page quick-start guide
 * Getting Started::             Tutorial
-* The IDLWAVE Major Mode::      The mode to edit IDL programs
-* The IDLWAVE Shell::           The mode to run IDL as an inferior program
-* Installation::                How to Install or Upgrade
+* The IDLWAVE Major Mode::      The mode for editing IDL programs
+* The IDLWAVE Shell::           The mode for running IDL as an inferior program
+* Installation::                How to Install or Upgrade               
 * Acknowledgements::            Who did what
-* Sources of Routine Info::     How does IDLWAVE know about routine XYZ
-* Configuration Examples::      The user is king...
+* Sources of Routine Info::     How does IDLWAVE know about routine XYZ     
+* HTML Help Browser Tips::      
+* Configuration Examples::      The user is king
 * Windows and MacOS::           What still works, and how
+* Troubleshooting::             When good computers turn bad
 * Index::                       Fast access
 
 @detailmenu
@@ -99,9 +115,9 @@
 
 Getting Started (Tutorial)
 
-* Lesson I -- Development Cycle::
-* Lesson II -- Customization::
-* Lesson III -- Library Catalog::
+* Lesson I -- Development Cycle::  
+* Lesson II -- Customization::  
+* Lesson III -- User Catalog::  
 
 The IDLWAVE Major Mode
 
@@ -121,17 +137,22 @@
 Code Formatting
 
 * Code Indentation::            Reflecting the logical structure
-* Continued Statement Indentation::
+* Continued Statement Indentation::  
 * Comment Indentation::         Special indentation for comment lines
 * Continuation Lines::          Splitting statements over lines
 * Syntax Highlighting::         Font-lock support
 * Octals and Highlighting::     Why "123 causes problems
 
+Online Help
+
+* Help with HTML Documentation::  
+* Help with Source::            
+
 Completion
 
 * Case of Completed Words::     CaseOFcomPletedWords
 * Object Method Completion and Class Ambiguity::  obj->Method, what?
-* Object Method Completion in the Shell::
+* Object Method Completion in the Shell::  
 * Class and Keyword Inheritance::  obj->Method, _EXTRA=e
 * Structure Tag Completion::    Completing state.Tag
 
@@ -145,32 +166,38 @@
 
 * Starting the Shell::          How to launch IDL as a subprocess
 * Using the Shell::             Interactively working with the Shell
-* Commands Sent to the Shell::
-* Debugging IDL Programs::
-* Examining Variables::
-* Custom Expression Examination::
+* Commands Sent to the Shell::  
+* Debugging IDL Programs::      
+* Examining Variables::         
+* Custom Expression Examination::  
 
 Debugging IDL Programs
 
-* Debug Key Bindings::
-* Compiling Programs::
-* Breakpoints and Stepping::
-* Walking the Calling Stack::
+* A Tale of Two Modes::         
+* Debug Key Bindings::          
+* Breakpoints and Stepping::    
+* Compiling Programs::          
+* Walking the Calling Stack::   
+* Electric Debug Mode::         
 
 Installation
 
 * Installing IDLWAVE::          How to install the distribution
 * Installing Online Help::      Where to get the additional files needed
-* Upgrading from idl.el::       Necessary configuration changes
 
 Sources of Routine Info
 
 * Routine Definitions::         Where IDL Routines are defined.
 * Routine Information Sources::  So how does IDLWAVE know about...
-* Library Catalog::             Scanning the Libraries for Routine Info
+* Catalogs::                    
 * Load-Path Shadows::           Routines defined in several places
 * Documentation Scan::          Scanning the IDL Manuals
 
+Catalogs
+
+* Library Catalogs::            
+* User Catalog::                
+
 @end detailmenu
 @end menu
 
@@ -185,38 +212,44 @@
 @cindex @file{idl-shell.el}
 @cindex Feature overview
 
-IDLWAVE is a package which supports editing source files for the
-Interactive Data Language (IDL@footnote{IDL is a registered trademark of
-Research Systems, Inc., a Kodak Company}), and for running IDL as an
-inferior shell@footnote{Note that this package has nothing to do with
-the Interface Definition Language, part of the Common Object Request
-Broker Architecture (CORBA)}.  It can also be used for editing source
-files for the related WAVE/CL language, but with only limited
-support.
-
-IDLWAVE consists of two main parts: a major mode for editing IDL source
-files files (@code{idlwave-mode}) and a mode for running the IDL program
-as an inferior shell (@code{idlwave-shell-mode}).  Although one mode can
-be used without the other, both work together closely to form a complete
-development environment. Here is a brief summary of what IDLWAVE does:
+IDLWAVE is a package which supports editing source files written in
+the Interactive Data Language (IDL@footnote{IDL is a registered
+trademark of Research Systems, Inc., a Kodak Company}), and running
+IDL as an inferior shell@footnote{Note that this package has nothing
+to do with the Interface Definition Language, part of the Common
+Object Request Broker Architecture (CORBA)}@footnote{IDLWAVE can also
+be used for editing source files for the related WAVE/CL language, but
+with only limited support.}.  It is a feature-rich replacement for the
+IDLDE development environment bundled with IDL, and uses the full
+power of Emacs to make editing and running IDL programs easier,
+quicker, and more structured.
+
+IDLWAVE consists of two main parts: a major mode for editing IDL
+source files (@code{idlwave-mode}) and a mode for running the IDL
+program as an inferior shell (@code{idlwave-shell-mode}).  Although
+one mode can be used without the other, both work together closely to
+form a complete development environment. Here is a brief summary of
+what IDLWAVE does:
 
 @itemize @bullet
-@item
-Code indentation and formatting.
+@item 
+Smart code indentation and automatic-formatting.
 @item
 Three level syntax highlighting support.
-@item
+@item 
 Context-sensitive display of calling sequences and keywords for more
-than 1000 native IDL routines, extendible to any number of additional
-routines in your local IDL libraries.
+than 1000 native IDL routines, extendible to any additional number of
+local routines, and already available with many pre-scanned libraries.
+@item
+Routine name space conflict search with likelihood-of-use ranking.
 @item
-Routine name space conflict search, likelihood-of-use ranking.
-@item
-Fast, context-sensitive online help.
+Fast, context-sensitive online HTML help, or source-header help for
+undocumented routines.
 @item
-Context sensitive completion of routine names and keywords.
+Context sensitive completion of routine names, keywords, system
+variables, class names and much more.
 @item
-Easy insertion of code templates.
+Easy insertion of code templates and abbreviations of common constructs.
 @item
 Automatic corrections to enforce a variety of customizable coding
 standards.
@@ -231,8 +264,8 @@
 editing and all the completion and routine info capabilities present in
 IDL source buffers.
 @item
-Compilation, execution and interactive debugging of programs directly
-from the source buffer.
+Compilation, execution and interactive single-keystroke debugging of
+programs directly from the source buffer.
 @item
 Quick, source-guided navigation of the calling stack, with variable
 inspection, etc.
@@ -261,12 +294,10 @@
 @end itemize
 @end ifnottex
 
-IDLWAVE is the successor to the @file{idl.el} and @file{idl-shell.el}
-files written by Chris Chase.  The modes and files had to be renamed
-because of a name space conflict with CORBA's @code{idl-mode}, defined in
-Emacs in the file @file{cc-mode.el}.  If you have been using the old
-files, check @ref{Upgrading from idl.el} for information on how to
-switch.
+IDLWAVE is the distant successor to the @file{idl.el} and
+@file{idl-shell.el} files written by Chris Chase.  The modes and files
+had to be renamed because of a name space conflict with CORBA's
+@code{idl-mode}, defined in Emacs in the file @file{cc-mode.el}.
 
 In this manual, each section ends with a list of related user options.
 Don't be confused by the sheer number of options available --- in most
@@ -307,6 +338,8 @@
 @tab Update IDLWAVE's knowledge about functions and procedures.
 @item @kbd{C-c C-v}
 @tab Visit the source code of a procedure/function.
+@item @kbd{C-u C-c C-v}
+@tab Visit the source code of a procedure/function in this buffer.
 @item @kbd{C-c C-h}
 @tab Insert a standard documentation header.
 @item @kbd{C-c @key{RET}}
@@ -322,16 +355,22 @@
 @tab Cycle back through IDL command history.
 @item @kbd{M-n}
 @tab Cycle forward.
-@item @kbd{M-@key{TAB}}
+@item @kbd{@key{TAB}}
 @tab Complete a procedure name, function name or keyword in the shell buffer.
 @item @kbd{C-c C-d C-c}
 @tab Save and compile the source file in the current buffer.
 @item @kbd{C-c C-d C-x}
-@tab Goto next syntax error.
+@tab Go to next syntax error.
+@item @kbd{C-c C-d C-v}
+@tab Switch to electric debug mode.
 @item @kbd{C-c C-d C-b}
 @tab Set a breakpoint at the nearest viable source line.
 @item @kbd{C-c C-d C-d}
 @tab Clear the nearest breakpoint.
+@item @kbd{C-c C-d [}
+@tab Go to the previous breakpoint.
+@item @kbd{C-c C-d ]}
+@tab Go to the next breakpoint.
 @item @kbd{C-c C-d C-p}
 @tab Print the value of the expression near point in IDL.
 @end multitable
@@ -353,8 +392,6 @@
 (setq idlwave-shell-automatic-start t)
 ;; Bind debugging commands with CONTROL and SHIFT modifiers
 (setq idlwave-shell-debug-modifiers '(control shift))
-;; Specify the online help files' location.
-(setq idlwave-help-directory "~/.idlwave")
 @end lisp
 
 @ifhtml
@@ -367,20 +404,21 @@
 @cindex Getting Started
 
 @menu
-* Lesson I -- Development Cycle::
-* Lesson II -- Customization::
-* Lesson III -- Library Catalog::
+* Lesson I -- Development Cycle::  
+* Lesson II -- Customization::  
+* Lesson III -- User Catalog::  
 @end menu
 
 @node  Lesson I -- Development Cycle, Lesson II -- Customization, Getting Started, Getting Started
 @section Lesson I: Development Cycle
 
 The purpose of this tutorial is to guide you through a very basic
-development cycle using IDLWAVE.  We will paste a simple program into a
-buffer and use the shell to compile, debug and run it.  On the way we
-will use many of the important IDLWAVE commands.  Note however that
-there are many more capabilities in IDLWAVE than covered here, which can
-be discovered by reading the entire manual.
+development cycle using IDLWAVE.  We will paste a simple program into
+a buffer and use the shell to compile, debug and run it.  On the way
+we will use many of the important IDLWAVE commands.  Note, however,
+that IDLWAVE has many more capabilities than covered here, which can
+be discovered by reading the entire manual, or hovering over the
+shoulder of your nearest IDLWAVE guru for a few days.
 
 It is assumed that you have access to Emacs or XEmacs with the full
 IDLWAVE package including online help (@pxref{Installation}).  We also
@@ -395,9 +433,9 @@
 @kbd{C-x C-f tutorial.pro @key{RET}}
 @end example
 
-A buffer for this file will pop up, and it should be in IDLWAVE mode, as
-shown in the mode line just below the editing window.  Also, the menu
-bar should contain entries @samp{IDLWAVE} and @samp{Debug}.
+A buffer for this file will pop up, and it should be in IDLWAVE mode,
+indicated in the mode line just below the editing window.  Also, the
+menu bar should contain @samp{IDLWAVE}.
 
 Now cut-and-paste the following code, also available as
 @file{tutorial.pro} in the IDLWAVE distribution.
@@ -412,13 +450,13 @@
   y1 = y * delta
   return, d + floor(m1*30.6)+floor(y1*365.25)+5
 end
-
+     
 function weekday,day,month,year
   ;; compute weekday number for date
   nr = daynr(day,month,year)
   return, nr mod 7
 end
-
+     
 pro plot_wday,day,month
   ;; Plot the weekday of a date in the first 10 years of this century.
   years = 2000,+indgen(10)
@@ -431,31 +469,35 @@
 @end example
 
 The indentation probably looks funny, since it's different from the
-settings you use, so use the @key{TAB} key in each line to automatically
-line it up (or more quickly @emph{select} the entire buffer with
-@kbd{C-x h}, and indent the whole region with @kbd{C-M-\}).  Notice how
-different syntactical elements are highlighted in different colors, if
-you have set up support for font-lock.
+settings you use, so use the @key{TAB} key in each line to
+automatically line it up (or, more quickly, @emph{select} the entire
+buffer with @kbd{C-x h}, and indent the whole region with
+@kbd{C-M-\}).  Notice how different syntactical elements are
+highlighted in different colors, if you have set up support for
+font-lock.
 
 Let's check out two particular editing features of IDLWAVE.  Place the
 cursor after the @code{end} statement of the @code{for} loop and press
 @key{SPC}.  IDLWAVE blinks back to the beginning of the block and
 changes the generic @code{end} to the specific @code{endfor}
-automatically.  Now place the cursor in any line you would like to split
-and press @kbd{M-@key{RET}}.  The line is split at the cursor position,
-with the continuation @samp{$} and indentation all taken care of.  Use
-@kbd{C-/} to undo the last change.
-
-The procedure @code{plot_wday} is supposed to plot the weekday of a
-given date for the first 10 years of the 21st century.  As in most code,
-there are a few bugs, which we are going to use IDLWAVE to help us fix.
+automatically (as long as the variable @code{idlwave-expand-generic-end}
+is turned on --- @pxref{Lesson II -- Customization}).  Now place the
+cursor in any line you would like to split and press @kbd{M-@key{RET}}.
+The line is split at the cursor position, with the continuation @samp{$}
+and indentation all taken care of.  Use @kbd{C-/} to undo the last
+change.
+
+The procedure @code{plot_wday} is supposed to plot the day of the week
+of a given date for the first 10 years of the 21st century.  As in
+most code, there are a few bugs, which we are going to use IDLWAVE to
+help us fix.
 
 First, let's launch the IDLWAVE shell.  You do this with the command
-@kbd{C-c C-s}.  The Emacs window will split and display IDL running in a
-shell interaction buffer.  Type a few commands like @code{print,!PI} to
-convince yourself that you can work there just as well as in a terminal,
-or the IDLDE.  Use the arrow keys to cycle through your command history.
-Are we having fun now?
+@kbd{C-c C-s}.  The Emacs window will split or another window will popup
+to display IDL running in a shell interaction buffer.  Type a few
+commands like @code{print,!PI} to convince yourself that you can work
+there just as well as in a terminal, or the IDLDE.  Use the arrow keys
+to cycle through your command history.  Are we having fun now?
 
 Now go back to the source window and type @kbd{C-c C-d C-c} to compile
 the program.  If you watch the shell buffer, you see that IDLWAVE types
@@ -469,44 +511,47 @@
 
 Now we want to use the command to plot the day of the week on January
 1st.  We could type the full command ourselves, but why do that?  Go
-back to the shell window, type @samp{plot_} and hit @key{TAB}.  After a
-bit of a delay (while IDLWAVE initializes its routine info database, if
-necessary), the window will split to show all procedures it knows
+back to the shell window, type @samp{plot_} and hit @key{TAB}.  After
+a bit of a delay (while IDLWAVE initializes its routine info database,
+if necessary), the window will split to show all procedures it knows
 starting with that string, and @w{@code{plot_wday}} should be one of
-them.  Saving the buffer alerted IDLWAVE about this new routine.  Click
-with the middle mouse button on @code{plot_wday} and it will be copied
-to the shell buffer, or if you prefer, add @samp{w} to @samp{plot_} to
-make it unambiguous, hit @key{TAB} again, and the full routine name will
-be completed.  Now provide the two arguments:
+them.  Saving the buffer alerted IDLWAVE about this new routine.
+Click with the middle mouse button on @code{plot_wday} and it will be
+copied to the shell buffer, or if you prefer, add @samp{w} to
+@samp{plot_} to make it unambiguous (depending on what other routines
+starting with @samp{plot_} you have installed on your system), hit
+@key{TAB} again, and the full routine name will be completed.  Now
+provide the two arguments:
 
 @example
 plot_wday,1,1
 @end example
 
-and press @key{RET}.  This fails with an error message telling you the
-@code{YT} keyword to plot is ambiguous.  What are the allowed keywords
-again?  Go back to the source window and put the cursor into the `plot'
-line, and press @kbd{C-c ?}.  This shows the routine info window for the
-plot routine, which contains a list of keywords, along with the argument
-list.  Oh, we wanted @code{YTITLE}.  Fix that up.  Recompile with
-@kbd{C-c C-d C-c}. Jump back into the shell with @kbd{C-c C-s}, press
-the @key{UP} arrow to recall the previous command and execute again.
+@noindent and press @key{RET}.  This fails with an error message telling
+you the @code{YT} keyword to plot is ambiguous.  What are the allowed
+keywords again?  Go back to the source window and put the cursor into
+the `plot' line and press @kbd{C-c ?}.  This shows the routine info
+window for the plot routine, which contains a list of keywords, along
+with the argument list.  Oh, we wanted @code{YTITLE}.  Fix that up.
+Recompile with @kbd{C-c C-d C-c}. Jump back into the shell with
+@kbd{C-c C-s}, press the @key{UP} arrow to recall the previous command
+and execute again.
 
 This time we get a plot, but it is pretty ugly --- the points are all
 connected with a line.  Hmm, isn't there a way for @code{plot} to use
 symbols instead?  What was that keyword?  Position the cursor on the
 plot line after a comma (where you'd normally type a keyword), and hit
-@kbd{M-@key{Tab}}.  A long list of plot's keywords appears.  Aha, there
-it is, @code{PSYM}.  Middle click to insert it.  An @samp{=} sign is
-included for you too.  Now what were the values of @code{PSYM} supposed
-to be?  With the cursor on or after the keyword, press @kbd{M-?} for
-online help (alternatively, you could have right clicked on the colored
-keyword itself in the completion list).  The online help window will pop
-up showing the documentation for the @code{PYSM} keyword.  OK, let's use
-diamonds=4.  Fix this, recompile (you know the command by now: @kbd{C-c
-C-d C-c}, go back to the shell (if it's vanished, you know the command
-to recall it by now: @kbd{C-c C-s}) and execute again.  Now things look
-pretty good.
+@kbd{M-@key{Tab}}.  A long list of plot's keywords appears.  Aha,
+there it is, @code{PSYM}.  Middle click to insert it.  An @samp{=}
+sign is included for you too.  Now what were the values of @code{PSYM}
+supposed to be?  With the cursor on or after the keyword, press
+@kbd{M-?} for online help (alternatively, you could have right clicked
+on the colored keyword itself in the completion list).  A browser will
+pop up showing the HTML documentation for the @code{PYSM} keyword.
+OK, let's use diamonds=4.  Fix this, recompile (you know the command
+by now: @kbd{C-c C-d C-c}), go back to the shell (if it's vanished,
+you know what to do: @kbd{C-c C-s}) and execute again.  Now things
+look pretty good.
 
 Let's try a different day --- how about April fool's day?
 
@@ -518,16 +563,17 @@
 We've got a bug in the program, perhaps in the @code{daynr} function.
 Let's put a breakpoint on the last line there.  Position the cursor on
 the @samp{return, d+...} line and press @kbd{C-c C-d C-b}.  IDL sets a
-breakpoint (as you see in the shell window), and the line is highlighted
-in some way.  Back to the shell buffer, re-execute the previous command.
-IDL stops at the line with the breakpoint.  Now hold down the SHIFT key
-and click with the middle mouse button on a few variables there:
-@samp{d}, @samp{y}, @samp{m}, @samp{y1}, etc.  Maybe @code{d} isn't the
-correct type.  CONTROL-SHIFT middle-click on it for help.  Well, it's an
-integer, so that's not the problem.  Aha, @samp{y1} is zero, but it
-should be the year, depending on delta.  Shift click @samp{delta} to see
-that it's 0.  Below, we see the offending line: @samp{y1=y*delta...} the
-multiplication should have been a minus sign!  So fix the line to read:
+breakpoint (as you see in the shell window), and the break line is
+indicated.  Back to the shell buffer, re-execute the previous command.
+IDL stops at the line with the breakpoint.  Now hold down the SHIFT
+key and click with the middle mouse button on a few variables there:
+@samp{d}, @samp{y}, @samp{m}, @samp{y1}, etc.  Maybe @code{d} isn't
+the correct type.  CONTROL-SHIFT middle-click on it for help.  Well,
+it's an integer, so that's not the problem.  Aha, @samp{y1} is zero,
+but it should be the year, depending on delta.  Shift click
+@samp{delta} to see that it's 0.  Below, we see the offending line:
+@samp{y1=y*delta...} the multiplication should have been a minus sign!
+Hit @kbd{q} to exit the debugging mode, and fix the line to read:
 
 @example
 y1 = y - delta
@@ -538,15 +584,15 @@
 Change the code to plot 100 years and see that every 28 years, the
 sequence of weekdays repeats.
 
-@node  Lesson II -- Customization, Lesson III -- Library Catalog, Lesson I -- Development Cycle, Getting Started
+@node  Lesson II -- Customization, Lesson III -- User Catalog, Lesson I -- Development Cycle, Getting Started
 @section Lesson II: Customization
 
-Emacs is probably the most customizable piece of software available, and
-it would be a shame if you did not make use of this and adapt IDLWAVE to
-your own preferences.  Customizing Emacs or IDLWAVE is accomplished by
-setting Lisp variables in the @file{.emacs} file in your home directory
---- but do not be dismayed; for the most part, you can just copy and work
-from the examples given here.
+Emacs is probably the most customizable piece of software ever
+written, and it would be a shame if you did not make use of this and
+adapt IDLWAVE to your own preferences.  Customizing Emacs or IDLWAVE
+is accomplished by setting Lisp variables in the @file{.emacs} file in
+your home directory --- but do not be dismayed; for the most part, you
+can just copy and work from the examples given here.
 
 Let's first use a boolean variable.  These are variables which you turn
 on or off, much like a checkbox. A value of @samp{t} means on, a value
@@ -561,7 +607,8 @@
 source buffer will be converted to upper case when you press @key{SPC}
 or @key{RET} right after the word.  Try it out!  @samp{if} changes to
 @samp{IF}, @samp{begin} to @samp{BEGIN}.  If you don't like this
-behavior, remove the option again from your @file{.emacs} file.
+behavior, remove the option again from your @file{.emacs} file and
+restart Emacs.
 
 You likely have your own indentation preferences for IDL code.  For
 example, some like to indent the main block of an IDL program from the
@@ -588,50 +635,52 @@
 variables.  You can access it through the IDLWAVE menu in one of the
 @file{.pro} buffers, menu item @code{Customize->Browse IDLWAVE
 Group}. Here you'll be presented with all the various variables grouped
-into categories.  You can navigate the hierarchy (e.g. Idlwave Code
-Formatting->Idlwave Main Block Indent), read about the variables, change
-them, and `Save for Future Sessions'.  Few of these variables need
-customization, but you can exercise considerable control over IDLWAVE's
-functionality with them.
+into categories.  You can navigate the hierarchy (e.g. @samp{IDLWAVE
+Code Formatting->Idlwave Abbrev And Indent Action->Idlwave Expand
+Generic End} to turn on @code{END} expansion), read about the variables,
+change them, and `Save for Future Sessions'.  Few of these variables
+need customization, but you can exercise considerable control over
+IDLWAVE's functionality with them.
 
 You may also find the key bindings used for the debugging commands too
-long and complicated.  Often we have heard such complaints, ``Do I
-really have to type @kbd{C-c C-d C-c} to run a simple command?''  Due to
-Emacs rules and conventions, shorter bindings cannot be set by default,
-but you can enable them.  First, there is a way to assign all debugging
-commands in a single sweep to other combinations.  The only problem is
-that we have to use something which Emacs does not need for other
-important commands.  One good option is to execute debugging commands by
-holding down @key{CONTROL} and @key{SHIFT} while pressing a single
-character: @kbd{C-S-b} for setting a breakpoint, @kbd{C-S-c} for
-compiling the current source file, @kbd{C-S-a} for deleting all
-breakpoints.  You can enable this with:
+long and complicated.  Often we have heard complaints along the lines
+of, ``Do I really have to go through the finger gymnastics of @kbd{C-c
+C-d C-c} to run a simple command?''  Due to Emacs rules and
+conventions, shorter bindings cannot be set by default, but you can
+easily enable them.  First, there is a way to assign all debugging
+commands in a single sweep to another simpler combination.  The only
+problem is that we have to use something which Emacs does not need for
+other important commands.  One good option is to execute debugging
+commands by holding down @key{CONTROL} and @key{SHIFT} while pressing
+a single character: @kbd{C-S-b} for setting a breakpoint, @kbd{C-S-c}
+for compiling the current source file, @kbd{C-S-a} for deleting all
+breakpoints (try it, it's easier).  You can enable this with:
 
 @lisp
 (setq idlwave-shell-debug-modifiers '(shift control))
 @end lisp
 
 @noindent If you have a special keyboard with, for example, a
-@key{HYPER} key, you could even shorten that:
+@key{SUPER} key, you could even shorten that:
 
 @lisp
-(setq idlwave-shell-debug-modifiers '(hyper))
+(setq idlwave-shell-debug-modifiers '(super))
 @end lisp
 
-@noindent to get compilation on @kbd{H-c}.  Often, a modifier key like
-@key{HYPER} or @key{SUPER} is bound or can be bound to an otherwise
-unused key -- consult your system documentation.
+@noindent to get compilation on @kbd{S-c}.  Often, a modifier key like
+@key{SUPER} or @key{HYPER} is bound or can be bound to an otherwise
+unused key on your keyboard --- consult your system documentation.
 
 You can also assign specific commands to keys.  This you must do in the
-@emph{mode-hook}, a special function which is run when a new buffer gets
-set up.  Keybindings can only be done when the buffer exists.  The
-possibilities for key customization are endless.  Here we set function
-keys f5-f8 to common debugging commands.
+@emph{mode-hook}, a special function which is run when a new IDLWAVE
+buffer gets set up.  The possibilities for key customization are
+endless.  Here we set function keys f4-f8 to common debugging commands.
 
 @lisp
 ;; First for the source buffer
 (add-hook 'idlwave-mode-hook
    (lambda ()
+    (local-set-key [f4] 'idlwave-shell-retall)
     (local-set-key [f5] 'idlwave-shell-break-here)
     (local-set-key [f6] 'idlwave-shell-clear-current-bp)
     (local-set-key [f7] 'idlwave-shell-cont)
@@ -639,43 +688,53 @@
 ;; Then for the shell buffer
 (add-hook 'idlwave-shell-mode-hook
    (lambda ()
+    (local-set-key [f4] 'idlwave-shell-retall)
     (local-set-key [f5] 'idlwave-shell-break-here)
     (local-set-key [f6] 'idlwave-shell-clear-current-bp)
     (local-set-key [f7] 'idlwave-shell-cont)
     (local-set-key [f8] 'idlwave-shell-clear-all-bp)))
 @end lisp
 
-@node  Lesson III -- Library Catalog,  , Lesson II -- Customization, Getting Started
-@section Lesson III: Library Catalog
+@node  Lesson III -- User Catalog,  , Lesson II -- Customization, Getting Started
+@section Lesson III: User and Library Catalogs
 
 We have already used the routine info display in the first part of this
-tutorial.  This was the key @kbd{C-c ?} which displays information about
-the IDL routine near the cursor position.  Wouldn't it be nice
-to have the same available for your own library routines and for the
-huge amount of code in major extension libraries like JHUPL or the
-IDL-Astro library?  To do this, you must give IDLWAVE a chance to study
-these routines first.  We call this @emph{Building the library catalog}.
-
-From the IDLWAVE entry in the menu bar, select @code{Routine Info/Select
-Catalog Directories}.  If necessary, start the shell first with @kbd{C-c
-C-s} (@pxref{Starting the Shell}).  IDLWAVE will find out about the IDL
-@code{!PATH} variable and offer a list of directories on the path.
-Simply select them all (or whichever you want) and click on the
-@samp{Scan&Save} button.  Then go for a cup of coffee while IDLWAVE
-collects information for each and every IDL routine on your search path.
-All this information is written to the file @file{.idlcat} in your home
-directory and will from now one be automatically loaded whenever you use
+tutorial.  This was the invoked using @kbd{C-c ?}, and displays
+information about the IDL routine near the cursor position.  Wouldn't it
+be nice to have the same kind of information available for your own
+routines and for the huge amount of code in major libraries like JHUPL
+or the IDL-Astro library?  In many cases, you may already have this
+information.  Files named @file{.idlwave_catalog} in library directories
+contain scanned information on the routines in that directory; many
+popular libraries ship with these ``library catalogs'' pre-scanned.
+Users can scan their own routines in one of two ways: either using the
+supplied tool to scan directories and build their own
+@file{.idlwave_catalog} files, or using the built-in method to create a
+single ``user catalog'', which we'll show here.  @xref{Catalogs}, for
+more information on choosing which method to use.
+
+To build a user catalog, select @code{Routine Info/Select Catalog
+Directories} from the IDLWAVE entry in the menu bar.  If necessary,
+start the shell first with @kbd{C-c C-s} (@pxref{Starting the Shell}).
+IDLWAVE will find out about the IDL @code{!PATH} variable and offer a
+list of directories on the path.  Simply select them all (or whichever
+you want --- directories with existing library catalogs will not be
+selected by default) and click on the @samp{Scan&Save} button.  Then
+go for a cup of coffee while IDLWAVE collects information for each and
+every IDL routine on your search path.  All this information is
+written to the file @file{.idlwave/idlusercat.el} in your home
+directory and will from now on automatically load whenever you use
 IDLWAVE.  You may find it necessary to rebuild the catalog on occasion
-as your local libraries change.  Try to use routine info (@kbd{C-c ?})
-or completion (@kbd{M-@key{TAB}}) while on any routine or partial routine
-name you know to be located in the library.  E.g., if you have scanned
-the IDL-Astro library:
+as your local libraries change, or build a library catalog for those
+directories instead.  Invoke routine info (@kbd{C-c ?}) or completion
+(@kbd{M-@key{TAB}}) on any routine or partial routine name you know to
+be located in the library.  E.g., if you have scanned the IDL-Astro
+library:
 
 @example
-    a=readf@key{M-<TAB>}
+    a=readf@key{M-@key{TAB}}
 @end example
 
-
 expands to `readfits('.  Then try
 
 @example
@@ -690,11 +749,11 @@
 @end example
 
 I hope you made it until here.  Now you are set to work with IDLWAVE.
-On the way you will want to change other things, and to learn more about
-the possibilities not discussed in this short tutorial.  Read the
-manual, look at the documentation strings of interesting variables (with
-@kbd{C-h v idlwave<-variable-name> @key{RET}}) and ask the remaining
-questions on the newsgroup @code{comp.lang.idl-pvwave}.
+On the way you will want to change other things, and to learn more
+about the possibilities not discussed in this short tutorial.  Read
+the manual, look at the documentation strings of interesting variables
+(with @kbd{C-h v idlwave<-variable-name> @key{RET}}) and ask the
+remaining questions on the newsgroup @code{comp.lang.idl-pvwave}.
 
 @node The IDLWAVE Major Mode, The IDLWAVE Shell, Getting Started, Top
 @chapter The IDLWAVE Major Mode
@@ -727,35 +786,26 @@
 
 @menu
 * Code Indentation::            Reflecting the logical structure
-* Continued Statement Indentation::
+* Continued Statement Indentation::  
 * Comment Indentation::         Special indentation for comment lines
 * Continuation Lines::          Splitting statements over lines
 * Syntax Highlighting::         Font-lock support
 * Octals and Highlighting::     Why "123 causes problems
 @end menu
 
-The IDL language, with it's early roots in FORTRAN, modern
+The IDL language, with its early roots in FORTRAN, modern
 implementation in C, and liberal borrowing of features of many vector
-languages along its 25+ year history, has inherited an unusual mix of
-syntax elements.  Left to his or her own devices, a novice IDL
-programmer will often conjure code which is very difficult to read and
-impossible to adapt.  Much can be gleaned from studying available IDL
-code libraries for coding style pointers, but, due to the variety of
-IDL syntax elements, replicating this style can be challenging at
-best.  Luckily, IDLWAVE understands the structure of IDL code very
-well, and takes care of almost all formatting issues for you.  After
-configuring it to match your coding standards, you can rely on it to
-help keep your code neat and organized.
-
-@cindex Foreign code, adapting
-@cindex Indentation, of foreign code
-@kindex C-M-\
-To re-indent a larger portion of code (e.g. when working with foreign code
-written with different conventions), use @kbd{C-M-\}
-(@code{indent-region}) after marking the relevant code.  Useful marking
-commands are @kbd{C-x h} (the entire file) or @kbd{C-M-h} (the
-current subprogram). @xref{Actions}, for information how to impose
-additional formatting conventions on foreign code.
+and other languages along its 25+ year history, has inherited an
+unusual mix of syntax elements.  Left to his or her own devices, a
+novice IDL programmer will often conjure code which is very difficult
+to read and impossible to adapt.  Much can be gleaned from studying
+available IDL code libraries for coding style pointers, but, due to
+the variety of IDL syntax elements, replicating this style can be
+challenging at best.  Luckily, IDLWAVE understands the structure of
+IDL code very well, and takes care of almost all formatting issues for
+you.  After configuring it to match your coding standards, you can
+rely on it to help keep your code neat and organized.
+
 
 @node Code Indentation, Continued Statement Indentation, Code Formatting, Code Formatting
 @subsection Code Indentation
@@ -769,7 +819,17 @@
 @code{PRO}/@code{FUNCTION}/@code{BEGIN} and @code{END}), and
 continuation lines.
 
-@defopt idlwave-main-block-indent (@code{0})
+@cindex Foreign code, adapting
+@cindex Indentation, of foreign code
+@kindex C-M-\
+To re-indent a larger portion of code (e.g. when working with foreign code
+written with different conventions), use @kbd{C-M-\}
+(@code{indent-region}) after marking the relevant code.  Useful marking
+commands are @kbd{C-x h} (the entire file) or @kbd{C-M-h} (the
+current subprogram). @xref{Actions}, for information how to impose
+additional formatting conventions on foreign code.
+
+@defopt idlwave-main-block-indent (@code{0}) 
 Extra indentation for the main block of code.  That is the block between
 the FUNCTION/PRO statement and the END statement for that program
 unit.
@@ -827,12 +887,16 @@
 maximum additional indentation beyond the basic indent to be
 tolerated, otherwise defaulting to a fixed-offset from the enclosing
 indent (the size of which offset is set in
-@code{idlwave-continuation-indent}).  Also, since the indentation
-level can be somewhat dynamic in continued statements with special
-continuation indentation, especially if
+@code{idlwave-continuation-indent}).  As a special case, continuations
+of routine calls without any arguments or keywords will @emph{not}
+align the continued line, under the assumption that you continued
+because you needed the space.
+
+Also, since the indentation level can be somewhat dynamic in continued
+statements with special continuation indentation, especially if
 @code{idlwave-max-extra-continuation-indent} is small, the key
 @kbd{C-u @key{TAB}} will re-indent all lines in the current statement.
-Note that @code{idlwave-indent-to-open-paren}, if non-@code{nil}, overrides
+Note that @code{idlwave-indent-to-open-paren}, if non-nil, overrides
 the @code{idlwave-max-extra-continuation-indent} limit, for
 parentheses only, forcing them always to line up.
 
@@ -966,7 +1030,7 @@
 
 @defopt idlwave-use-last-hang-indent (@code{nil})
 Non-@code{nil} means use last match on line for
-@code{idlwave-indent-regexp}.
+@code{idlwave-indent-regexp}. 
 @end defopt
 
 @node Syntax Highlighting, Octals and Highlighting, Continuation Lines, Code Formatting
@@ -994,7 +1058,7 @@
 
 @defopt idlwave-default-font-lock-items
 Items which should be fontified on the default fontification level
-2.
+2. 
 @end defopt
 
 @node Octals and Highlighting,  , Syntax Highlighting, Code Formatting
@@ -1002,12 +1066,12 @@
 @cindex Syntax highlighting, Octals
 @cindex Highlighting of syntax, Octals
 
-A rare syntax highlighting problem results from the extremely
-unfortunate notation for octal numbers in IDL: @code{"123}.  This
-unpaired quotation mark is very difficult to parse, given that it can be
-mixed on a single line with any number of strings.  Emacs will
-incorrectly identify this as a string, and the highlighting of following
-lines of code can be distorted, since the string is never terminated.
+A rare syntax highlighting problem results from an extremely unfortunate
+notation for octal numbers in IDL: @code{"123}.  This unpaired quotation
+mark is very difficult to parse, given that it can be mixed on a single
+line with any number of strings.  Emacs will incorrectly identify this
+as a string, and the highlighting of following lines of code can be
+distorted, since the string is never terminated.
 
 One solution to this involves terminating the mistakenly identified
 string yourself by providing a closing quotation mark in a comment:
@@ -1041,15 +1105,16 @@
 even thousands more (each with a few to tens of keywords and
 arguments).  This large command set can make it difficult to remember
 the calling sequence and keywords for the routines you use, but
-IDLWAVE can help.  It builds up routine information using a wide
-variety of sources: IDLWAVE in fact knows far more about the routines
-on your system than IDL itself.  It maintains a list of all built-in
-routines, with calling sequences and keywords@footnote{This list is
-created by scanning the IDL manuals and might contain (very few)
-errors.  Please report any errors to the maintainer, so that they can
-be fixed.}.  It also scans Emacs buffers and library files for routine
-definitions, and queries the IDLWAVE-Shell for information about
-routines currently compiled there.  This information is updated
+IDLWAVE can help.  It builds up routine information from a wide
+variety of sources; IDLWAVE in fact knows far more about the
+@samp{.pro} routines on your system than IDL itself!  It maintains a
+list of all built-in routines, with calling sequences and
+keywords@footnote{This list is created by scanning the IDL manuals and
+might contain (very few) errors.  Please report any errors to the
+maintainer, so that they can be fixed.}.  It also scans Emacs buffers
+for routine definitions, queries the IDLWAVE-Shell for information
+about routines currently compiled there, and automatically locates
+library and user-created catalogs.  This information is updated
 automatically, and so should usually be current.  To force a global
 update and refresh the routine information, use @kbd{C-c C-i}
 (@code{idlwave-update-routine-info}).
@@ -1071,13 +1136,13 @@
 On positions 1,2 and 8, information about the @samp{plot} procedure will
 be shown.  On positions 3,4, and 7, the @samp{alog} function will be
 described, while positions 5 and 6 will investigate the @samp{sin}
-function.
+function.  
 
 When you ask for routine information about an object method, and the
 method exists in several classes, IDLWAVE queries for the class of the
 object, unless the class is already known through a text property on the
 @samp{->} operator (@pxref{Object Method Completion and Class
-Ambiguity}), or by having been explicitly included in the call
+Ambiguity}), or by having been explicity included in the call
 (e.g. @code{a->myclass::Foo}).
 
 @cindex Calling sequences
@@ -1090,7 +1155,7 @@
 Usage:    XMANAGER, NAME, ID
 Keywords: BACKGROUND CATCH CLEANUP EVENT_HANDLER GROUP_LEADER
           JUST_REG MODAL NO_BLOCK
-Source:   SystemLib   [CSB] /soft1/idl53/lib/xmanager.pro
+Source:   SystemLib   [LCSB] /soft1/idl53/lib/xmanager.pro
 @end example
 
 @cindex Categories, of routines
@@ -1102,20 +1167,22 @@
 @cindex @code{!DIR}, IDL variable
 
 If a definition of this routine exists in several files accessible to
-IDLWAVE, several @samp{Source} lines will point to the different files.
-This may indicate that your routine is shadowing a library routine,
-which may or may not be what you want (@pxref{Load-Path Shadows}).  The
-information about the calling sequence and keywords is derived from the
-first source listed.  Library routines are supported only if you have
-scanned your local IDL libraries (@pxref{Library Catalog}).  The source
-entry consists of a @emph{source category}, a set of @emph{flags} and
-the path to the @emph{source file}.  The following categories exist:
+IDLWAVE, several @samp{Source} lines will point to the different
+files.  This may indicate that your routine is shadowing a system
+library routine, which may or may not be what you want
+(@pxref{Load-Path Shadows}).  The information about the calling
+sequence and keywords is derived from the first source listed.
+Library routines are available only if you have scanned your local IDL
+directories or are using pre-scanned libraries (@pxref{Catalogs}).
+The source entry consists of a @emph{source category}, a set of
+@emph{flags} and the path to the @emph{source file}.  The following
+default categories exist:
 
 @multitable @columnfractions .15 .85
 @item @i{System}
 @tab A system routine of unknown origin.  When the system library has
-been scanned (@pxref{Library Catalog}), this category will automatically
-split into the next two.
+been scanned as part of a catalog (@pxref{Catalogs}), this category
+will automatically split into the next two.
 @item @i{Builtin}
 @tab A builtin system routine with no source code available.
 @item @i{SystemLib}
@@ -1127,27 +1194,28 @@
 @item @i{Other}
 @tab Any other routine with a file not known to be on the search path.
 @item @i{Unresolved}
-@tab An otherwise unkown routine the shell lists as unresolved
+@tab An otherwise unkown routine the shell lists as unresolved 
 (referenced, but not compiled).
 @end multitable
 
-You can create additional categories based on the routine's filepath
-with the variable @code{idlwave-special-lib-alist}.  This is useful for
-easy discrimination of various libraries, or even versions of the same
-library.
+Any routines discovered in library catalogs (@pxref{Library
+Catalogs}), will display the category assigned during creation,
+e.g. @samp{NasaLib}.  For routines not discovered in this way, you can
+create additional categories based on the routine's filename using the
+variable @code{idlwave-special-lib-alist}.
 
 @cindex Flags, in routine info
 @cindex Duplicate routines
 @cindex Multiply defined routines
 @cindex Routine definitions, multiple
-The flags @code{[CSB]} indicate the source of the information IDLWAVE
-has regarding the file: from a library catalog (@w{@code{[C--]}},
-@pxref{Library Catalog}), from the IDL Shell (@w{@code{[-S-]}}) or from
-an Emacs buffer (@w{@code{[--B]}}).  Combinations are possible (a
-compiled library routine visited in a buffer might read
-@w{@code{[CSB]}}).  If a file contains multiple definitions of the same
-routine, the file name will be prefixed with @samp{(Nx)} where @samp{N}
-is the number of definitions.
+The flags @code{[LCSB]} indicate the source of the information IDLWAVE
+has regarding the file: from a library catalog (@w{@code{[L---]}}),
+from a user catalog (@w{@code{[-C--]}}, from the IDL Shell
+(@w{@code{[--S-]}}) or from an Emacs buffer (@w{@code{[---B]}}).
+Combinations are possible (a compiled library routine visited in a
+buffer might read @w{@code{[L-SB]}}).  If a file contains multiple
+definitions of the same routine, the file name will be prefixed with
+@samp{(Nx)} where @samp{N} is the number of definitions.
 
 @cindex Online Help from the routine info buffer
 @cindex Active text, in routine info
@@ -1162,7 +1230,7 @@
 @item @i{Usage}
 @tab If online help is installed, a click with the @emph{right} mouse
 button on the @i{Usage:} line will access the help for the
-routine (@pxref{Online Help}).
+routine (@pxref{Online Help}).  
 @item @i{Keyword}
 @tab Online help about keywords is also available with the
 @emph{right} mouse button.  Clicking on a keyword with the @emph{middle}
@@ -1198,54 +1266,32 @@
 @end defopt
 
 
+@ifhtml
+<A NAME="ONLINE_HELP"></A>
+@end ifhtml
 @node Online Help, Completion, Routine Info, The IDLWAVE Major Mode
 @section Online Help
 
 @cindex Online Help
 @cindex @file{idlw-help.txt}
 @cindex @file{idlw-help.el}
-@cindex IDL manual, ASCII version
 @cindex Installing online help
 @cindex Online Help, Installation
 @cindex Speed, of online help
-For IDL system routines, RSI provides extensive documentation.  IDLWAVE
-can access an ASCII version of this documentation very quickly and
-accurately.  This is @emph{much} faster than using the IDL online help
-application, because IDLWAVE usually gets you to the right place in the
-documentation directly, without any additional browsing and scrolling.
-For this online help to work, an ASCII version of the IDL documentation,
-which is not part of the standalone IDLWAVE distribution, is required.
-The necessary help files can be downloaded from
-@uref{@value{IDLWAVE-HOMEPAGE}, the maintainers webpage}.  The text
-extracted from the PDF files is fine for normal documentation
-paragraphs, but graphics and multiline equations will not be well
-formatted.  See also @ref{Documentation Scan}.
-
-@cindex Updated online help
-@cindex Online help, updates
-@cindex @code{<NEW>..</NEW>}
-Occasionally RSI releases a synopsis of new features in an IDL release,
-without simultaneously updating the documentation files, instead
-preferring a @i{What's New} document which describes the changes.  These
-updates are incorporated directly into the IDLWAVE online help, and are
-delimited in @code{<NEW>..</NEW>} blocks.
-
-@cindex Source code, as online help
-@cindex DocLib header, as online help
-For routines which are not documented in the IDL manual (for example
-personal or library routines), the source code itself is used as help
-text.  If the requested information can be found in a (more or less)
-standard DocLib file header, IDLWAVE shows the header (scrolling down to
-appropriate keyword).  Otherwise the routine definition statement
-(@code{pro}/@code{function}) is shown.
-
-@cindex Structure tags, in online help
-@cindex Class tags, in online help
-Help is also available for class structure tags (@code{self.TAG}), and
-generic structure tags, if structure tag completion is enabled
-(@pxref{Structure Tag Completion}).  This is implemented by visiting the
-tag within the class or structure definition source itself.  Help is not
-available on built-in system class tags.
+
+For IDL system routines, RSI provides extensive documentation.
+IDLWAVE can access an HTML version of this documentation very quickly
+and accurately.  This is @emph{much} faster than using the IDL online
+help application, because IDLWAVE usually gets you to the right place
+in the documentation directly --- e.g. a specific keyword of a routine
+--- without any additional browsing and scrolling.  For this online
+help to work, an HTML version of the IDL documentation, which is not
+part of the standalone IDLWAVE distribution, is required.  The
+necessary files can be downloaded from @uref{@value{IDLWAVE-HOMEPAGE},
+the maintainers webpage}.  There are a variety of options for
+displaying the HTML help: see below.  Help for routines without HTML
+documentation is also available, using the routine documentation
+header and/or source.
 
 @kindex M-?
 In any IDL program (or, as with most IDLWAVE commands, in the IDL
@@ -1261,6 +1307,8 @@
 @tab A keyword parameter of a routine.
 @item @i{System Variable}
 @tab System variables like @code{!DPI}.
+@item @i{System Variable Tags}
+@tab System variables tags like @code{!D.X_SIZE}.
 @item @i{IDL Statement}
 @tab Statements like @code{PRO}, @code{REPEAT}, @code{COMPILE_OPT}, etc.
 @item @i{Class name}
@@ -1270,23 +1318,23 @@
 @item @i{Executive Command}
 @tab An executive command like @code{.RUN}.  Mostly useful in the shell.
 @item @i{Structure Tags}
-@tab In structure tags like @code{state.xsize}
-@item @i{Structure Tags}
-@tab In class tags like @code{self.value}.
+@tab Structure tags like @code{state.xsize}
+@item @i{Class Tags}
+@tab Class tags like @code{self.value}.
 @item @i{Default}
 @tab The routine that would be selected for routine info display.
 @end multitable
 
 @cindex @code{OBJ_NEW}, special online help
 Note that the @code{OBJ_NEW} function is special in that the help
-displayed depends on the cursor position: If the cursor is on the
-@samp{OBJ_NEW}, this function is described.  If it is on the class name
-inside the quotes, the documentation for the class is pulled up.  If the
-cursor is @emph{after} the class name, anywhere in the argument list,
-the documentation for the corresponding @code{Init} method and its
-keywords is targeted.
-
-@noindent Apart from source buffers, there are two more places from
+displayed depends on the cursor position.  If the cursor is on the
+@samp{OBJ_NEW}, this function is described.  If it is on the class
+name inside the quotes, the documentation for the class is pulled up.
+If the cursor is @emph{after} the class name, anywhere in the argument
+list, the documentation for the corresponding @code{Init} method and
+its keywords is targeted.
+
+Apart from an IDLWAVE buffer or shell, there are two more places from
 which online help can be accessed.
 
 @itemize @bullet
@@ -1302,14 +1350,112 @@
 program source itself) will be emphasized (e.g. colored blue).
 @end itemize
 @noindent
-In both cases, a blue face indicates that the item is documented in the
-IDL manual, but an attempt will be made to visit non-blue items directly
-in the originating source file.
-
-@cindex Help application, key bindings
-@cindex Key bindings, in help application
-The help window is normally displayed in a separate frame.  The
-following commands can be used to navigate inside the help system:
+In both cases, a blue face indicates that the item is documented in
+the IDL manual, but an attempt will be made to visit non-blue items
+directly in the originating source file.
+
+
+@menu
+* Help with HTML Documentation::  
+* Help with Source::            
+@end menu
+
+@node Help with HTML Documentation, Help with Source, Online Help, Online Help
+@subsection Help with HTML Documentation
+@cindex HTML Help
+@cindex Help using HTML manuals
+@cindex IDL manual, HTML version
+
+Help using the HTML documentation is invoked with the built-in Emacs
+command @code{browse-url}, which displays the relevant help topic in a
+browser of your choosing.  There are many possible browsers to choose
+among, with differing advantages and disadvantages.  The variable
+@code{idlwave-help-browser-function} controls which browser help is
+sent to.  This function is used to set the variable
+@code{browse-url-browser-function} locally for IDLWAVE help only.
+Customize this variable to see what choices of browsers your system
+offers.
+
+Certain browsers like @code{w3} (bundled with many versions of Emacs)
+and @code{w3m} (@uref{http://emacs-w3m.namazu.org/}, the author's help
+browser of choice) are run within Emacs, and use Emacs buffers to
+display the HTML help.  This can be convenient, especially on small
+displays, and images can even be displayed in-line on new Emacs
+versions.  However, better formatting results are often achieved with
+external browsers, like Mozilla.  IDLWAVE assumes any browser function
+containing "w3" is displayed in a local buffer.  If you are using
+another Emacs-local browser for which this is not true, set the
+variable @code{idlwave-help-browser-is-local}.
+
+@emph{N.B. For Windows users}: IDLWAVE can bring up RSI help directly
+in the Microsoft HTMLHelp documentation supplied with IDL: no
+additional help files are needed.  Be sure to set
+@code{idlwave-system-directory} and the help file will be found
+automatically (or, alternatively, specify its location directly with
+@code{idlwave-html-help-location}).  The variable
+@code{idlwave-help-use-hh} controls whether HTMLHelp is used, and
+which application is called to invoke it (@code{HH} is the default).
+The free helper application @code{KEYHH}
+(@uref{http://www.keyworks.net/keyhh.htm}) can be used instead, and is
+preferrable, as it permits loading new help topics into the same help
+window.  @code{KEYHH} must be downloaded and installed separately.
+
+@xref{HTML Help Browser Tips}, for more information on selecting and
+configuring a browser for use with IDL's HTML help system.
+
+@defopt idlwave-html-help-location @file{/usr/local/etc}
+The directory where the @file{idl_html_help} dir or @file{idl.chm}
+HTMLHelp files live.
+@end defopt
+
+@defopt idlwave-help-use-hh @code{nil}
+If set to @code{'hh} or @code{'keyhh}, use Windows native HTMLHelp
+with the specified help application.
+@end defopt
+
+@defopt idlwave-help-browser-function
+The browser function to use to display IDLWAVE HTML help.  Should be
+one of the functions available for setting
+@code{browse-url-browser-function}, which see.
+@end defopt
+
+@defopt idlwave-help-browser-is-local
+Is the browser selected in @code{idlwave-help-browser-function} run in a
+local Emacs buffer?  Defaults to @code{t} if the function contains
+"-w3".
+@end defopt
+
+@defopt idlwave-help-link-face
+The face for links to IDLWAVE online help.
+@end defopt
+
+@node Help with Source,  , Help with HTML Documentation, Online Help
+@subsection Help with Source
+@cindex Help using routine source
+
+@cindex Source code, as online help
+@cindex DocLib header, as online help
+For routines which are not documented in an HTML manual (for example
+personal or library routines), the source code itself is used as help
+text.  If the requested information can be found in a (more or less)
+standard DocLib file header, IDLWAVE shows the header (scrolling down to
+a keyword, if appropriate).  Otherwise the routine definition statement
+(@code{pro}/@code{function}) is shown.  The doclib header sections which
+are searched for include @samp{NAME} and @samp{KEYWORDS}.  Localization
+support can be added by customizing the @code{idlwave-help-doclib-name}
+and @code{idlwave-help-doclib-keyword} variables.
+
+@cindex Structure tags, in online help
+@cindex Class tags, in online help
+Help is also available for class structure tags (@code{self.TAG}), and
+generic structure tags, if structure tag completion is enabled
+(@pxref{Structure Tag Completion}).  This is implemented by visiting the
+tag within the class or structure definition source itself.  Help is not
+available on built-in system class tags.
+
+The help window is normally displayed in the same frame, but can be
+popped-up in a separate frame.  The following commands can be used to
+navigate inside the help system for source files:
 
 @multitable  @columnfractions .15 .85
 @item @kbd{@key{SPACE}}
@@ -1318,29 +1464,6 @@
 @tab Scroll forward one line.
 @item @kbd{@key{DEL}}
 @tab Scroll back one page.
-@item @kbd{n, p}
-@tab Browse to the next or previous topic (in physical sequence).
-@item @kbd{b, f}
-@tab Move back and forward through the help topic history.
-@item @kbd{c}
-@tab Clear the history.
-@item @kbd{Mouse-2}
-@tab Follow a link.  Active links are displayed in a different font.
-Items under @i{See Also} are active, and classes have links to their
-methods and back.
-@item @kbd{o}
-@tab Open a topic.  The topic can be selected with completion.
-@item @kbd{*}
-@tab Load the whole help file into Emacs, for global text searches.
-@item @kbd{q}
-@tab Kill the help window.
-@end multitable
-
-@sp 1
-@noindent When the help text is a source file, the following commands
-are also available:
-
-@multitable  @columnfractions .15 .85
 @item @kbd{h}
 @tab Jump to DocLib Header of the routine whose source is displayed
 as help.
@@ -1352,13 +1475,12 @@
 item in the DocLib header.
 @item @kbd{F}
 @tab Fontify the buffer like source code.  See the variable @code{idlwave-help-fontify-source-code}.
+@item @kbd{q}
+@tab Kill the help window.
 @end multitable
 
-@defopt idlwave-help-directory
-The directory where idlw-help.txt and idlw-help.el are stored.
-@end defopt
-
-@defopt idlwave-help-use-dedicated-frame (@code{t})
+
+@defopt idlwave-help-use-dedicated-frame (@code{nil})
 Non-@code{nil} means use a separate frame for Online Help if possible.
 @end defopt
 
@@ -1379,18 +1501,21 @@
 @end defopt
 
 @defopt idlwave-help-source-try-header (@code{t})
-Non-@code{nil} means try to find help in routine header when displaying source
-file.
+Non-@code{nil} means try to find help in routine header when
+displaying source file.
 @end defopt
 
-@defopt idlwave-help-link-face
-The face for links in IDLWAVE online help.
+@defopt idlwave-help-doclib-name (@code{"name"})
+The case-insensitive heading word in doclib headers to locate the
+@emph{name} section.  Can be a regexp, e.g. @code{"\\(name\\|nom\\)"}.
 @end defopt
 
-@defopt idlwave-help-activate-links-aggressively (@code{t})
-Non-@code{nil} means make all possible links in help window active.
+@defopt idlwave-help-doclib-keyword (@code{"KEYWORD"})
+The case-insensitive heading word in doclib headers to locate the
+@emph{keywords} section.  Can be a regexp.
 @end defopt
 
+
 @node Completion, Routine Source, Online Help, The IDLWAVE Major Mode
 @section Completion
 @cindex Completion
@@ -1404,12 +1529,13 @@
 @kindex M-@key{TAB}
 @kindex C-c C-i
 IDLWAVE offers completion for class names, routine names, keywords,
-system variables, class structure tags, regular structure tags and file
-names.  As in many programming modes, completion is bound to
-@kbd{M-@key{TAB}} (or @kbd{@key{TAB}} in the IDLWAVE Shell ---
-@pxref{Using the Shell}).  Completion uses exactly the same internal
-information as routine info, so when necessary (rarely) it can be
-updated with @kbd{C-c C-i} (@code{idlwave-update-routine-info}).
+system variables, system variable tags, class structure tags, regular
+structure tags and file names.  As in many programming modes,
+completion is bound to @kbd{M-@key{TAB}} (or @kbd{@key{TAB}} in the
+IDLWAVE Shell --- @pxref{Using the Shell}).  Completion uses exactly
+the same internal information as routine info, so when necessary
+(rarely) it can be updated with @kbd{C-c C-i}
+(@code{idlwave-update-routine-info}).
 
 The completion function is context sensitive and figures out what to
 complete based location of the point.  Here are example lines and what
@@ -1443,6 +1569,11 @@
 also a possible completion here.  You can force completion of a function
 name at such a location by using a prefix arg: @kbd{C-u M-@key{TAB}}.
 
+Giving two prefix arguments (@kbd{C-u C-u M-@key{TAB}}) prompts for a
+regular expression to search among the commands to be completed.  As
+an example, completing a blank line in this way will allow you to
+search for a procedure matching a regexp.
+
 @cindex Scrolling the @file{*Completions*} window
 @cindex Completion, scrolling
 @cindex Completion, Online Help
@@ -1489,7 +1620,7 @@
 @menu
 * Case of Completed Words::     CaseOFcomPletedWords
 * Object Method Completion and Class Ambiguity::  obj->Method, what?
-* Object Method Completion in the Shell::
+* Object Method Completion in the Shell::  
 * Class and Keyword Inheritance::  obj->Method, _EXTRA=e
 * Structure Tag Completion::    Completing state.Tag
 @end menu
@@ -1498,19 +1629,21 @@
 @subsection Case of Completed Words
 @cindex Case of completed words
 @cindex Mixed case completion
-The case of the completed words is determined by what is already in the
-buffer.  When the partial word being completed is all lower case, the
-completion will be lower case as well.  If at least one character is
-upper case, the string will be completed in upper case or mixed case.
-The default is to use upper case for procedures, functions and keywords,
-and mixed case for object class names and methods, similar to the
-conventions in the IDL manuals.  These defaults can be changed with the
-variable @code{idlwave-completion-case}.  For instance, to enable
-mixed-case completion for routines in addition to classes and methods,
-you need an entry such as @code{routine . preserve} in that variable.
-To enable total control over the case of completed items, independent of
-buffer context, set @code{idlwave-completion-force-default-case} to
-non-@code{nil}.
+IDL is a case-insensitive language, so casing is a matter of style
+only.  IDLWAVE helps maintain a consistent casing style for completed
+items.  The case of the completed words is determined by what is
+already in the buffer.  As an exception, when the partial word being
+completed is all lower case, the completion will be lower case as
+well.  If at least one character is upper case, the string will be
+completed in upper case or mixed case, depending on the value of the
+variable @code{idlwave-completion-case}.  The default is to use upper
+case for procedures, functions and keywords, and mixed case for object
+class names and methods, similar to the conventions in the IDL
+manuals.  For instance, to enable mixed-case completion for routines
+in addition to classes and methods, you need an entry such as
+@code{(routine . preserve)} in that variable.  To enable total control
+over the case of completed items, independent of buffer context, set
+@code{idlwave-completion-force-default-case} to non-@code{nil}.
 
 @defopt idlwave-completion-case
 Association list setting the case (UPPER/lower/Capitalized/MixedCase...)
@@ -1554,7 +1687,7 @@
 @code{idlwave-query-class} can be configured to make such prompting the
 default for all methods (not recommended), or selectively for very
 common methods for which the number of completing keywords would be too
-large (e.g. @code{Init}).
+large (e.g. @code{Init}).  
 
 @cindex Saving object class on @code{->}
 @cindex @code{->}
@@ -1568,8 +1701,9 @@
 can be used to turn it on.
 
 @defopt idlwave-completion-show-classes (@code{1})
-Non-@code{nil} means show classes in @file{*Completions*} buffer when
-completing object methods and keywords.
+Non-@code{nil} means show up to that many classes in
+@file{*Completions*} buffer when completing object methods and
+keywords.
 @end defopt
 
 @defopt idlwave-completion-fontify-classes (@code{t})
@@ -1630,23 +1764,23 @@
 @emph{chaining}, and is characterized by chained method calls like
 @w{@code{self->MySuperClass::SetProperty,_EXTRA=e}}.
 
-IDLWAVE can accommodate this special synergy between class and keyword
+IDLWAVE can accomodate this special synergy between class and keyword
 inheritance: if @code{_EXTRA} or @code{_REF_EXTRA} is detected among a
-method's keyword parameters, all keywords of superclass versions of the
-method being considered are included in completion.  There is of course
-no guarantee that this type of keyword chaining actually occurrs, but
-for some methods it's a very convenient assumption.  The variable
-@code{idlwave-keyword-class-inheritance} can be used to configure which
-methods have keyword inheritance treated in this simple, class-driven
-way.  By default, only @code{Init} and @code{(Get|Set)Property} are.
-The completion buffer will label keywords based on their originating
-class.
+method's keyword parameters, all keywords of superclass versions of
+the method being considered can be included in completion.  There is
+of course no guarantee that this type of keyword chaining actually
+occurrs, but for some methods it's a very convenient assumption.  The
+variable @code{idlwave-keyword-class-inheritance} can be used to
+configure which methods have keyword inheritance treated in this
+simple, class-driven way.  By default, only @code{Init} and
+@code{(Get|Set)Property} are.  The completion buffer will label
+keywords based on their originating class.
 
 @defopt idlwave-support-inheritance (@code{t})
 Non-@code{nil} means consider inheritance during completion, online help etc.
 @end defopt
 
-@defopt idlwave-keyword-class-inheritance
+@defopt idlwave-keyword-class-inheritance 
 A list of regular expressions to match methods for which simple
 class-driven keyword inheritance will be used for Completion.
 @end defopt
@@ -1676,7 +1810,7 @@
 simply add the following to your @file{.emacs}:
 
 @lisp
-   (add-hook 'idlwave-load-hook
+   (add-hook 'idlwave-load-hook 
              (lambda () (require 'idlw-complete-structtag)))
 @end lisp
 
@@ -1696,7 +1830,9 @@
 @code{idlwave-routine-info} would have used, taken from nearby buffer
 contents.  In the minibuffer, specify a complete routine name (including
 any class part).  IDLWAVE will display the source file in another
-window, positioned at the routine in question.
+window, positioned at the routine in question.  You can also visit a
+routine in the current buffer, with completion, by using a single prefix
+(@kbd{C-u C-c C-v}).
 
 @cindex Buffers, killing
 @cindex Killing autoloaded buffers
@@ -1719,9 +1855,9 @@
 
 @code{idlwave-resolve} is one way to get a library module within reach
 of IDLWAVE's routine info collecting functions.  A better way is to
-scan (parts of) the library (@pxref{Library Catalog}).  Routine info on
-library modules will then be available without the need to compile the
-modules first, and even without a running shell.
+keep routine information available in catalogs (@pxref{Catalogs}).
+Routine info on modules will then be available without the need to
+compile the modules first, and even without a running shell.
 
 @xref{Sources of Routine Info}, for more information on the ways IDLWAVE
 collects data about routines, and how to update this information.
@@ -1970,7 +2106,8 @@
 @end itemize
 
 @defopt idlwave-do-actions (@code{nil})
-Non-@code{nil} means performs actions when indenting.
+Non-@code{nil} means performs actions when indenting.  Individual action
+settings are described below and set separately.
 @end defopt
 
 @menu
@@ -2069,7 +2206,7 @@
      (idlwave-action-and-binding "\\<\\(pro\\|function\\)\\>[ \t]*\\<"
                                  '(capitalize-word 1) t)
      ;;  Capitalize common block name
-     (idlwave-action-and-binding "\\<common\\>[ \t]+\\<"
+     (idlwave-action-and-binding "\\<common\\>[ \t]+\\<" 
                                  '(capitalize-word 1) t)))
 @end lisp
 
@@ -2096,7 +2233,7 @@
 @cindex Modification timestamp
 @cindex Header, for file documentation
 @cindex Timestamp, in doc header.
-@cindex ChangeLog, in doc header.
+@cindex Changelog, in doc header.
 
 @kindex C-c C-h
 @kindex C-c C-m
@@ -2220,21 +2357,21 @@
 program as an inferior process of Emacs, and works closely with the
 IDLWAVE major mode in buffers.  It can be used to work with IDL
 interactively, to compile and run IDL programs in Emacs buffers and to
-debug these programs.  The IDLWAVE shell is built upon @file{comint}, an
+debug these programs.  The IDLWAVE shell is built on @file{comint}, an
 Emacs packages which handles the communication with the IDL program.
-Unfortunately IDL for Windows and MacOS do not have command-prompt
-versions and thus do not allow the interaction with
-Emacs@footnote{Please inform the maintainer if you come up with a way to
-make the IDLWAVE shell work on these systems.} --- so the IDLWAVE shell
-currently only works under Unix.
+Unfortunately IDL for Windows does not have command-prompt versions
+and thus do not allow the interaction with Emacs@footnote{Please
+inform the maintainer if you come up with a way to make the IDLWAVE
+shell work on these systems.} --- so the IDLWAVE shell currently only
+works under Unix and MacOSX.
 
 @menu
 * Starting the Shell::          How to launch IDL as a subprocess
 * Using the Shell::             Interactively working with the Shell
-* Commands Sent to the Shell::
-* Debugging IDL Programs::
-* Examining Variables::
-* Custom Expression Examination::
+* Commands Sent to the Shell::  
+* Debugging IDL Programs::      
+* Examining Variables::         
+* Custom Expression Examination::  
 @end menu
 
 @node Starting the Shell, Using the Shell, The IDLWAVE Shell, The IDLWAVE Shell
@@ -2249,22 +2386,23 @@
 The IDLWAVE shell can be started with the command @kbd{M-x
 idlwave-shell}.  In @code{idlwave-mode} the function is bound to
 @kbd{C-c C-s}.  It creates a buffer @file{*idl*} which is used to
-interact with the shell.  If the shell is already running, @kbd{C-c C-s}
-will simple switch to the shell buffer.  The command @kbd{C-c C-l}
-(@code{idlwave-shell-recenter-shell-window}) displays the shell window
-without selecting it.  The shell can also be started automatically when
-another command tries to send a command to it.  To enable auto start,
-set the variable @code{idlwave-shell-automatic-start} to @code{t}.
+interact with the shell.  If the shell is already running, @kbd{C-c
+C-s} will simply switch to the shell buffer.  The command @kbd{C-c
+C-l} (@code{idlwave-shell-recenter-shell-window}) displays the shell
+window without selecting it.  The shell can also be started
+automatically when another command tries to send a command to it.  To
+enable auto start, set the variable
+@code{idlwave-shell-automatic-start} to @code{t}.
 
 In order to create a separate frame for the IDLWAVE shell buffer, call
 @code{idlwave-shell} with a prefix argument: @kbd{C-u C-c C-s} or
 @kbd{C-u C-c C-l}.  If you always want a dedicated frame for the shell
 window, configure the variable
-@code{idlwave-shell-use-dedicated-frame}.
-
-To launch a quick IDLWAVE shell directly from a shell prompt without an
-IDLWAVE buffer (e.g., as a replacement for running inside an xterm),
-define an alias with the following content:
+@code{idlwave-shell-use-dedicated-frame}. 
+
+To launch a quick IDLWAVE shell directly from a shell prompt without
+an IDLWAVE buffer (e.g., as a replacement for running inside an
+xterm), define a system alias with the following content:
 
 @example
 emacs -geometry 80x32 -eval "(idlwave-shell 'quick)"
@@ -2273,6 +2411,16 @@
 Replace the @samp{-geometry 80x32} option with @samp{-nw} if you prefer
 the Emacs process to run directly inside the terminal window.
 
+@cindex ENVI
+@cindex IDL> Prompt
+
+To use IDLWAVE with ENVI or other custom packages which change the
+@samp{IDL> } prompt, you must change the
+@code{idlwave-shell-prompt-pattern}, which defaults to @samp{"^ ?IDL>
+"}.  Normally, you can just replace the @samp{IDL} in this expression
+with the prompt you see.  A suitable pattern which matches the prompt
+for both ENVI and IDL simultaneously is @samp{"^ ?\\(ENVI\\|IDL\\)> "}.
+
 @defopt idlwave-shell-explicit-file-name (@file{idl})
 This is the command to run IDL.
 @end defopt
@@ -2302,12 +2450,14 @@
 Non-@code{nil} means preserve command history between sessions.
 @end defopt
 
-@defopt idlwave-shell-command-history-file (@file{~/.idlwhist})
+@defopt idlwave-shell-command-history-file (@file{~/.idlwave/.idlwhist})
 The file in which the command history of the idlwave shell is saved.
+Unless it's an absolute path, it goes in
+@code{idlwave-config-directory}.
 @end defopt
-
+  
 @defopt idlwave-shell-use-dedicated-frame (@code{nil})
-Non-@code{nil} means IDLWAVE should use a special frame to display
+Non-@code{nil} means IDLWAVE should use a special frame to display the
 shell buffer.
 @end defopt
 
@@ -2476,18 +2626,22 @@
 from the user, but this is configurable.  The custom variable
 @code{idlwave-abbrev-show-commands} allows you to configure which
 commands sent to the shell are shown there.  For a related customization
-for separating the output of @emph{examine} commands @xref{Examining
+for separating the output of @emph{examine} commands, see @ref{Examining
 Variables}.
 
 @defopt idlwave-shell-show-commands (@code{'(run misc breakpoint)})
 A list of command types to echo in the shell when sent.  Possible values
 are @code{run} for @code{.run}, @code{.compile} and other run commands,
-@code{misc} for lesser used commands like @code{window}, @code{retall},
-etc., @code{breakpoint} for breakpoint setting and clearing commands,
-and @code{debug} for other debug, stepping, and continue commands.  In
-addition, if the variable is set to the single symbol @code{'everything},
-all the copious shell input is displayed (which is probably only useful
-for debugging purposes).
+@code{misc} for lesser used commands like @code{window},
+@code{retall},@code{close}, etc., @code{breakpoint} for breakpoint
+setting and clearing commands, and @code{debug} for other debug,
+stepping, and continue commands.  In addition, if the variable is set to
+the single symbol @code{'everything}, all the copious shell input is
+displayed (which is probably only useful for debugging purposes).
+N.B. For hidden commands which produce output by side-effect, that
+output remains hidden (e.g., stepping through a @code{print} command).
+As a special case, any error message in the output will be displayed
+(e.g., stepping to an error).
 @end defopt
 
 @node Debugging IDL Programs, Examining Variables, Commands Sent to the Shell, The IDLWAVE Shell
@@ -2497,17 +2651,21 @@
 @cindex Toolbar
 
 Programs can be compiled, run, and debugged directly from the source
-buffer in Emacs.  IDLWAVE makes compiling and debugging IDL programs
-far less cumbersome by providing a full-featured,
-key/menu/toolbar-driven interface to commands like @code{breakpoint},
-@code{.step}, @code{.run}, etc.
-
-The IDLWAVE shell installs key bindings both in the shell buffer and in
-all IDL code buffers of the current Emacs session, so debug commands
-work in both places (in the shell, commands operate on the last file
-compiled).  On Emacs versions which support this, a debugging toolbar is
-also installed.  The display of the toolbar can be toggled with @kbd{C-c
-C-d C-t} (@code{idlwave-shell-toggle-toolbar}).
+buffer in Emacs, walking through arbitrarily deeply nested code,
+printing expressions and skipping up and down the calling stack along
+the way.  IDLWAVE makes compiling and debugging IDL programs far less
+cumbersome by providing a full-featured, key/menu/toolbar-driven
+interface to commands like @code{breakpoint}, @code{.step},
+@code{.run}, etc.  It can even perform complex debug operations not
+natively supported by IDL (like continuing to the line at the cursor).
+
+The IDLWAVE shell installs key bindings both in the shell buffer and
+in all IDL code buffers of the current Emacs session, so debug
+commands work in both places (in the shell, commands operate on the
+last file compiled).  On Emacs versions which support it, a debugging
+toolbar is also installed.  The toolbar display can be toggled with
+@kbd{C-c C-d C-t} (@code{idlwave-shell-toggle-toolbar}).
+
 
 @defopt idlwave-shell-use-toolbar (@code{t})
 Non-@code{nil} means use the debugging toolbar in all IDL related
@@ -2515,38 +2673,67 @@
 @end defopt
 
 @menu
-* Debug Key Bindings::
-* Compiling Programs::
-* Breakpoints and Stepping::
-* Walking the Calling Stack::
+* A Tale of Two Modes::         
+* Debug Key Bindings::          
+* Breakpoints and Stepping::    
+* Compiling Programs::          
+* Walking the Calling Stack::   
+* Electric Debug Mode::         
 @end menu
 
-@node Debug Key Bindings, Compiling Programs, Debugging IDL Programs, Debugging IDL Programs
+
+@node A Tale of Two Modes, Debug Key Bindings, Debugging IDL Programs, Debugging IDL Programs
+@subsection A Tale of Two Modes
+@cindex Electric Debug Mode
+@cindex Debugging Interface
+
+The many debugging, compiling, and examination commands provided in
+IDLWAVE are available simultaneously through two different interfaces:
+the original, multi-key command interface, and the new Electric Debug
+Mode.  The functionality they offer is similar, but the way you
+interact with them is quite different.  The main difference is that,
+in Electric Debug Mode, the source buffers are made read-only, and
+single key-strokes are used to step through, examine expressions, set
+and remove breakpoints, etc.  The same variables, prefix arguments,
+and settings apply to both versions, and both can be used
+interchangeably.  By default, when breakpoints are hit, Electric Debug
+Mode is enabled.  The traditional interface is described first.
+@xref{Electric Debug Mode}, for more on that mode.
+
+
+@sp 1
+@noindent @strong{Note that electric debug mode can be prevented from
+activating automatically by customizing the variable
+@code{idlwave-shell-automatic-electric-debug}.}
+
+@node Debug Key Bindings, Breakpoints and Stepping, A Tale of Two Modes, Debugging IDL Programs
 @subsection Debug Key Bindings
 @kindex C-c C-d
 @cindex Key bindings
 
-The debugging key bindings are by default on the prefix key @kbd{C-c
-C-d}, so for example setting a breakpoint is done with @kbd{C-c C-d
-C-b}, and compiling a source file with @kbd{C-c C-d C-c}.  If you find
-this too much work, you can easily configure IDLWAVE to use one or more
+The standard debugging key bindings are always available by default on
+the prefix key @kbd{C-c C-d}, so, for example, setting a breakpoint is
+done with @kbd{C-c C-d C-b}, and compiling a source file with @kbd{C-c
+C-d C-c}.  You can also easily configure IDLWAVE to use one or more
 modifier keys not in use by other commands, in lieu of the prefix
 @kbd{C-c C-d} (though these bindings will typically also be available
---- see @code{idlwave-shell-activate-prefix-keybindings}).  For example,
-if you write in @file{.emacs}:
+--- see @code{idlwave-shell-activate-prefix-keybindings}).  For
+example, if you include in @file{.emacs}:
 
 @lisp
 (setq idlwave-shell-debug-modifiers '(control shift))
 @end lisp
 
-@noindent a breakpoint can be set by pressing @kbd{b} while holding down
+@noindent a breakpoint can then be set by pressing @kbd{b} while holding down
 @kbd{shift} and @kbd{control} keys, i.e. @kbd{C-S-b}.  Compiling a
 source file will be on @kbd{C-S-c}, deleting a breakpoint @kbd{C-S-d},
-etc.  In the remainder of this chapter we will assume that the @kbd{C-c
-C-d} bindings are active, but each of these bindings will have an
-equivalent single-keypress shortcut if modifiers are given in the
-@code{idlwave-shell-debug-modifiers} variable (see @pxref{Lesson II --
-Customization}).
+etc.  In the remainder of this chapter we will assume that the
+@kbd{C-c C-d} bindings are active, but each of these bindings will
+have an equivalent shortcut if modifiers are given in the
+@code{idlwave-shell-debug-modifiers} variable (@pxref{Lesson II --
+Customization}).  A much simpler and faster form of debugging for
+running code is also available by default --- see @ref{Electric Debug
+Mode}.
 
 @defopt idlwave-shell-prefix-key (@kbd{C-c C-d})
 The prefix key for the debugging map
@@ -2559,53 +2746,13 @@
 @end defopt
 
 @defopt idlwave-shell-debug-modifiers (@code{nil})
-List of modifier keys to use for additional binding of debugging
-commands in the shell and source buffers.  Can be one or more of
-@code{control}, @code{meta}, @code{super}, @code{hyper}, @code{alt}, and
-@code{shift}.
+List of modifier keys to use for additional, alternative binding of
+debugging commands in the shell and source buffers.  Can be one or
+more of @code{control}, @code{meta}, @code{super}, @code{hyper},
+@code{alt}, and @code{shift}.
 @end defopt
 
-@node Compiling Programs, Breakpoints and Stepping, Debug Key Bindings, Debugging IDL Programs
-@subsection Compiling Programs
-@cindex Compiling programs
-@cindex Programs, compiling
-@cindex Default command line, executing
-@cindex Executing a default command line
-
-@kindex C-c C-d C-c
-In order to compile the current buffer under the IDLWAVE shell, press
-@kbd{C-c C-d C-c} (@code{idlwave-save-and-run}).  This first saves the
-current buffer and then sends the command @samp{.run path/to/file} to the
-shell.  You can also execute @kbd{C-c C-d C-c} from the shell buffer, in
-which case the most recently compiled buffer will be saved and
-re-compiled.
-
-When developing or debugging a program, it is often necessary to execute
-the same command line many times.  A convenient way to do this is
-@kbd{C-c C-d C-y} (@code{idlwave-shell-execute-default-command-line}).
-This command first resets IDL from a state of interrupted execution by
-closing all files and returning to the main interpreter level.  Then a
-default command line is send to the shell.  To edit the default command
-line, call @code{idlwave-shell-execute-default-command-line} with a
-prefix argument: @kbd{C-u C-c C-d C-y}.
-
-@defopt idlwave-shell-mark-stop-line (@code{t})
-Non-@code{nil} means mark the source code line where IDL is currently
-stopped.  The value specifies the preferred method.  Legal values are
-@code{nil}, @code{t}, @code{arrow}, and @code{face}.
-@end defopt
-
-@defopt idlwave-shell-overlay-arrow (@code{">"})
-The overlay arrow to display at source lines where execution halts, if
-configured in @code{idlwave-shell-mark-stop-line}.
-@end defopt
-
-@defopt idlwave-shell-stop-line-face
-The face which highlights the source line where IDL is stopped, if
-configured in @code{idlwave-shell-mark-stop-line}.
-@end defopt
-
-@node Breakpoints and Stepping, Walking the Calling Stack, Compiling Programs, Debugging IDL Programs
+@node Breakpoints and Stepping, Compiling Programs, Debug Key Bindings, Debugging IDL Programs
 @subsection Breakpoints and Stepping
 @cindex Breakpoints
 @cindex Stepping
@@ -2613,24 +2760,33 @@
 
 @kindex C-c C-d C-b
 @kindex C-c C-d C-b
-You can set breakpoints and step through a program with IDLWAVE.
-Setting a breakpoint in the current line of the source buffer is done
-with @kbd{C-c C-d C-b} (@code{idlwave-shell-break-here}).  With a prefix
-arg of 1 (i.e. @kbd{C-1 C-c C-d C-b}), the breakpoint gets a
+IDLWAVE helps you set breakpoints and step through code.  Setting a
+breakpoint in the current line of the source buffer is accomplished
+with @kbd{C-c C-d C-b} (@code{idlwave-shell-break-here}).  With a
+prefix arg of 1 (i.e. @kbd{C-1 C-c C-d C-b}), the breakpoint gets a
 @code{/ONCE} keyword, meaning that it will be deleted after first use.
-With a numeric prefix greater than one (e.g. @kbd{C-4 C-c C-d C-b}), the
-breakpoint will only be active the @code{nth} time it is hit.  With a
-single non-numeric prefix (i.e. @kbd{C-u C-c C-d C-b}), prompt for a
-condition --- an IDL expression to be evaulated and trigger the
+With a numeric prefix greater than one (e.g. @kbd{C-4 C-c C-d C-b}),
+the breakpoint will only be active the @code{nth} time it is hit.
+With a single non-numeric prefix (i.e. @kbd{C-u C-c C-d C-b}), prompt
+for a condition --- an IDL expression to be evaulated and trigger the
 breakpoint only if true.  To clear the breakpoint in the current line,
-use @kbd{C-c C-d C-d} (@code{idlwave-clear-current-bp}).  When executed
-from the shell window, the breakpoint where IDL is currently stopped
-will be deleted.  To clear all breakpoints, use @kbd{C-c C-d C-a}
-(@code{idlwave-clear-all-bp}).  Breakpoint lines are highlighted in the
-source code.  Note that IDL places breakpoints as close as possible on
-or after the line you specify.  IDLWAVE queries the shell for the actual
-breakpoint location which was set, so the exact line you specify may not
-be marked.
+use @kbd{C-c C-d C-d} (@code{idlwave-clear-current-bp}).  When
+executed from the shell window, the breakpoint where IDL is currently
+stopped will be deleted.  To clear all breakpoints, use @kbd{C-c C-d
+C-a} (@code{idlwave-clear-all-bp}).  Breakpoints can also be disabled
+and re-enabled: @kbd{C-c C-d C-\}
+(@code{idlwave-shell-toggle-enable-current-bp}).  
+
+
+Breakpoint lines are highlighted or indicated with an icon in the
+source code (different icons for conditional, after, and other break
+types).  Disabled breakpoints are @emph{grayed out} by default.  Note
+that IDL places breakpoints as close as possible on or after the line
+you specify.  IDLWAVE queries the shell for the actual breakpoint
+location which was set, so the exact line you specify may not be
+marked.  You can re-sync the breakpoint list and display at any time
+(e.g., if you add or remove some on the command line) using @kbd{C-c
+C-d C-l}.
 
 Once the program has stopped somewhere, you can step through it.  The
 most important stepping commands are @kbd{C-c C-d C-s} to execute one
@@ -2651,6 +2807,14 @@
 @tab Clear current breakpoint (@code{idlwave-shell-clear-current-bp})
 @item @kbd{C-c C-d C-a}
 @tab Clear all breakpoints (@code{idlwave-shell-clear-all-bp})
+@item @kbd{C-c C-d [}
+@tab Go to the previous breakpoint (@code{idlwave-shell-goto-previous-bp})
+@item @kbd{C-c C-d ]}
+@tab Go to the next breakpoint (@code{idlwave-shell-goto-next-bp})
+@item @kbd{C-c C-d C-\}
+@tab Disable/Enable current breakpoint (@code{idlwave-shell-toggle-enable-current-bp})
+@item @kbd{C-c C-d C-j}
+@tab Set a breakpoint at the beginning of the enclosing routine.
 @item @kbd{C-c C-d C-s}
 @tab Step, into function calls (@code{idlwave-shell-step})
 @item @kbd{C-c C-d C-n}
@@ -2666,13 +2830,16 @@
 @item @kbd{C-c C-d C-h}
 @tab Continue to line at cursor position (@code{idlwave-shell-to-here})
 @item @kbd{C-c C-d C-r}
-@tab Continue execution to next breakpoint (@code{idlwave-shell-cont})
+@tab Continue execution to next breakpoint, if any (@code{idlwave-shell-cont})
 @item @kbd{C-c C-d C-up}
 @tab Show higher level in calling stack (@code{idlwave-shell-stack-up})
 @item @kbd{C-c C-d C-down}
 @tab Show lower level in calling stack (@code{idlwave-shell-stack-down})
 @end multitable
 
+All of these commands have equivalents in Electric Debug Mode, which
+provides faster access (@pxref{Electric Debug Mode}).
+
 @defopt idlwave-shell-mark-breakpoints (@code{t})
 Non-@code{nil} means mark breakpoints in the source file buffers.  The
 value indicates the preferred method.  Legal values are @code{nil},
@@ -2684,7 +2851,49 @@
 @code{idlwave-shell-mark-breakpoints} has the value @code{face}.
 @end defopt
 
-@node Walking the Calling Stack,  , Breakpoints and Stepping, Debugging IDL Programs
+@node Compiling Programs, Walking the Calling Stack, Breakpoints and Stepping, Debugging IDL Programs
+@subsection Compiling Programs
+@cindex Compiling programs
+@cindex Programs, compiling
+@cindex Default command line, executing
+@cindex Executing a default command line
+
+@kindex C-c C-d C-c
+In order to compile the current buffer under the IDLWAVE shell, press
+@kbd{C-c C-d C-c} (@code{idlwave-save-and-run}).  This first saves the
+current buffer and then sends the command @samp{.run path/to/file} to the 
+shell.  You can also execute @kbd{C-c C-d C-c} from the shell buffer, in 
+which case the most recently compiled buffer will be saved and
+re-compiled.
+
+When developing or debugging a program, it is often necessary to execute
+the same command line many times.  A convenient way to do this is
+@kbd{C-c C-d C-y} (@code{idlwave-shell-execute-default-command-line}).
+This command first resets IDL from a state of interrupted execution by
+closing all files and returning to the main interpreter level.  Then a
+default command line is send to the shell.  To edit the default command
+line, call @code{idlwave-shell-execute-default-command-line} with a
+prefix argument: @kbd{C-u C-c C-d C-y}.  If no default command line has
+been set (or you give two prefix arguments), the last command on the
+@code{comint} input history is sent.
+
+@defopt idlwave-shell-mark-stop-line (@code{t})
+Non-@code{nil} means mark the source code line where IDL is currently
+stopped.  The value specifies the preferred method.  Legal values are
+@code{nil}, @code{t}, @code{arrow}, and @code{face}.
+@end defopt
+
+@defopt idlwave-shell-overlay-arrow (@code{">"})
+The overlay arrow to display at source lines where execution halts, if
+configured in @code{idlwave-shell-mark-stop-line}.
+@end defopt
+
+@defopt idlwave-shell-stop-line-face
+The face which highlights the source line where IDL is stopped, if
+configured in @code{idlwave-shell-mark-stop-line}.
+@end defopt
+
+@node Walking the Calling Stack, Electric Debug Mode, Compiling Programs, Debugging IDL Programs
 @subsection Walking the Calling Stack
 @cindex Calling stack, walking
 
@@ -2704,25 +2913,150 @@
 higher calling stack levels.
 
 @ifhtml
+<A NAME="EDEBUG"></A>
+@end ifhtml
+@node Electric Debug Mode,  , Walking the Calling Stack, Debugging IDL Programs
+@subsection Electric Debug Mode
+@cindex Electric Debug Mode
+@cindex @samp{*Debugging*}
+
+Even with a convenient debug key prefix enabled, repetitive stepping,
+variable examination (@pxref{Examining Variables}), and other
+debugging activities can be awkward and slow using commands which
+require multiple keystrokes.  Luckily, there's a better way, inspired
+by the lisp e-debug mode, and available through the @emph{Electric
+Debug Mode}.  By default, as soon as a breakpoint is hit, this minor
+mode is enabled.  The buffer showing the line where execution has
+halted is switched to Electric Debug Mode.  This mode is visible as
+@samp{*Debugging*} in the mode line, and a different face (violet by
+default, where color is available) for the line stopped at point.  The
+buffer is made read-only and single-character bindings for the most
+commonly used debugging commands are enabled:
+
+@multitable @columnfractions .2 .8
+@item @kbd{a}
+@tab Clear all breakpoints (@code{idlwave-shell-clear-all-bp})
+@item @kbd{b}
+@tab Set breakpoint, @kbd{C-u b} for a conditional break, @kbd{C-n b} for nth hit (@code{idlwave-shell-break-here})
+@item @kbd{d}
+@tab Clear current breakpoint (@code{idlwave-shell-clear-current-bp})
+@item @kbd{h}
+@tab Continue to the line at cursor position (@code{idlwave-shell-to-here})
+@item @kbd{i}
+@tab Set breakpoint in function named here (@code{idlwave-shell-break-in})
+@item @kbd{[}
+@tab Go to the previous breakpoint in the file (@code{idlwave-shell-goto-previous-bp})
+@item @kbd{]}
+@tab Go to the next breakpoint in the file
+(@code{idlwave-shell-goto-next-bp})
+@item @kbd{\}
+@tab Disable/Enable current breakpoint (@code{idlwave-shell-toggle-enable-current-bp})
+@item @kbd{j}
+@tab Set breakpoint at beginning of enclosing routine (@code{idlwave-shell-break-this-module})
+@item @kbd{k}
+@tab Skip one statement (@code{idlwave-shell-skip})
+@item @kbd{m}
+@tab Continue to end of function (@code{idlwave-shell-return})
+@item @kbd{n}
+@tab Step, over function calls (@code{idlwave-shell-stepover})
+@item @kbd{o}
+@tab Continue past end of function (@code{idlwave-shell-out})
+@item @kbd{p}
+@tab Print expression near point or in region with @kbd{C-u p} (@code{idlwave-shell-print})
+@item @kbd{q}
+@tab End the debugging session and return to the Shell's main level
+(@code{idlwave-shell-retall})
+@item @kbd{r}
+@tab Continue execution to next breakpoint, if any (@code{idlwave-shell-cont})
+@item @kbd{s} or @kbd{@key{SPACE}}
+@tab Step, into function calls (@code{idlwave-shell-step})
+@item @kbd{t}
+@tab Print a calling-level traceback in the shell
+@item @kbd{u}
+@tab Continue to end of block (@code{idlwave-shell-up})
+@item @kbd{v}
+@tab Turn Electric Debug Mode off
+(@code{idlwave-shell-electric-debug-mode})
+@item @kbd{x}
+@tab Examine expression near point (or in region with @kbd{C-u x})
+with shortcut of examine type.
+@item @kbd{z}
+@tab Reset IDL (@code{idlwave-shell-reset})
+@item @kbd{+} or @kbd{=}
+@tab Show higher level in calling stack (@code{idlwave-shell-stack-up})
+@item @kbd{-} or @kbd{_}
+@tab Show lower level in calling stack (@code{idlwave-shell-stack-down})
+@item @kbd{?}
+@tab Help on expression near point or in region with @kbd{C-u ?}
+(@code{idlwave-shell-help-expression})
+@item @kbd{C-?}
+@tab Show help on the commands available.
+@end multitable
+
+Most single-character electric debug bindings use the final keystroke
+of the equivalent multiple key commands (which are of course also
+still available), but some differ (e.g. @kbd{t},@kbd{q},@kbd{x}).
+Some have additional convenience bindings (like @kbd{@key{SPACE}} for
+stepping).  All prefix and other argument options described in this
+section for the commands invoked by electric debug bindings are still
+valid.  For example, @kbd{C-u b} sets a conditional breakpoint, just
+as it did with @kbd{C-u C-c C-d C-b}.
+
+You can toggle the electric debug mode at any time in a buffer using
+@kbd{C-c C-d C-v} (@kbd{v} to turn it off while in the mode), or from
+the Debug menu.  Normally the mode will be enabled and disabled at the
+appropriate times, but occassionally you might want to edit a file
+while still debugging it, or switch to the mode for conveniently
+setting lots of breakpoints.
+
+To quickly abandon a debugging session and return to normal editing at
+the Shell's main level, use @kbd{q} (@code{idlwave-shell-retall}).
+This disables electric debug mode in all IDLWAVE buffers@footnote{Note
+that this binding is not symmetric: @kbd{C-c C-d C-q} is bound to
+@code{idlwave-shell-quit}, which quits your IDL session.}.  Help is
+available for the command shortcuts with @kbd{C-?}.  If you find this
+mode gets in your way, you can keep it from automatically activating
+by setting the variable @code{idlwave-shell-automatic-electric-debug}
+to @code{nil}, or @code{'breakpoint}.  If you'd like the convenient
+electric debug shortcuts available also when run-time errors are
+encountered, set to @code{t}.
+
+@defopt idlwave-shell-automatic-electric-debug (@code{'breakpoint})
+Whether to enter electric debug mode automatically when a breakpoint
+or run-time error is encountered, and then disable it in all buffers
+when the $MAIN$ level is reached (either through normal program
+execution, or retall).  In addition to @code{nil} for never, and
+@code{t} for both breakpoints and errors, this can be
+@code{'breakpoint} (the default) to enable it only at breakpoint
+halts.
+@end defopt
+
+@defopt idlwave-shell-electric-zap-to-file (@code{t})
+If set, when entering electric debug mode, select the window displaying
+the file where point is stopped.  This takes point away from the shell
+window, but is useful for immediate stepping, etc.
+@end defopt
+
+@ifhtml
 <A NAME="EXAMINE"></A>
 @end ifhtml
 @node Examining Variables, Custom Expression Examination, Debugging IDL Programs, The IDLWAVE Shell
 @section Examining Variables
 @cindex @code{PRINT} expressions
 @cindex @code{HELP}, on expressions
-@cindex Expressions, printing
-@cindex Expressions, help
+@cindex Expressions, printing & help
+@cindex Examining expressions
 @cindex Printing expressions
 @cindex Mouse binding to print expressions
 
 @kindex C-c C-d C-p
-Do you find yourself repeatedly typing, e.g. @code{print,n_elements(x)},
-and similar statements to remind yourself of the
-type/size/structure/value/etc. of variables and expressions in your code
-or at the command line?  IDLWAVE has a suite of special commands to
-automate these types of variables or expression examinations.  They work
-by sending statements to the shell formatted to include the indicated
-expression.
+Do you find yourself repeatedly typing,
+e.g. @code{print,n_elements(x)}, and similar statements to remind
+yourself of the type/size/structure/value/etc. of variables and
+expressions in your code or at the command line?  IDLWAVE has a suite
+of special commands to automate these types of variable or expression
+examinations.  They work by sending statements to the shell formatted
+to include the indicated expression.
 
 These examination commands can be used in the shell or buffer at any
 time (as long as the shell is running), and are very useful when
@@ -2730,7 +3064,7 @@
 or while composing a long command in the IDLWAVE shell.  In the latter
 case, the command is sent to the shell and its output is visible, but
 point remains unmoved in the command being composed --- you can inspect
-the constituents of a command you're building without interrupting the
+the contituents of a command you're building without interrupting the
 process of building it!  You can even print arbitrary expressions from
 older input or output further up in the shell window --- any expression,
 variable, number, or function you see can be examined.
@@ -2743,13 +3077,14 @@
 
 The two most basic examine commands are bound to @kbd{C-c C-d C-p}, to
 print the expression at point, and @kbd{C-c C-d ?}, to invoke help on
-this expression.  The expression at point is either an array expression
-or a function call, or the contents of a pair of parentheses.  The
-selected expression is highlighted, and simultaneously the resulting
-output is highlighted in the shell.  Calling the above commands with a
-prefix argument will prompt for an expression instead of using the one
-at point.  Two prefix arguments (@kbd{C-u C-u C-c C-d C-p}) will use the
-current region as expression.
+this expression@footnote{Available as @kbd{p} and @kbd{?} in Electric
+Debug Mode (@pxref{Electric Debug Mode})}.  The expression at point is
+either an array expression or a function call, or the contents of a
+pair of parentheses.  The selected expression is highlighted, and
+simultaneously the resulting output is highlighted in the shell.
+Calling the above commands with a prefix argument will use the current
+region as expression instead of using the one at point.  Two prefix
+arguments (@kbd{C-u C-u C-c C-d C-p}) will prompt for an expression.
 
 For added speed and convenience, there are mouse bindings which allow
 you to click on expressions and examine their values.  Use
@@ -2757,10 +3092,10 @@
 help (i.e. you need to hold down @key{META} and @key{CONTROL} while
 clicking with the middle mouse button).  If you simply click, the
 nearest expression will be selected in the same manner as described
-above.  You can also @emph{drag} the mouse in order to highlight exactly
-a specific expression or sub-expression to be examined.  For custom
-expression examination, and the customizable pop-up examine selection,
-@xref{Custom Expression Examination}.
+above.  You can also @emph{drag} the mouse in order to highlight
+exactly the specific expression or sub-expression you want to examine.
+For custom expression examination, and the powerful customizable
+pop-up examine selection, @xref{Custom Expression Examination}.
 
 @cindex Printing expressions, on calling stack
 @cindex Restrictions for expression printing
@@ -2782,7 +3117,8 @@
 @cindex ROUTINE_NAMES, IDL procedure
 N.B.: printing values of expressions on higher levels of the calling
 stack uses the @emph{unsupported} IDL routine @code{ROUTINE_NAMES},
-which may or may not be available in future versions of IDL.
+which may or may not be available in future versions of IDL.  Caveat
+Examinor.
 @end itemize
 
 @defopt idlwave-shell-expression-face
@@ -2792,14 +3128,14 @@
 @end defopt
 
 @defopt idlwave-shell-output-face
-The face for @code{idlwave-shell-output-overlay}.
+The face for @code{idlwave-shell-output-overlay}.  
 Allows to choose the font, color and other properties for the most
 recent output of IDL when examining an expression."
 @end defopt
 
 @defopt idlwave-shell-separate-examine-output (@code{t})
 If non-@code{nil}, re-direct the output of examine commands to a special
-@file{*Examine*} buffer, instead of in the shell itself.
+@file{*Examine*} buffer, instead of in the shell itself. 
 @end defopt
 
 @node Custom Expression Examination,  , Examining Variables, The IDLWAVE Shell
@@ -2812,45 +3148,53 @@
 @code{widget_info()}).  Rather than attempt to include them all, IDLWAVE
 provides two easy methods to customize your own commands, with a special
 mouse examine command, and two macros for generating your own examine
-bindings.
-
-The most powerful and flexible mouse examine command is available on
-@kbd{C-S-Mouse-2}.  Just as for all the other mouse examine commands, it
-permits click or drag expression selection, but instead of sending
-hard-coded commands to the shell, it pops-up a customizable selection
-list of examine functions to choose among, configured with the
-@code{idlwave-shell-examine-alist} variable.  This variable is a list of
-key-value pairs (an @emph{alist} in Emacs parlance), where the keys name
-the command, and the values are the command strings, in which the text
-@code{___} (three underscores) will be replaced by the selected
-expression before being sent to the shell.  An example might be key
-@code{Structure Help} with value @code{help,___,/STRUCTURE}.
-@code{idlwave-shell-examine-alist} comes by default with a large list of
-examine commands, but can be easily customized to add more.
-
-In addition to the pop-up mouse command, you can easily create your own
-customized bindings to inspect expressions using the two convenience
-macros @code{idlwave-shell-inspect} and
-@code{idlwave-shell-mouse-inspect}.  These create keyboard or
-mouse-based custom inspections of variables, sharing all the same
-properties of the built-in examine commands.  Both functions take a
-single string argument sharing the syntax of the
+key and mouse bindings.
+
+The most powerful and flexible mouse examine command of all is
+available on @kbd{C-S-Mouse-2}.  Just as for all the other mouse
+examine commands, it permits click or drag expression selection, but
+instead of sending hard-coded commands to the shell, it pops-up a
+customizable selection list of examine functions to choose among,
+configured with the @code{idlwave-shell-examine-alist}
+variable@footnote{In Electric Debug Mode (@pxref{Electric Debug
+Mode}), the key @kbd{x} provides a single-character shortcut interface
+to the same examine functions for the expression at point or marked by
+the region.}.  This variable is a list of key-value pairs (an
+@emph{alist} in Emacs parlance), where the key gives a name to be
+shown for the examine command, and the value is the command strings
+itself, in which the text @code{___} (three underscores) will be
+replaced by the selected expression before being sent to the shell.
+An example might be key @code{Structure Help} with value
+@code{help,___,/STRUCTURE}.  In that case, you'd be prompted with
+@emph{Structure Help}, which might send something like
+@code{help,var,/STRUCTURE} to the shell for output.
+@code{idlwave-shell-examine-alist} comes configured by default with a
+large list of examine commands, but you can easily customize it to add
+your own.
+
+In addition to configuring the functions available to the pop-up mouse
+command, you can easily create your own customized bindings to inspect
+expressions using the two convenience macros
+@code{idlwave-shell-examine} and @code{idlwave-shell-mouse-examine}.
+These create keyboard or mouse-based custom inspections of variables,
+sharing all the same properties of the built-in examine commands.
+Both functions take a single string argument sharing the syntax of the
 @code{idlwave-shell-examine-alist} values, e.g.:
 
 @lisp
 (add-hook 'idlwave-shell-mode-hook
           (lambda ()
-            (idlwave-shell-define-key-both [s-down-mouse-2]
-                                 (idlwave-shell-mouse-examine
+            (idlwave-shell-define-key-both [s-down-mouse-2] 
+                                 (idlwave-shell-mouse-examine 
                                   "print, size(___,/DIMENSIONS)"))
             (idlwave-shell-define-key-both [f9] (idlwave-shell-examine
                                        "print, size(___,/DIMENSIONS)"))
-            (idlwave-shell-define-key-both [f10] (idlwave-shell-examine
+            (idlwave-shell-define-key-both [f10] (idlwave-shell-examine 
                                         "print,size(___,/TNAME)"))
             (idlwave-shell-define-key-both [f11] (idlwave-shell-examine
                                         "help,___,/STRUCTURE"))))
-@end lisp
-
+@end lisp                                        
+            
 @noindent Now pressing @key{f9}, or middle-mouse dragging with the
 @key{SUPER} key depressed, will print the dimensions of the nearby or
 highlighted expression.  Pressing @key{f10} will give the type string,
@@ -2858,10 +3202,10 @@
 see, the possibilities are only marginally finite.
 
 @defopt idlwave-shell-examine-alist
-An alist of examine commands in which the keys name the command and are
-displayed in the selection pop-up, and the values are custom IDL examine
-command strings to send, after all instances of @code{___} are replaced
-by the indicated expression.
+An alist of examine commands in which the keys name the command and
+are displayed in the selection pop-up, and the values are custom IDL
+examine command strings to send, after all instances of @code{___}
+(three underscores) are replaced by the indicated expression.
 @end defopt
 
 
@@ -2872,7 +3216,6 @@
 @menu
 * Installing IDLWAVE::          How to install the distribution
 * Installing Online Help::      Where to get the additional files needed
-* Upgrading from idl.el::       Necessary configuration changes
 @end menu
 
 @node Installing IDLWAVE, Installing Online Help, Installation, Installation
@@ -2889,65 +3232,34 @@
 and can be installed from
 @uref{ftp://ftp.xemacs.org/pub/xemacs/packages/,the XEmacs ftp site}
 with the normal package management system on XEmacs 21.  These
-pre-installed versions should work out-of-the-box.  However, the files
-required for online help are not distributed with XEmacs/Emacs and have
-to be installed separately@footnote{Due to copyright reasons, the ASCII
-version of the IDL manual cannot be distributed under the GPL.}
-(@pxref{Installing Online Help}).
+pre-installed versions should work out-of-the-box.  However, the HTML
+files required for online HTML help are not distributed with
+XEmacs/Emacs and have to be installed separately@footnote{Due to
+copyright reasons, the HTML version of the IDL manual cannot be
+distributed under the GPL.}  (@pxref{Installing Online Help}).
 
 You can also download IDLWAVE and install it yourself from
 @uref{@value{IDLWAVE-HOMEPAGE}, the maintainers webpage}.  Follow the
 instructions in the INSTALL file.
 
-@node Installing Online Help, Upgrading from idl.el, Installing IDLWAVE, Installation
+@node Installing Online Help,  , Installing IDLWAVE, Installation
 @section Installing Online Help
 @cindex Installing online help
 @cindex Online Help, Installation
 
-If you want to use the online help display, two additional files (an
-ASCII version of the IDL documentation and a topics/code file) must be
-installed.  These files can also be downloaded from
-@uref{@value{IDLWAVE-HOMEPAGE}, the maintainers webpage}.  You need to
-place the files somewhere on your system and tell IDLWAVE where they are
-with
+If you want to use the online help display, an additional set of files
+(HTML versions of the IDL documentation) must be installed.  These
+files can also be downloaded from @uref{@value{IDLWAVE-HOMEPAGE}, the
+maintainers webpage}.  You need to place the files somewhere on your
+system and tell IDLWAVE where they are with
 
 @lisp
-(setq idlwave-help-directory "/path/to/help/files/")
+(setq idlwave-html-help-location "/path/to/help/dir/") ;e.g. /usr/local/etc
 @end lisp
 
-@node Upgrading from idl.el,  , Installing Online Help, Installation
-@section Upgrading from the old @b{@file{idl.el}} file
-@cindex Upgrading from old @b{@file{idl.el}}
-@cindex Renaming old variables
-@cindex Old variables, renaming
-@kindex M-@key{TAB}
-
-If you have been using the old @file{idl.el} and @file{idl-shell.el}
-files and would like to use IDLWAVE, you need to update your
-customization in @file{.emacs}.
-
-@enumerate
-@item
-Change all variable and function prefixes from @samp{idl-} to @samp{idlwave-}.
-@item
-Remove the now invalid @code{autoload} and @code{auto-mode-alist} forms
-pointing to the @file{idl.el} and @file{idl-shell.el} files.  Install
-the new autoload forms.
-@item
-If you have been using the hook function recommended in earlier versions
-to get a separate frame for the IDL shell, remove that command from your
-@code{idlwave-shell-mode-hook}.  Instead, set the variable
-@code{idlwave-shell-use-dedicated-frame} with
-@lisp
-(setq idlwave-shell-use-dedicated-frame t)
-@end lisp
-@item
-The key sequence @kbd{M-@key{TAB}} no longer inserts a TAB character.
-Like in many other Emacs modes, @kbd{M-@key{TAB}} now does
-completion.  Inserting a TAB has therefore been moved to
-@kbd{C-@key{TAB}}.  On a character based terminal you can also use
-@kbd{C-c @key{SPC}}.
-@end enumerate
+Note that the help package only changes with new versions of the IDL
+documentation, and need not be updated unless your version of IDL
+changes.
 
 @node Acknowledgements, Sources of Routine Info, Installation, Top
 @chapter Acknowledgements
@@ -2973,10 +3285,11 @@
 everything, modernized IDLWAVE with many new features, and developed the
 manual.
 
-@item
+@item 
 @uref{mailto:jdsmith@@as.arizona.edu, @b{J.D. Smith}}, the current
 maintainer, as of version 4.10, helped shape object method completion
-and most new features introduced in versions 4.x.
+and most new features introduced in versions 4.x, and added
+significant new capabilities for versions 5.x.
 @end itemize
 
 @noindent
@@ -2985,43 +3298,45 @@
 
 @itemize @minus
 @item
-Ulrik Dickow <dickow@@nbi.dk>
+Ulrik Dickow <dickow__at__nbi.dk>
 @item
-Eric E. Dors <edors@@lanl.gov>
+Eric E. Dors <edors__at__lanl.gov>
 @item
-Stein Vidar H. Haugan <s.v.h.haugan@@astro.uio.no>
+Stein Vidar H. Haugan <s.v.h.haugan__at__astro.uio.no>
 @item
-David Huenemoerder <dph@@space.mit.edu>
+David Huenemoerder <dph__at__space.mit.edu>
 @item
-Kevin Ivory <Kevin.Ivory@@linmpi.mpg.de>
+Kevin Ivory <Kevin.Ivory__at__linmpi.mpg.de>
 @item
-Dick Jackson <dick@@d-jackson.com>
+Dick Jackson <dick__at__d-jackson.com>
 @item
-Xuyong Liu <liu@@stsci.edu>
+Xuyong Liu <liu__at__stsci.edu>
 @item
-Simon Marshall <Simon.Marshall@@esrin.esa.it>
+Simon Marshall <Simon.Marshall__at__esrin.esa.it>
 @item
-Craig Markwardt <craigm@@cow.physics.wisc.edu>
+Craig Markwardt <craigm__at__cow.physics.wisc.edu>
 @item
-Laurent Mugnier <mugnier@@onera.fr>
+Laurent Mugnier <mugnier__at__onera.fr>
 @item
-Lubos Pochman <lubos@@rsinc.com>
+Lubos Pochman <lubos__at__rsinc.com>
 @item
-Bob Portmann <portmann@@al.noaa.gov>
+Bob Portmann <portmann__at__al.noaa.gov>
 @item
-Patrick M. Ryan <pat@@jaameri.gsfc.nasa.gov>
+Patrick M. Ryan <pat__at__jaameri.gsfc.nasa.gov>
 @item
-Marty Ryba <ryba@@ll.mit.edu>
+Marty Ryba <ryba__at__ll.mit.edu>
 @item
-Phil Williams <williams@@irc.chmcc.org>
+Phil Williams <williams__at__irc.chmcc.org>
 @item
-Phil Sterne <sterne@@dublin.llnl.gov>
+Phil Sterne <sterne__at__dublin.llnl.gov>
+@item
+Paul Sorenson <aardvark62__at__msn.com>
 @end itemize
 
 @noindent
 Thanks to everyone!
 
-@node Sources of Routine Info, Configuration Examples, Acknowledgements, Top
+@node Sources of Routine Info, HTML Help Browser Tips, Acknowledgements, Top
 @appendix Sources of Routine Info
 
 @cindex Sources of routine information
@@ -3033,7 +3348,7 @@
 @menu
 * Routine Definitions::         Where IDL Routines are defined.
 * Routine Information Sources::  So how does IDLWAVE know about...
-* Library Catalog::             Scanning the Libraries for Routine Info
+* Catalogs::                    
 * Load-Path Shadows::           Routines defined in several places
 * Documentation Scan::          Scanning the IDL Manuals
 @end menu
@@ -3051,14 +3366,14 @@
 several places:
 
 @enumerate
-@item
+@item 
 @emph{Builtin routines} are defined inside IDL itself.  The source
 code of such routines is not available.
 @item
 Routines which are @emph{part of the current program}, are defined in a
 file explicitly compiled by the user.  This file may or may not be
 located on the IDL search path.
-@item
+@item 
 @emph{Library routines} are defined in files located on IDL's search
 path, and will not need to be manually compiled.  When a library routine
 is called for the first time, IDL will find the source file and compile
@@ -3072,7 +3387,7 @@
 cannot provide routine info and completion for such external routines.
 @end enumerate
 
-@node Routine Information Sources, Library Catalog, Routine Definitions, Sources of Routine Info
+@node Routine Information Sources, Catalogs, Routine Definitions, Sources of Routine Info
 @appendixsec Routine Information Sources
 @cindex Routine info sources
 @cindex Builtin list of routines
@@ -3087,21 +3402,21 @@
 @enumerate
 
 @item
-It has a @emph{builtin list} with the properties of the builtin IDL
-routines.  IDLWAVE @value{VERSION} is distributed with a list of
+It has a @emph{builtin list} with information about the routines IDL
+ships with.  IDLWAVE @value{VERSION} is distributed with a list of
 @value{NSYSROUTINES} routines and @value{NSYSKEYWORDS} keywords,
 reflecting IDL version @value{IDLVERSION}.  This list has been created
 by scanning the IDL manuals and is stored in the file
-@file{idlw-rinfo.el}.  @xref{Documentation Scan}, for information on how
-to regenerate this file for new versions of IDL.
-
-@item
+@file{idlw-rinfo.el}.  @xref{Documentation Scan}, for information on
+how to regenerate this file for new versions of IDL.
+
+@item 
 It @emph{scans} all @emph{buffers} of the current Emacs session for
 routine definitions.  This is done automatically when routine
 information or completion is first requested by the user.  Each new
-buffer and each buffer which is saved after making changes is also
-scanned. The command @kbd{C-c C-i} (@code{idlwave-update-routine-info})
-can be used at any time to rescan all buffers.
+buffer and each buffer saved after making changes is also scanned. The
+command @kbd{C-c C-i} (@code{idlwave-update-routine-info}) can be used
+at any time to rescan all buffers.
 
 @item
 If you have an IDLWAVE-Shell running in the Emacs session, IDLWAVE will
@@ -3113,19 +3428,28 @@
 routine data.
 
 @item
-IDLWAVE can scan all or selected library source files and store the
-result in a file which will be automatically loaded just like
-@file{idlw-rinfo.el}. @xref{Library Catalog}, for information how to
-scan library files.
+Many popular libraries are distributed with routine information
+already scanned into @emph{library catalogs} (@pxref{Library
+Catalogs}).  These per-directory catalog files can also be built by
+the user with the supplied @file{idlwave_catalog} tool.
+
+@item
+IDLWAVE can scan selected directories of source files and store the
+result in a single @emph{user catalog} file which will be
+automatically loaded just like @file{idlw-rinfo.el}. @xref{User
+Catalog}, for information on how to scan files in this way.
 @end enumerate
 
-Loading routine and catalog information is a time consuming process.
-Depending on the system and network configuration it can take up to 30
-seconds.  In order to minimize the waiting time upon your first
-completion or routine info command in a session, IDLWAVE uses Emacs idle
-time to do the initialization in 5 steps, yielding to user input in
-between.  If this gets into your way, set the variable
-@code{idlwave-init-rinfo-when-idle-after} to 0 (zero).
+Loading routine and catalog information can be a time consuming process,
+especially over slow networks.  Depending on the system and network
+configuration it could take up to 30 seconds.  In order to minimize the
+wait time upon your first completion or routine info command in a
+session, IDLWAVE uses Emacs idle time to do the initialization in six
+steps, yielding to user input in between.  If this gets into your way,
+set the variable @code{idlwave-init-rinfo-when-idle-after} to 0 (zero).
+The more routines documented in library and user catalogs, the slower
+the loading will be, so reducing this number can help alleviate any long
+load times.
 
 @defopt idlwave-init-rinfo-when-idle-after (@code{10})
 Seconds of idle time before routine info is automatically initialized.
@@ -3144,82 +3468,199 @@
 Controls under what circumstances routine info is updated automatically.
 @end defopt
 
-@node Library Catalog, Load-Path Shadows, Routine Information Sources, Sources of Routine Info
-@appendixsec Library Catalog
-@cindex Library scan
-@cindex Library catalog
+@ifhtml
+<A NAME="CATALOGS"></A>
+@end ifhtml
+@node Catalogs, Load-Path Shadows, Routine Information Sources, Sources of Routine Info
+@appendixsec Catalogs
+@cindex Catalogs
+
+@emph{Catalogs} are files containing scanned information on individual
+routines, including arguments and keywords, calling sequence, file path,
+class and procedure vs. function type, etc.  They represent a way of
+extending the internal built-in information available for IDL system
+routines (@pxref{Routine Info}) to other source collections.
+
+Starting with version 5.0, there are two types of catalogs available
+with IDLWAVE.  The traditional @emph{user catalog} and the newer
+@emph{library catalogs}.  Although they can be used interchangeably, the
+library catalogs are more flexible, and preferred.  There are few
+occasions when a user catalog might be preferred --- read below.  Both
+types of catalogs can coexist without causing problems.
+
+To facilitate the catalog systems, IDLWAVE stores information it gathers
+from the shell about the IDL search paths, and can write this
+information out automatically, or on-demand (menu @code{Debug->Save Path
+Info}).  On systems with no shell from which to discover the path
+information (e.g. Windows), a library path must be specified in
+@code{idlwave-library-path} to allow library catalogs to be located, and
+to setup directories for user catalog scan (@pxref{User Catalog} for
+more on this variable).
+
+@defopt idlwave-auto-write-path  (@code{t})
+Write out information on the !PATH and !DIR paths from IDL automatically
+when they change and when the Shell is closed.  These paths are needed
+to locate library catalogs.
+@end defopt
+
+@defopt idlwave-library-path
+IDL library path for Windows and MacOS.  Not needed under Unix/MacOSX.
+@end defopt
+
+@defopt idlwave-system-directory
+The IDL system directory for Windows and MacOS.  Not needed under
+Unix/MacOSX (obtained from the Shell).
+@end defopt
+
+@defopt idlwave-config-directory (@file{~/.idlwave})
+Default path where IDLWAVE saves configuration information and any
+user catalog.
+@end defopt
+
+@menu
+* Library Catalogs::            
+* User Catalog::                
+@end menu
+
+@ifhtml
+<A NAME="LIBRARY_CATALOGS"></A>
+@end ifhtml
+@node Library Catalogs, User Catalog, Catalogs, Catalogs
+@appendixsubsec Library Catalogs
+@cindex @file{.idlwave_catalog}
+@cindex Library catalogs
+@cindex @code{idlwave_catalog}
+
+Library catalogs are files named @file{.idlwave_catalog} stored in
+directories containing @code{.pro} routine files.  They are discovered
+on the IDL search path and loaded automatically when routine information
+is read.  Each catalog file documents the routines found in that
+directory --- one catalog per directory.  Every catalog has a library
+name associated with it (e.g. @emph{AstroLib}).  This name will be shown
+briefly when the catalog is found, and in the routine info of routines
+it documents.
+
+Many popular libraries of routines are shipped with IDLWAVE catalog
+files by default, and so will be automatically discovered.  Library
+catalogs are scanned externally to Emacs using a tool provided with
+IDLWAVE.  Each catalog can be re-scanned independently of any other.
+Catalogs can easily be made available system-wide with a common source
+repository, providing uniform routine information, and lifting the
+burden of scanning from the user (who may not even know they're using a
+scanned catalog).  Since all catalogs are independent, they can be
+re-scanned automatically to gather updates, e.g. in a @file{cron} job.
+Scanning is much faster than with the built-in user catalog method.  One
+minor disadvantage: the entire IDL search path is scanned for catalog
+files every time IDLWAVE starts up, which might be slow over a network.
+
+A Perl tool to create library catalogs is distributed with IDLWAVE:
+@code{idlwave_catalog}.  It can be called quite simply:
+@example
+idlwave_catalog MyLib
+@end example
+
+@noindent This would scan all directories recursively beneath the current and
+populate them with @file{.idlwave_catalog} files, tagging the routines
+found with the name library ``MyLib''.  The full usage information:
+
+@example
+Usage: idlwave_catalog  [-l] [-v] [-d] [-s] [-f] [-h] libname
+       libname - Unique name of the catalog (4 or more alphanumeric
+                 characters).
+            -l - Scan local directory only, otherwise recursively
+                 catalog all directories at or beneath this one.
+            -v - Print verbose information.
+            -d - Instead of scanning, delete all .idlwave_catalog files
+                 here or below.
+            -s - Be silent.
+            -f - Force overwriting any catalogs found with a different
+                 library name.
+            -h - Print this usage.
+@end example
+
+To re-load the library catalogs on the IDL path, force a system routine
+info update using a single prefix to @code{idlwave-update-routine-info}:
+@kbd{C-u C-c C-i}.
+
+@defopt idlwave-use-library-catalogs  (@code{t})
+Whether to search for and load library catalogs.  Only disable if
+performance is a problem and the catalogs are not needed.
+@end defopt
+
+@node User Catalog,  , Library Catalogs, Catalogs
+@appendixsubsec User Catalog
+@cindex User catalog
 @cindex IDL library routine info
 @cindex Windows
 @cindex MacOS
 @cindex IDL variable @code{!DIR}
 @cindex @code{!DIR}, IDL variable
 
-
-IDLWAVE can extract routine information from library modules and store
-that information in a file.  To do this, the variable
-@code{idlwave-libinfo-file} needs to contain the path to a file in an
-existing directory (the default is @code{"~/.idlcat.el"}).  Since the
-file will contain lisp code, its name should end in @file{.el}.  Under
-Windows and MacOS, you also need to specify the search path for IDL
-library files in the variable @code{idlwave-library-path}, and the
-location of the IDL directory (the value of the @code{!DIR} system
-variable) in the variable @code{idlwave-system-directory}, like
-this@footnote{The initial @samp{+} leads to recursive expansion of the
-path, just like in IDL}:
+The user catalog is the old routine catalog system.  It is produced
+within Emacs, and stored in a single file in the user's home directory
+(@file{.idlwave/idlusercat.el} by default).  Although library catalogs
+are more flexible, there may be reasons to prefer a user catalog
+instead, including:
+
+@itemize @bullet
+@item The scan is internal to Emacs, so you don't need a working Perl
+installation, as you do for library catalogs.
+@item Can be used to scan directories for which the user has no write 
+privileges.
+@item Easy widget-based path selection.
+@end itemize
+
+However, no routine info is available in the user catalog by default;
+the user must actively complete a scan.  In addition, this type of
+catalog is all or nothing: if a single routine changes, the entire
+catalog must be rescanned to update it.  Creating the user catalog is
+also much slower than scanning library catalogs.
+
+You can scan any of the directories on the currently known path.  Under
+Windows and MacOS (not OSX), you need to specify the IDL search path in
+the variable @code{idlwave-library-path}, and the location of the IDL
+directory (the value of the @code{!DIR} system variable) in the variable
+@code{idlwave-system-directory}, like this@footnote{The initial @samp{+}
+leads to recursive expansion of the path, just like in IDL}:
 
 @lisp
 (setq idlwave-library-path
-        '("+c:/RSI/IDL54/lib/" "+c:/user/me/idllibs" ))
-(setq idlwave-system-directory "c:/RSI/IDL54/")
+        '("+c:/RSI/IDL56/lib/" "+c:/user/me/idllibs"))
+(setq idlwave-system-directory "c:/RSI/IDL56/")
 @end lisp
 
-@noindent Under GNU and UNIX, these values will be automatically inferred from
-an IDLWAVE shell.
-
-The command @kbd{M-x idlwave-create-libinfo-file} can then be used to
-scan library files.  It brings up a widget in which you can select some
-or all directories on the search path.  If you only want to have routine
-and completion info of some libraries, it is sufficient to scan those
-directories.  However, if you want IDLWAVE to detect possible name
-conflicts with routines defined in other libraries, the whole pass
-should be scanned.
+@noindent Under GNU and UNIX, these values will be automatically gathered from
+the IDLWAVE shell.
+
+The command @kbd{M-x idlwave-create-user-catalog-file} (or the menu item
+@samp{IDLWAVE->Routine Info->Select Catalog Directories} can then be
+used to create a user catalog.  It brings up a widget in which you can
+select some or all directories on the search path.  Directories which
+already contain a library catalog are marked with @samp{[LIB]}, and need
+not be scanned (although there is no harm if you do so, other than the
+additional memory used for the duplication).
 
 After selecting directories, click on the @w{@samp{[Scan & Save]}}
 button in the widget to scan all files in the selected directories and
-write the resulting routine information into the file
-@code{idlwave-libinfo-file}.  In order to update the library information
-from the same directories, call the command
+write out the resulting routine information.  In order to update the
+library information using the directory selection, call the command
 @code{idlwave-update-routine-info} with a double prefix argument:
 @w{@kbd{C-u C-u C-c C-i}}.  This will rescan files in the previously
-selected directories, write an updated version of the libinfo file and
-rebuild IDLWAVE's internal lists.  If you give three prefix arguments
-@w{@kbd{C-u C-u C-u C-c C-i}}, updating will be done with a background
-job@footnote{Unix systems only, I think.}.  You can continue to work,
-and the library catalog will be re-read when it is ready.
-
-A note of caution:  Depending on your local installation, the IDL
-library can be very large.  Parsing it for routine information will take
-time and loading this information into Emacs can require a
-significant amount of memory.  However, having this information
-available will be a great help.
-
-@defopt idlwave-libinfo-file
-File for routine information of the IDL library.
-@end defopt
-
-@defopt idlwave-library-path
-IDL library path for Windows and MacOS.  Not needed under Unix.
-@end defopt
-
-@defopt idlwave-system-directory
-The IDL system directory for Windows and MacOS.  Not needed under Unix.
-@end defopt
+selected directories, write an updated version of the user catalog file
+and rebuild IDLWAVE's internal lists.  If you give three prefix
+arguments @w{@kbd{C-u C-u C-u C-c C-i}}, updating will be done with a
+background job@footnote{Unix systems only, I think.}.  You can continue
+to work, and the library catalog will be re-read when it is ready.  If
+you find you need to update the user catalog often, you should consider
+building a library catalog for your routines instead (@pxref{Library
+Catalogs}).
 
 @defopt idlwave-special-lib-alist
-Alist of regular expressions matching special library directories.
+Alist of regular expressions matching special library directories for
+labeling in routine-info display.
 @end defopt
 
-@node Load-Path Shadows, Documentation Scan, Library Catalog, Sources of Routine Info
+@node Load-Path Shadows, Documentation Scan, Catalogs, Sources of Routine Info
 @appendixsec Load-Path Shadows
 @cindex Load-path shadows
 @cindex Shadows, load-path
@@ -3229,18 +3670,19 @@
 @cindex Application, testing for shadowing
 @cindex Buffer, testing for shadowing
 
-IDLWAVE can compile a list of routines which are defined in several
-different files.  Since one definition will hide (shadow) the others
+IDLWAVE can compile a list of routines which are (re-)defined in more
+than one file.  Since one definition will hide (shadow) the others
 depending on which file is compiled first, such multiple definitions are
 called "load-path shadows".  IDLWAVE has several routines to scan for
 load path shadows.  The output is placed into the special buffer
 @file{*Shadows*}.  The format of the output is identical to the source
 section of the routine info buffer (@pxref{Routine Info}).  The
-different definitions of a routine are listed in the sequence of
-@emph{likelihood of use}.  So the first entry will be most likely the
-one you'll get if an unsuspecting command uses that routine.  Before
-listing shadows, you should make sure that routine info is up-to-date by
-pressing @kbd{C-c C-i}.  Here are the different routines:
+different definitions of a routine are ordered by @emph{likelihood of
+use}.  So the first entry will be most likely the one you'll get if an
+unsuspecting command uses that routine.  Before listing shadows, you
+should make sure that routine info is up-to-date by pressing @kbd{C-c
+C-i}.  Here are the different routines (also available in the Menu
+@samp{IDLWAVE->Routine Info}):
 
 @table @asis
 @item @kbd{M-x idlwave-list-buffer-load-path-shadows}
@@ -3257,9 +3699,9 @@
 This command checks all routines accessible to IDLWAVE for conflicts.
 @end table
 
-For these commands to work properly you should have scanned the entire
-load path, not just selected directories.  Also, IDLWAVE should be able
-to distinguish between the system library files (normally installed in
+For these commands to work fully you need to scan the entire load path
+in either a user or library catalog.  Also, IDLWAVE should be able to
+distinguish between the system library files (normally installed in
 @file{/usr/local/rsi/idl/lib}) and any site specific or user specific
 files.  Therefore, such local files should not be installed inside the
 @file{lib} directory of the IDL directory.  This is also advisable for
@@ -3279,37 +3721,108 @@
 on the load path is routine info display (@pxref{Routine Info}).
 
 @node Documentation Scan,  , Load-Path Shadows, Sources of Routine Info
-@appendixsec Documentation Scan
-@cindex @file{get_rinfo}
+@appendixsec Documentation Scan 
+@cindex @file{get_html_rinfo}
 @cindex @file{idlw-rinfo.el}
-@cindex @file{idlw-help.txt}
-@cindex @file{idlw-help.el}
 @cindex Scanning the documentation
 @cindex Perl program, to create @file{idlw-rinfo.el}
 
-IDLWAVE derives it knowledge about system routines from the IDL
+IDLWAVE derives its knowledge about system routines from the IDL
 manuals.  The file @file{idlw-rinfo.el} contains the routine information
-for the IDL system routines.  The Online Help feature of IDLWAVE
-requires ASCII versions of some IDL manuals to be available in a
-specific format (@file{idlw-help.txt}), along with an Emacs-Lisp file
-@file{idlw-help.el} with supporting code and pointers to the ASCII file.
-
-All 3 files can be derived from the IDL documentation.  If you are
-lucky, the maintainer of IDLWAVE will always have access to the newest
-version of IDL and provide updates.  The IDLWAVE distribution also
-contains the Perl program @file{get_rinfo} which constructs these files
-by scanning selected files from the IDL documentation.  Instructions on
-how to use @file{get_rinfo} are in the program itself.
-
-One particularly frustrating situation occurs when a new IDL version is
-released without the associated documentation updates.  Instead, a
-@emph{What's New} file containing new and updated documentation is
-shipped alongside the previous version's reference material.  The
-@file{get_rinfo} script can merge this new information into the standard
-help text and routine information, as long as it is pre-formatted in a
-simple way.  See @file{get_rinfo} for more information.
-
-@node Configuration Examples, Windows and MacOS, Sources of Routine Info, Top
+for the IDL system routines, and links to relevant sections of the HTML
+documentation.  The Online Help feature of IDLWAVE requires HTML
+versions of the IDL manuals to be available; the HTML documentation is
+not distributed with IDLWAVE by default, but must be downloaded
+separately from the @uref{@value{IDLWAVE-HOMEPAGE}, the maintainers
+webpage}.
+
+The HTML files and related images can be produced from the
+@file{idl.chm} HTMLHelp file distributed with IDL using the free
+Microsoft HTML Help Workshop.  If you are lucky, the maintainer of
+IDLWAVE will always have access to the newest version of IDL and
+provide updates.  The IDLWAVE distribution also contains the Perl
+program @file{get_html_rinfo} which constructs the
+@file{idlw-rinfo.el} file by scanning the HTML documents produced from
+the IDL documentation.  Instructions on how to use
+@file{get_html_rinfo} are in the program itself.
+
+@node HTML Help Browser Tips, Configuration Examples, Sources of Routine Info, Top
+@appendix HTML Help Browser Tips
+@cindex Browser Tips
+
+There are a wide variety of possible browsers to use for displaying
+the online HTML help available with IDLWAVE (starting with version
+5.0).  Since IDLWAVE runs on a many different system types, a single
+browser configuration is not possible, but choices abound.
+
+On many systems, the default browser configured in
+@code{browse-url-browser-function}, and hence inherited by default by
+@code{idlwave-help-browser-function}, is Netscape.  Unfortunately, the
+HTML manuals decompiled from the original RSI source contain
+formatting structures which Netscape 4.x does not handle well, though
+they are still readable.  A much better choice is Mozilla, or one of
+the Mozilla-derived browsers such as
+@uref{http://galeon.sourceforge.net/,Galeon} (Linux),
+@uref{http://www.mozilla.org/projects/camino/,Camino} (MacOSX), or
+@uref{http://www.mozilla.org/projects/firebird/,Firebird} (all
+platforms).  Newer versions of Emacs provide a browser-function choice
+@code{browse-url-gnome-moz} which uses the Gnome-configured browser.
+
+Note that the HTML files decompiled from RSI Microsoft Help sources
+contain specific references to the @samp{Symbol} font, which by default
+is not permitted in normal encodings (it's technically illegal).  Though
+it only impacts a few symbols, you can trick Mozilla-based browsers into
+recognizing @samp{Symbol} by following the directions
+@uref{http://hutchinson.belmont.ma.us/tth/Xfonts.html, here}.  With this
+fix in place, HTML help pages look almost identical to their PDF
+equivalents (yet can be bookmarked, browsed as history, searched, etc.).
+
+@noindent Individual platform recommendations:
+
+@itemize @bullet
+@item Windows: The native Microsoft HTMLHelp browser is preferred,
+with even better results using the free
+@uref{http://www.keyworks.net/keyhh.htm,@code{KEYHH}} program to
+permit IDL help to be targetted to a single window.  To use HTMLHelp,
+specify @code{idlwave-help-use-hh} as @code{'hh} or @code{'keyhh}.
+One bonus: since IDL is shipped with the @file{idl.chm} help file, you
+don't need to download the HTML help package.  @xref{Help with HTML
+Documentation}.
+@item Unix/MacOSX: The @uref{http://www.w3m.org,@code{w3m}} browser
+and its associated
+@uref{http://emacs-w3m.namazu.org/,@code{emacs-w3m}} emacs mode
+provide in-buffer browsing with image display, and excellent speed and
+formatting.  Both the Emacs mode and the browser itself must be
+downloaded separately.  To use this browser, include
+
+@lisp
+(setq idlwave-help-browser-function 'w3m-browse-url)
+@end lisp
+
+in your @file{.emacs}.  Setting a few other nice @code{w3m} options
+cuts down on screen clutter:
+
+@lisp
+(setq w3m-use-tab nil
+      w3m-use-header-line nil
+      w3m-use-toolbar nil)
+@end lisp
+
+If you use a dedicated frame for help, you might want to add the
+following, to get consistent behavior with the @kbd{q} key:
+
+@lisp
+;; Close my help window when w3m closes.
+(defadvice w3m-close-window (after idlwave-close activate)
+  (if (boundp 'idlwave-help-frame)
+      (idlwave-help-quit)))
+@end lisp
+
+Note that you can open the file in an external browser from within
+@code{w3m} using @kbd{M}.
+@end itemize
+
+@node Configuration Examples, Windows and MacOS, HTML Help Browser Tips, Top
 @appendix Configuration Examples
 @cindex Configuration examples
 @cindex Example configuration
@@ -3370,7 +3883,7 @@
 (setq idlwave-main-block-indent 3)
 (setq idlwave-end-offset -3)
 (setq idlwave-continuation-indent 1)
-(setq idlwave-begin-line-comment "^;[^;]")  ; Leave ";" but not ";;"
+(setq idlwave-begin-line-comment "^;[^;]")  ; Leave ";" but not ";;" 
                                             ; anchored at start of line.
 (setq idlwave-surround-by-blank t)      ; Turn on padding ops =,<,>
 (setq idlwave-pad-keyword nil)          ; Remove spaces for keyword '='
@@ -3388,6 +3901,18 @@
                             ("SETPROPERTY" .t)
                             ("GETPROPERTY" .t)))
 
+;; Using w3m for help (must install w3m and emacs-w3m)
+(autoload 'w3m-browse-url "w3m" "Interface for w3m on Emacs." t)
+(setq idlwave-help-browser-function 'w3m-browse-url
+      w3m-use-tab nil ; no tabs, location line, or toolbar
+      w3m-use-header-line nil
+      w3m-use-toolbar nil)
+
+;; Close my help window or frame when w3m closes with `q'
+(defadvice w3m-close-window (after idlwave-close activate)
+  (if (boundp 'idlwave-help-frame)
+      (idlwave-help-quit)))
+
 ;; Some setting can only be done from a mode hook.  Here is an example:
 (add-hook 'idlwave-mode-hook
   (lambda ()
@@ -3395,6 +3920,7 @@
     ;; Run other functions here
     (font-lock-mode 1)                   ; Turn on font-lock mode
     (idlwave-auto-fill-mode 0)           ; Turn off auto filling
+    (setq idlwave-help-browser-function 'browse-url-w3)
 
     ;; Pad with 1 space (if -n is used then make the
     ;; padding a minimum of n spaces.)  The defaults use -1
@@ -3424,10 +3950,10 @@
     ;; (local-set-key "\C-j" 'idlwave-newline) ; My preference.
 
     ;; Some personal abbreviations
-    (define-abbrev idlwave-mode-abbrev-table
+    (define-abbrev idlwave-mode-abbrev-table  
       (concat idlwave-abbrev-start-char "wb") "widget_base()"
       (idlwave-keyword-abbrev 1))
-    (define-abbrev idlwave-mode-abbrev-table
+    (define-abbrev idlwave-mode-abbrev-table  
       (concat idlwave-abbrev-start-char "on") "obj_new()"
       (idlwave-keyword-abbrev 1))
     ))
@@ -3445,12 +3971,12 @@
 (add-hook 'idlwave-shell-mode-hook
           (lambda ()
             ;; Set up some custom key and mouse examine commands
-            (idlwave-shell-define-key-both [s-down-mouse-2]
-                                 (idlwave-shell-mouse-examine
+            (idlwave-shell-define-key-both [s-down-mouse-2] 
+                                 (idlwave-shell-mouse-examine 
                                   "print, size(___,/DIMENSIONS)"))
             (idlwave-shell-define-key-both [f9] (idlwave-shell-examine
                                        "print, size(___,/DIMENSIONS)"))
-            (idlwave-shell-define-key-both [f10] (idlwave-shell-examine
+            (idlwave-shell-define-key-both [f10] (idlwave-shell-examine 
                                         "print,size(___,/TNAME)"))
             (idlwave-shell-define-key-both [f11] (idlwave-shell-examine
                                         "help,___,/STRUCTURE"))))
@@ -3459,27 +3985,28 @@
 @ifhtml
 <A NAME="WIN_MAC"></A>
 @end ifhtml
-@node Windows and MacOS, Index, Configuration Examples, Top
+@node Windows and MacOS, Troubleshooting, Configuration Examples, Top
 @appendix Windows and MacOS
 @cindex Windows
 @cindex MacOS
-
-IDLWAVE was developed on a UNIX system.  However, due to the portability
-of Emacs, much of IDLWAVE does also work under different operating
-systems like Windows (with NTEmacs or NTXEmacs) or MacOS.
-
-The only problem really is that RSI does not provide a command-line
-version of IDL for Windows or MacOS with which IDLWAVE can
+@cindex MacOSX
+
+IDLWAVE was developed on a UNIX system.  However, thanks to the
+portability of Emacs, much of IDLWAVE does also work under different
+operating systems like Windows (with NTEmacs or NTXEmacs) or MacOS.
+
+The only real problem is that RSI does not provide a command-line
+version of IDL for Windows or MacOS(<=9) with which IDLWAVE can
 interact@footnote{Call your RSI representative and complain --- it
-should be trivial for them to provide one.  And if enough people ask
-for it, maybe they will.  The upcoming IDL for Mac OSX is slated to
-have a command-line version.}.  Therefore the IDLWAVE Shell does not
-work and you have to rely on IDLDE to run and debug your programs.
-However, editing IDL source files with Emacs/IDLWAVE works with all
-bells and whistles, including routine info, completion and fast online
-help.  Only a small amount of additional information must be specified
-in your .emacs file: the path names which, on a UNIX system, are
-automatically gathered by talking to the IDL program.
+should be trivial for them to provide one.  And if enough people ask for
+it, maybe they will.  The new MacOSX version of IDL @emph{does} have a
+shell and works well with IDLWAVE.}.  As a result, the IDLWAVE Shell
+does not work and you have to rely on IDLDE to run and debug your
+programs.  However, editing IDL source files with Emacs/IDLWAVE works
+with all bells and whistles, including routine info, completion and fast
+online help.  Only a small amount of additional information must be
+specified in your @file{.emacs} file: the path names which, on a UNIX
+system, are automatically gathered by talking to the IDL program.
 
 Here is an example of the additional configuration needed for a Windows
 system.  I am assuming that IDLWAVE has been installed in
@@ -3487,7 +4014,7 @@
 @w{@samp{C:\RSI\IDL55}}.
 
 @lisp
-;; location of the lisp files (needed if IDLWAVE is not part of
+;; location of the lisp files (needed if IDLWAVE is not part of 
 ;; the X/Emacs installation)
 (setq load-path (cons "c:/program files/IDLWAVE" load-path))
 
@@ -3499,32 +4026,213 @@
 ;; location of the IDL system directory (try "print,!DIR")
 (setq idlwave-system-directory "c:/RSI/IDL55/")
 
-;; location of the IDLWAVE help files idlw-help.el and idlw-help.txt.
-(setq idlwave-help-directory "c:/IDLWAVE")
+;; specify using the HTMLHelp documentation for online help, with the
+;;  KEYHH helper routine (Windows only)
+(setq idlwave-use-hh 'keyhh)
 
 ;; file in which to store the user catalog info
-(setq idlwave-libinfo-file "c:/IDLWAVE/idlcat.el")
+(setq idlwave-user-catalog-file "c:/IDLWAVE/idlcat.el")
 @end lisp
 
 @noindent Furthermore, Windows sometimes tries to outsmart you --- make
 sure you check the following things:
 
 @itemize @bullet
-@item When you download the IDLWAVE distribution, make sure you save the
-files under the names @file{idlwave.tar.gz} and
-@file{idlwave-help-tar.gz}.
-@item Be sure that your software for untarring/ungzipping is @emph{NOT}
-doing smart CR/LF conversion (WinZip users will find this in
-Options:Configuration:Miscellaneous, change the setting, then re-open
-the archive).  This adds one byte per line, throwing off the
-byte-counts for the help file lookups and defeating fast online help lookup.
+@item When you download the IDLWAVE distribution, make sure you save the 
+file under the names @file{idlwave.tar.gz}.
 @item M-TAB switches among running programs --- use Esc-TAB
 instead.
 @item Other issues as yet unnamed...
 @end itemize
 
-
-@node Index,  , Windows and MacOS, Top
+Windows users who'd like to make use of IDLWAVE's context-aware HTML
+help can skip the browser and use the HTMLHelp functionality directly.
+@xref{Help with HTML Documentation}.
+
+@ifhtml
+<A NAME="TROUBLE"></A>
+@end ifhtml
+@node Troubleshooting, Index, Windows and MacOS, Top
+@appendix Troubleshooting
+@cindex Troubleshooting
+
+Although IDLWAVE usually installs and works without difficulty, a few
+common problems and their solutions are documented below.
+
+@enumerate
+
+@item @strong{Whenever an IDL error occurs or a breakpoint is hit, I get
+errors or strange behavior when I try to type anything into some of my
+IDLWAVE buffers.}
+
+This is a @emph{feature}, not an error.  You're in @emph{Electric
+Debug Mode} (@pxref{Electric Debug Mode}).  You should see
+@code{*Debugging*} in the mode-line.  The buffer is read-only and all
+debugging and examination commands are available as single keystrokes;
+@kbd{C-?} lists these shortcuts.  Use @kbd{q} to quit the mode, and
+customize the variable @code{idlwave-shell-automatic-electric-debug}
+if you prefer not to enter electric debug on breakpoints@dots{} but
+you really should try it before you disable it!  You can also
+customize this variable to enter debug mode when errors are
+encountered too.  
+
+@item @strong{I get errors like @samp{Searching for program: no such
+file or directory, idl} when attempting to start the IDL shell.}
+
+IDLWAVE needs to know where IDL is in order to run it as a process.
+By default, it attempts to invoke it simply as @samp{idl}, which
+presumes such an executable is on your search path.  You need to
+ensure @samp{idl} is on your @samp{$PATH}, or specify the full
+pathname to the idl program with the variable
+@code{idlwave-shell-explicit-file-name}.  Note that you may need to
+set your shell search path in two places when running Emacs as an Aqua
+application with MacOSX; see the next topic.
+
+@item @strong{IDLWAVE is disregarding my @samp{IDL_PATH} which I set
+under MacOSX}
+
+If you run Emacs directly as an Aqua application, rather than from the
+console shell, the environment is set not from your usual shell
+configuration files (e.g. @file{.cshrc}), but from the file
+@file{~/.MacOSX/environment.plist}.  Either include your path settings
+there, or start Emacs and IDLWAVE from the shell.
+
+@item @strong{I get errors like @samp{Symbol's function is void:
+overlayp} when trying to start the shell in XEmacs}
+
+You don't have the @samp{fsf-compat} package installed, which IDLWAVE
+needs to run under XEmacs.  Install it and, if necessary, insert
+@code{(require 'overlay)} in your @file{.emacs}.
+
+@item @strong{I'm getting errors like @samp{Symbol's value as variable is void:
+cl-builtin-gethash} on completion or routine info.}
+
+This error arises if you upgraded Emacs from 20.x to 21.x without
+re-installing IDLWAVE.  Old Emacs and new Emacs are not byte-compatible
+in compiled lisp files.  Presumably, you kept the original .elc files in
+place, and this is the source of the error.  If you recompile (or just
+"make; make install") from source, it should resolve this problem.
+Another option is to recompile the @file{idlw*.el} files by hand using
+@kbd{M-x byte-compile-file}.  Why not take the opportunity to grab the
+latest IDLWAVE version at @uref{@value{IDLWAVE-HOMEPAGE}, the
+maintainers webpage}
+
+@item @strong{@kbd{M-@key{TAB}} doesn't complete words, it switches
+windows on my desktop.}
+
+Your system is trapping @kbd{M-@key{TAB}} and using it for its own
+nefarious purposes: Emacs never sees the keystrokes.  On many Unix
+systems, you can reconfigure your window manager to use another key
+sequence for switching among windows.  Another option is to use the
+equivalent sequence @kbd{@key{ESC}-@key{TAB}}.
+
+@item @strong{When stopping at breakpoints or errors, IDLWAVE does not
+seem to highlight the relevant line in the source.}
+
+IDLWAVE scans for error and halt messages and highlights the stop
+location in the correct file.  However, if you've changed the system
+variable @samp{!ERROR_STATE.MSG_PREFIX}, it is unable to parse these
+message correctly.  Don't do that.
+
+@item @strong{IDLWAVE doesn't work correctly when using ENVI.}
+
+Though IDLWAVE was not written with ENVI in mind, it works just fine
+with it, as long as you update the prompt it's looking for (@samp{IDL>
+} by default).  You can do this with the variable
+@code{idlwave-shell-prompt-pattern} (@pxref{Starting the Shell}), e.g.,
+in your @file{.emacs}:
+
+@lisp
+(setq idlwave-shell-prompt-pattern "^\\(ENVI\\|IDL\\)> ")
+@end lisp
+
+@item @strong{Attempts to set breakpoints fail: no breakpoint is
+indicated in the IDLWAVE buffer.}
+
+IDL changed its breakpoint reporting format starting with IDLv5.5.  The
+first version of IDLWAVE to support the new format is IDLWAVE v4.10.  If
+you have an older version and are using IDL >v5.5, you need to upgrade,
+and/or make sure your recent version of IDLWAVE is being found on the
+Emacs load-path (see the next entry).  You can list the version being
+used with @kbd{C-h v idlwave-mode-version @key{RET}}.
+
+@item @strong{I installed a new version of IDLWAVE, but the old
+version is still being used} or @strong{IDLWAVE works, but when I
+tried to install the optional modules @file{idlw-roprompt.el} or
+@file{idlw-complete-structtag}, I get errors like @samp{Cannot open
+load file}}.
+
+The problem is that your Emacs is not finding the version of IDLWAVE you
+installed.  Many Emacsen come with an older bundled copy of IDLWAVE
+(e.g. v4.7 for Emacs 21.x), which is likely what's being used instead.
+You need to make sure your Emacs @emph{load-path} contains the directory
+where IDLWAVE is installed (@file{/usr/local/share/emacs/site-lisp}, by
+default), @emph{before} Emacs' default search directories.  You can
+accomplish this by putting the following in your @file{.emacs}:
+
+@lisp
+(setq load-path (cons "/usr/local/share/emacs/site-lisp" load-path))
+@end lisp
+
+@noindent You can check on your load-path value using @kbd{C-h v
+load-path @key{RET}}.
+
+@item @strong{IDLWAVE is screwing up the formatting of my @file{.idl} files.}
+
+Actually, this isn't IDLWAVE at all, but @samp{idl-mode}, an unrelated
+programming mode for CORBA's Interface Definition Language (you should
+see @samp{(IDL)}, not @samp{(IDLWAVE)} in the mode-line).  One
+solution: don't name your file @file{.idl}, but rather @file{.pro}.
+Another solution: make sure @file{.idl} files load IDLWAVE instead of
+@samp{idl-mode} by adding the following to your @file{.emacs}:
+
+@lisp
+(setcdr (rassoc 'idl-mode auto-mode-alist) 'idlwave-mode)
+@end lisp
+
+@item @strong{The routine info for my local routines is out of date!}
+
+IDLWAVE collects routine info from various locations (@pxref{Routine
+Information Sources}).  Routines in files visited in a buffer or
+compiled in the shell should be up to date.  For other routines, the
+information is only as current as the most recent scan.  If you have a
+rapidly changing set of routines, and you'd like the latest routine
+information to be available for it, one powerful technique makes use of
+the library catalog tool, @samp{idlwave_catalog}.  Simply add a line to
+your @samp{cron} file (@samp{crontab -e} will let you edit this on some
+systems), like this:
+
+@example
+45 3 * * 1-5 (cd /path/to/myidllib; /path/to/idlwave_catalog MyLib)
+@end example
+
+@noindent where @samp{MyLib} is the name of your library.  This will
+rescan all @file{.pro} files at or below @file{/path/to/myidllib} every
+week night at 3:45am.  You can even scan site-wide libraries with this
+method, and the most recent information will be available to all users.
+
+@item @strong{All the Greek-font characters in the HTML help are
+displayed as Latin characters!}
+
+Unfortunately, the HTMLHelp files RSI provides attempt to switch to
+@samp{Symbol} font to display Greek characters, which is not really an
+permitted method for doing this in HTML.  There is a "workaround" for
+many browsers: @xref{HTML Help Browser Tips}.
+
+@item @strong{In the shell, my long commands are truncated at 256 characters!}
+
+This actually happens when running IDL in an XTerm as well.  There are
+a couple of work arounds: @code{define_key,/control,'^d'} (e.g. in
+your @file{$IDL_STARTUP} file) will disable the @samp{EOF} character
+and give you a 512 character limit.  You won't be able to use
+@key{C-d} to quit the shell, however.  Another possibility is
+@code{!EDIT_INPUT=0}, which gives you an @emph{infinite} limit (OK, a
+memory-bounded limit), but disables the processing of background
+widget events (those with @code{/NO_BLOCK} passed to @code{XManager}).
+
+@end enumerate
+
+@node Index,  , Troubleshooting, Top
 @unnumbered Index
 @printindex cp
 
--- a/man/text.texi	Sat Nov 13 18:34:40 2004 +0000
+++ b/man/text.texi	Mon Nov 22 11:06:39 2004 +0000
@@ -619,12 +619,13 @@
 
   When a fill prefix is in effect, the fill commands remove the fill
 prefix from each line before filling and insert it on each line after
-filling.  Auto Fill mode also inserts the fill prefix automatically when
-it makes a new line.  The @kbd{C-o} command inserts the fill prefix on
-new lines it creates, when you use it at the beginning of a line
-(@pxref{Blank Lines}).  Conversely, the command @kbd{M-^} deletes the
-prefix (if it occurs) after the newline that it deletes
-(@pxref{Indentation}).
+filling.  (The beginning of the first line is left unchanged, since
+often that is intentionally different.)  Auto Fill mode also inserts
+the fill prefix automatically when it makes a new line.  The @kbd{C-o}
+command inserts the fill prefix on new lines it creates, when you use
+it at the beginning of a line (@pxref{Blank Lines}).  Conversely, the
+command @kbd{M-^} deletes the prefix (if it occurs) after the newline
+that it deletes (@pxref{Indentation}).
 
   For example, if @code{fill-column} is 40 and you set the fill prefix
 to @samp{;; }, then @kbd{M-q} in the following text
--- a/src/ChangeLog	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/ChangeLog	Mon Nov 22 11:06:39 2004 +0000
@@ -1,3 +1,226 @@
+2004-11-21  Kim F. Storm  <storm@cua.dk>
+
+	* xdisp.c (erase_phys_cursor): Clear hollow cursor inside TEXT_AREA.
+
+	* xterm.c (x_clip_to_row): Add area arg.  Callers changed.
+	(x_draw_hollow_cursor, x_draw_bar_cursor): Clip to TEXT_AREA.
+
+	* w32term.c (w32_clip_to_row): Add area arg.  Callers changed.
+	(x_draw_hollow_cursor, x_draw_bar_cursor): Clip to TEXT_AREA.
+
+	* macterm.c (x_clip_to_row): Add area arg.  Callers changed.
+	(x_draw_hollow_cursor, x_draw_bar_cursor): Clip to TEXT_AREA.
+
+	* xdisp.c (move_it_in_display_line_to, display_line): Restore
+	saved_face_id if overflow-newline-into-fringe is enabled and line
+	is continued before or in middle of element from display vector.
+
+	* indent.c (Fvertical_motion): Fix last change.  Use another
+	method to detect if iterator moved too far ahead after reseat.
+
+	* xdisp.c (IT_EXPAND_MATRIX_WIDTH): New macro.  Do not
+	expand matrix width for overflow in zero-width area.
+	(append_glyph, append_composite_glyph, produce_image_glyph)
+	(append_stretch_glyph): Use it to avoid loop in redisplay.
+	(note_mode_line_or_margin_highlight): Don't let help-echo from
+	string override help-echo from image map.
+
+2004-11-20  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* fns.c (Fyes_or_no_p): Call Fread_from_minibuffer with extra
+	argument.
+	* callint.c (Fcall_interactively): Ditto.
+
+2004-11-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* minibuf.c (Fminibuffer_complete_and_exit):
+	Fixup the case of the completed value, for case-indep completion.
+
+2004-11-20  Richard M. Stallman  <rms@gnu.org>
+
+	* lisp.h (Fread_from_minibuffer): Add arg in decl.
+
+	* minibuf.c (read_minibuf): New arg KEEP_ALL.  Callers changed.
+	(Fread_from_minibuffer): New arg KEEP_ALL.  Callers changed.
+
+	* search.c (Vsearch_spaces_regexp):
+	Renamed from Vsearch_whitespace_regexp.  All uses changed.
+
+2004-11-20  Thien-Thi Nguyen  <ttn@gnu.org>
+
+	* eval.c (init_eval_once): Increase `max_specpdl_size' to 650.
+
+2004-11-19  Richard M. Stallman  <rms@gnu.org>
+
+	* search.c (Vsearch_whitespace_regexp): New variable.
+	(syms_of_search): Defvar it.
+	(compile_pattern_1): Call re_set_whitespace_regexp with it.
+	(search_buffer): No regexp is trivial if Vsearch_whitespace_regexp
+	is non-nil.
+	(struct regexp_cache): New element whitespace_regexp.
+	(syms_of_search): Initialize whitespace_regexp elements.
+	(compile_pattern): Compare whitespace_regexp elements.
+	(compile_pattern_1): Set whitespace_regexp elements.
+
+	* regex.c (regex_compile): Substitute whitespace_regexp
+	for spaces, if it is nonzero.
+	(whitespace_regexp): New variable.
+	(re_set_whitespace_regexp): New function.
+
+2004-11-19  Kim F. Storm  <storm@cua.dk>
+
+	* indent.c (Fvertical_motion): Fix last change.
+
+2004-11-18  Kim F. Storm  <storm@cua.dk>
+
+	* indent.c (Fvertical_motion): Undo 2004-11-16 change.
+	Instead, move back again if reseating moves too far ahead.
+
+2004-11-17  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* xdisp.c (message3): Call clear_message.
+
+2004-11-17  Kim F. Storm  <storm@cua.dk>
+
+	* xdisp.c (erase_phys_cursor): Adjust cursor row visible height.
+
+2004-11-16  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* gtkutil.c (xg_get_file_name): Fix typo in
+	HAVE_GTK_FILE_SELECTION_NEW.
+
+	* xmenu.c (x_menu_in_use): Remove.
+	(x_menu_set_in_use): Also set popup_activated_flag.
+
+	* xfns.c (Fx_file_dialog): Call popup_activated instead of
+	x_menu_in_use.  Call x_menu_set_in_use in Motif version also.
+
+	* xterm.h: (x_menu_in_use): Remove.
+
+2004-11-16  Richard M. Stallman  <rms@gnu.org>
+
+	* keymap.c (Fmap_keymap): New arg SORT-FIRST.
+	Use map-keymap-internal to implement that.
+
+	* indent.c (Fvertical_motion): In batch mode, use vmotion directly.
+
+2004-11-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* xdisp.c (get_glyph_string_clip_rect, init_glyph_string): Check it's
+	a window before using XWINDOW.
+
+	* window.c (make_window, Fselect_window, make_dummy_parent)
+	(save_window_save):
+	* frame.c (make_frame):
+	* fns.c (concat): Avoid side-effects inside XSETFASTINT's arguments.
+
+	* lisp.h (NILP): Use EQ rather than XFASTINT.
+
+2004-11-16  Kim F. Storm  <storm@cua.dk>
+
+	* fringe.c (Fdefine_fringe_bitmap): Always set 'h'.  Simplify.
+
+	* indent.c (Fvertical_motion): Fix last change.  Only reseat when
+	moving backwards.
+
+2004-11-16  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* dispextern.h: Extern reseat_at_previous_visible_line_start.
+
+2004-11-16  Kenichi Handa  <handa@m17n.org>
+
+	* xdisp.c (display_mode_element): Fix previous change (calculate
+	end position of substring to display correctly).
+
+2004-11-16  Kim F. Storm  <storm@cua.dk>
+
+	* keyboard.c (Fposn_at_point): Remove extra */ after doc string.
+	Reported by Andrew M. Scott.
+
+2004-11-15  Kim F. Storm  <storm@cua.dk>
+
+	* fns.c (Fsafe_plist_get): New defun.
+	(syms_of_fns): Defsubr it.
+
+	* lisp.h (Fsafe_plist_get): Add EXFUN.
+
+	* xdisp.c (store_mode_line_string, produce_stretch_glyph):
+	Use Fsafe_plist_get.
+	(note_mode_line_or_margin_highlight, note_mouse_highlight):
+	Fix image map element parsing.  Use Fsafe_plist_get.
+
+2004-11-15  Richard M. Stallman  <rms@gnu.org>
+
+	* xdisp.c (get_next_display_element): Fix previous change.
+
+2004-11-14  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* window.c (shrink_windows): Handle special case of one window left
+	when trying to shrink the final reminder.  Grow windows if
+	total_removed is less than total_shrink.
+
+	* xmenu.c (pop_down_menu): Remove global variable current_menu,
+	extract pointer from arg with XSAVE_VALUE.
+	(create_and_show_popup_menu, create_and_show_dialog, xmenu_show):
+	Construct arg to record_unwind_protect with make_save_value.
+
+2004-11-13  Richard M. Stallman  <rms@gnu.org>
+
+	* xdisp.c (reseat_at_previous_visible_line_start): No longer static.
+	(get_next_display_element): Fix previous change to apply only to \n.
+
+	* indent.c (Fvertical_motion): Scan to PT from start of line to
+	make iterator consistent.
+
+	* minibuf.c (syms_of_minibuf) <completion-ignore-case>: Doc fix.
+
+2004-11-14  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* gtkutil.c (pop_down_file_dialog): Add BLOCK_INPUT.
+
+	* xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
+	Record unwind with clean_up_file_dialog.
+
+	* xterm.h (x_menu_in_use, x_menu_set_in_use, x_menu_wait_for_event):
+	Declare.
+
+	* xmenu.c (x_menu_in_use, x_menu_set_in_use): New functions.
+
+2004-11-13  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
+	(xg_file_sel_destroy): Remove.
+	(xg_file_response_cb, pop_down_file_dialog)
+	(xg_get_file_name_from_chooser, xg_get_file_name_from_selector):
+	New functions.
+	(xg_get_file_with_chooser, xg_get_file_with_selection):
+	Take new arg func, set it to xg_get_file_name_from_chooser/selector.
+	Move common code to xg_get_file_name.  Return widget created.
+	(xg_get_file_name): Set name, transient for, modal and destroy
+	with parent here.  Connect response signal to xg_file_response_cb,
+	connect delete-event to gtk_true.  Record pop_down_file_dialog
+	for unwind.  Do event loop and call x_menu_wait_for_event in loop.
+	(xg_create_widget): Make dialogs modal.
+
+	* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
+	Lisp_Object.
+	(popup_get_selection): Move unwind protect ...
+	(create_and_show_popup_menu, create_and_show_dialog): ... to here.
+	Move destroy of widget to pop_down_menu.
+	(popup_widget_loop): Move unwind protect ...
+	(create_and_show_popup_menu, create_and_show_dialog): ... to here.
+	Move destroy of widget to pop_down_menu.
+	(pop_down_menu): BLOCK_INPUT and destroy widget/window.
+	(xmenu_show): Record unwind pop_down_menu.  Move XMenuDestroy,
+	x_mouse_leave and grabbed = 0 to pop_down_menu.
+
+2004-11-13  Kim F. Storm  <storm@cua.dk>
+
+	* xdisp.c (make_cursor_line_fully_visible_p): New variable.
+	(syms_of_xdisp): DEFVAR_BOOL it.
+	(make_cursor_line_fully_visible, try_cursor_movement)
+	(try_window_id): Use it.
+
 2004-11-12  Kim F. Storm  <storm@cua.dk>
 
 	* dispextern.h (struct glyph_row): New member extra_line_spacing.
@@ -11,8 +234,8 @@
 	(MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P)
 	(MATRIX_ROW_PARTIALLY_VISIBLE_AT_BOTTOM_P): Use helper macros.
 
-	* window.c (window_scroll_pixel_based, Frecenter): Use
-	move_it_vertically_backward directly.
+	* window.c (window_scroll_pixel_based, Frecenter):
+	Use move_it_vertically_backward directly.
 	(Frecenter): Fix calculation of new start pos for negative arg.
 	Before, the new start pos was sometimes chosen too far back, so
 	the last line became only partially visible, and thus would be
@@ -23,7 +246,7 @@
 	(move_it_vertically_backward): Don't recure to move further back.
 	(move_it_vertically): Remove superfluous condition.
 	(move_it_by_lines): Clear last_height when moved 0 lines.
-	(resize_mini_window): use it.max_extra_line_spacing.
+	(resize_mini_window): Use it.max_extra_line_spacing.
 	(display_tool_bar_line): Clear row->extra_line_spacing.
 	(try_scrolling): Use move_it_vertically_backward directly.
 	(redisplay_window): Likewise.
@@ -115,7 +338,7 @@
 	* Makefile.in (SOME_MACHINE_OBJECTS): Add fringe.o, image.o
 	and w32*.o.
 	(temacs${EXEEXT}): Generate buildobj.lst when temacs is linked.
-	(mostlyclean): rm buildobj.lst
+	(mostlyclean): Rm buildobj.lst
 
 	* makefile.w32-in ($(TEMACS)): Generate buildobj.lst when temacs
 	is linked.
@@ -152,8 +375,8 @@
 
 2004-11-07  Andreas Schwab  <schwab@suse.de>
 
-	* lisp.h: Declare Fmsdos_downcase_filename.
-	* dired.c: Don't declare Fmsdos_downcase_filename.
+	* lisp.h (Fmsdos_downcase_filename): Declare.
+	* dired.c (Fmsdos_downcase_filename): Don't declare here.
 	* fileio.c: Likewise.
 
 2004-11-07  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
@@ -164,7 +387,7 @@
 
 	* msdos.c (IT_set_frame_parameters): Use EQ, not ==, for Lisp_Object:s.
 
-	* dired.c: extern declare Fmsdos_downcase_filename on MSDOS to avoid
+	* dired.c (Fmsdos_downcase_filename): Declare extern on MSDOS to avoid
 	int/Lisp_Object mixup.
 
 	* fileio.c: Ditto.
@@ -273,7 +496,7 @@
 
 	* fileio.c (Fnext_read_file_uses_dialog_p): New function.
 
-	* gtkutil.h: Declare use_old_gtk_file_dialog.
+	* gtkutil.h (use_old_gtk_file_dialog): Declare.
 
 	* gtkutil.c: Make use_old_gtk_file_dialog non-static.
 	(xg_initialize): Move DEFVAR_BOOL for use_old_gtk_file_dialog ...
@@ -750,7 +973,6 @@
 	precedence.
 	(XTread_socket) [TARGET_API_MAC_CARBON]: Don't specify drag area.
 
-
 2004-10-05  Jan Dj,Ad(Brv.  <jan.h.d@swipnet.se>
 
 	* config.in: Regenerate.
@@ -1327,7 +1549,7 @@
 
 2004-07-24  Richard M. Stallman  <rms@gnu.org>
 
-	* keyboard.h (not_single_kboard_state): Declared.
+	* keyboard.h (not_single_kboard_state): Declare.
 
 	* fileio.c (Fwrite_region): Doc fix.
 
@@ -1535,7 +1757,7 @@
 	(lookup_image_type): Pass Qnil as second argument to
 	Finit_image_library.
 
-	* lisp.h: Declare Finit_image_library.
+	* lisp.h (Finit_image_library): Declare.
 
 2004-06-29  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
 
@@ -2380,7 +2602,7 @@
 
 2004-05-10  Andreas Schwab  <schwab@suse.de>
 
-	* lisp.h: Declare Fmake_symbolic_link.
+	* lisp.h (Fmake_symbolic_link): Declare.
 
 	* fileio.c (Frename_file): Remove extra argument in call to
 	Fmake_symbolic_link.
@@ -4871,9 +5093,9 @@
 	(update_frame_tool_bar): Call xg_get_gdk_pixmap_and_mask.
 	(xg_initialize): Remove xg_left_ptr_cursor.
 
-	* gtkutil.h: xg_get_scroll_id_for_window, xg_win_to_widget takes
-	Display* argument also.  Declare xg_display_open,
-	xg_display_close, xg_create_default_cursor.
+	* gtkutil.h (xg_get_scroll_id_for_window, xg_win_to_widget): Add
+	Display* argument.
+	(xg_display_open, xg_display_close, xg_create_default_cursor): Declare.
 
 2003-11-14  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
 
@@ -4939,8 +5161,8 @@
 
 2003-11-02  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
 
-	* gtkutil.h: Declare xg_have_tear_offs, remove xg_keep_popup
-	and xg_did_tearoff.
+	* gtkutil.h (xg_have_tear_offs): Declare.
+	(xg_keep_popup, xg_did_tearoff): Remove.
 
 	* gtkutil.c: Remove variable xg_did_tearoff.
 	(xg_have_tear_offs): New function.
@@ -5438,7 +5660,7 @@
 
 	* alloc.c (lisp_align_malloc): Change type of `aligned'.
 
-	* alloca.s: Removed.
+	* alloca.s: Remove.
 
 2003-08-19  Gerd Moellmann  <gerd@gnu.org>
 
@@ -8060,7 +8282,7 @@
 	(handle_one_xevent): ButtonPress/Release:  If event is for a toolkit
 	scrollbar and control is pressed, call x_scroll_bar_handle_click.
 
-	* gtkutil.h: Declare xg_get_scroll_id_for_window.
+	* gtkutil.h (xg_get_scroll_id_for_window): Declare.
 
 	* gtkutil.c (xg_get_scroll_id_for_window): New function.
 	(xg_tool_bar_item_expose_callback): New function.
@@ -8762,7 +8984,7 @@
 	(FRAME_OUTER_TO_INNER_DIFF_Y): Add FRAME_TOOLBAR_HEIGHT to calculation.
 
 	* xterm.c: Include gtkutil.h for USE_GTK.
-	Declare extern void free_frame_menubar for USE_GTK.
+	(free_frame_menubar): Declare extern void for USE_GTK.
 	(note_mouse_highlight): Check popup_activated for USE_GTK.
 	(xt_action_hook): Don't compile if USE_GTK.
 	(x_scroll_bar_to_input_event): Use CurrentTime for USE_GTK.
@@ -8832,7 +9054,7 @@
 	(redisplay_window): Add check for USE_GTK and FRAME_EXTERNAL_TOOL_BAR.
 	(display_menu_bar): Add check for USE_GTK
 
-	* lisp.h: Declare Vx_resource_name extern.
+	* lisp.h (Vx_resource_name): Declare extern.
 
 	* keyboard.c (kbd_buffer_get_event): Check MENU_BAR_ACTIVATE_EVENT
 	for USE_GTK.
@@ -9049,7 +9271,7 @@
 	(XSAVE_VALUE): New macro.
 	(struct Lisp_Save_Value): New data type.
 	(union Lisp_Misc): Add u_save_value alternative.
-	(make_save_value): Declared.
+	(make_save_value): Declare.
 
 	* alloc.c (make_save_value): New function.
 
@@ -12119,7 +12341,7 @@
 	* fontset.c [MAC_OS]: Set Vdefault_fontset to ETL Fixed instead of
 	Apple Monaco.
 
-	* process.c: Declare QCfamily and QCfilter as extern.
+	* process.c (QCfamily, QCfilte): Declare extern.
 	(wait_reading_process_input) [MAC_OSX]: Clear bit for stdin before
 	calling select.
 
@@ -12947,7 +13169,7 @@
 
 2002-03-10  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
 
-	* xterm.h (x_session_check_input, x_session_initialize): Declared.
+	* xterm.h (x_session_check_input, x_session_initialize): Declare.
 
 	* xterm.c: (XTread_socket): Add call to x_session_check_input and
 	x_session_have_connection.
@@ -12959,7 +13181,7 @@
 
 	* emacs.c (main): Add call to syms_of_xsmfns.
 
-	* lisp.h: Declare syms_of_xsmfns as extern.
+	* lisp.h (syms_of_xsmfns): Declare extern.
 
 	* config.in: Add HAVE_X_SM.
 
@@ -14304,7 +14526,7 @@
 2001-12-09  Jason Rumney  <jasonr@gnu.org>
 
 	* w32menu.c (_widget_value): Make `help' field a Lisp_Object.
-	Add	comment to explain where the struct came from.
+	Add comment to explain where the struct came from.
 	(single_submenu, w32_menu_show): Set `help' field as Lisp_Object.
 	(add_menu_item): Process pop-up menus first to avoid memory leak.
 	(add_menu_item, w32_menu_display_help): Use `help' field as
@@ -15090,7 +15312,7 @@
 	* insdel.c (replace_range): Use adjust_markers_for_replace
 	instead of adjust_markers_for_delete and adjust_markers_for_insert.
 
-	* intervals.h: Declare set_text_properties and set_text_properties_1.
+	* intervals.h (set_text_properties, set_text_properties_1): Declare.
 
 	* textprop.c (set_text_properties_1): New subroutine
 	broken out of set_text_properties.
--- a/src/callint.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/callint.c	Mon Nov 22 11:06:39 2004 +0000
@@ -723,7 +723,7 @@
 
 		tem = Fread_from_minibuffer (build_string (callint_message),
 					     Qnil, Qnil, Qnil, Qnil, Qnil,
-					     Qnil);
+					     Qnil, Qnil);
 		if (! STRINGP (tem) || SCHARS (tem) == 0)
 		  args[i] = Qnil;
 		else
--- a/src/dispextern.h	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/dispextern.h	Mon Nov 22 11:06:39 2004 +0000
@@ -2594,6 +2594,7 @@
 extern struct frame *last_mouse_frame;
 extern int last_tool_bar_item;
 extern int mouse_autoselect_window;
+extern void reseat_at_previous_visible_line_start P_ ((struct it *));
 
 extern int calc_pixel_width_or_height P_ ((double *, struct it *, Lisp_Object,
 					   /* XFontStruct */ void *, int, int *));
--- a/src/eval.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/eval.c	Mon Nov 22 11:06:39 2004 +0000
@@ -204,7 +204,7 @@
   specpdl_size = 50;
   specpdl = (struct specbinding *) xmalloc (specpdl_size * sizeof (struct specbinding));
   specpdl_ptr = specpdl;
-  max_specpdl_size = 600;
+  max_specpdl_size = 650;
   max_lisp_eval_depth = 300;
 
   Vrun_hooks = Qnil;
--- a/src/fns.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/fns.c	Mon Nov 22 11:06:39 2004 +0000
@@ -741,7 +741,7 @@
 		  }
 		else
 		  {
-		    XSETFASTINT (elt, SREF (this, thisindex++));
+		    XSETFASTINT (elt, SREF (this, thisindex)); thisindex++;
 		    if (some_multibyte
 			&& (XINT (elt) >= 0240
 			    || (XINT (elt) >= 0200
@@ -1997,6 +1997,35 @@
   return Qnil;
 }
 
+DEFUN ("safe-plist-get", Fsafe_plist_get, Ssafe_plist_get, 2, 2, 0,
+       doc: /* Extract a value from a property list.
+PLIST is a property list, which is a list of the form
+\(PROP1 VALUE1 PROP2 VALUE2...).  This function returns the value
+corresponding to the given PROP, or nil if PROP is not
+one of the properties on the list.
+This function never signals an error.  */)
+     (plist, prop)
+     Lisp_Object plist;
+     Lisp_Object prop;
+{
+  Lisp_Object tail, halftail;
+
+  /* halftail is used to detect circular lists.  */
+  tail = halftail = plist;
+  while (CONSP (tail) && CONSP (XCDR (tail)))
+    {
+      if (EQ (prop, XCAR (tail)))
+	return XCAR (XCDR (tail));
+
+      tail = XCDR (XCDR (tail));
+      halftail = XCDR (halftail);
+      if (EQ (tail, halftail))
+	break;
+    }
+
+  return Qnil;
+}
+
 DEFUN ("get", Fget, Sget, 2, 2, 0,
        doc: /* Return the value of SYMBOL's PROPNAME property.
 This is the last value stored with `(put SYMBOL PROPNAME VALUE)'.  */)
@@ -3275,7 +3304,7 @@
     {
       ans = Fdowncase (Fread_from_minibuffer (prompt, Qnil, Qnil, Qnil,
 					      Qyes_or_no_p_history, Qnil,
-					      Qnil));
+					      Qnil, Qnil));
       if (SCHARS (ans) == 3 && !strcmp (SDATA (ans), "yes"))
 	{
 	  UNGCPRO;
@@ -5734,6 +5763,7 @@
   defsubr (&Sreverse);
   defsubr (&Ssort);
   defsubr (&Splist_get);
+  defsubr (&Ssafe_plist_get);
   defsubr (&Sget);
   defsubr (&Splist_put);
   defsubr (&Sput);
--- a/src/frame.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/frame.c	Mon Nov 22 11:06:39 2004 +0000
@@ -398,7 +398,8 @@
   f->selected_window = root_window;
   /* Make sure this window seems more recently used than
      a newly-created, never-selected window.  */
-  XSETFASTINT (XWINDOW (f->selected_window)->use_time, ++window_select_count);
+  ++window_select_count;
+  XSETFASTINT (XWINDOW (f->selected_window)->use_time, window_select_count);
 
   f->default_face_done_p = 0;
 
--- a/src/fringe.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/fringe.c	Mon Nov 22 11:06:39 2004 +0000
@@ -1210,7 +1210,6 @@
   (bitmap, bits, height, width, align)
      Lisp_Object bitmap, bits, height, width, align;
 {
-  Lisp_Object len;
   int n, h, i, j;
   unsigned short *b;
   struct fringe_bitmap fb, *xfb;
@@ -1218,20 +1217,21 @@
 
   CHECK_SYMBOL (bitmap);
 
-  if (!STRINGP (bits) && !VECTORP (bits))
-    bits = wrong_type_argument (Qstringp, bits);
-
-  len = Flength (bits);
+  if (STRINGP (bits))
+    h = SCHARS (bits);
+  else if (VECTORP (bits))
+    h = XVECTOR (bits)->size;
+  else
+    bits = wrong_type_argument (Qsequencep, bits);
 
   if (NILP (height))
-    h = fb.height = XINT (len);
+    fb.height = h;
   else
     {
       CHECK_NUMBER (height);
       fb.height = min (XINT (height), 255);
-      if (fb.height > XINT (len))
+      if (fb.height > h)
 	{
-	  h = XINT (len);
 	  fill1 = (fb.height - h) / 2;
 	  fill2 = fb.height - h - fill1;
 	}
--- a/src/gtkutil.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/gtkutil.c	Mon Nov 22 11:06:39 2004 +0000
@@ -1122,41 +1122,75 @@
 /***********************************************************************
                       File dialog functions
  ***********************************************************************/
-enum
-{
-  XG_FILE_NOT_DONE,
-  XG_FILE_OK,
-  XG_FILE_CANCEL,
-  XG_FILE_DESTROYED,
-};
-
 #ifdef HAVE_GTK_FILE_BOTH
 int use_old_gtk_file_dialog;
 #endif
 
+/* Function that is called when the file dialog pops down.
+   W is the dialog widget, RESPONSE is the response code.
+   USER_DATA is what we passed in to g_signal_connect (pointer to int).  */
+
+static void
+xg_file_response_cb (w,
+                     response,
+                     user_data)
+     GtkDialog *w;
+     gint response;
+     gpointer user_data;
+{
+  int *ptr = (int *) user_data;
+  *ptr = response;
+}
+
+
+/*  Destroy the dialog.  This makes it pop down.  */
+
+static Lisp_Object
+pop_down_file_dialog (arg)
+     Lisp_Object arg;
+{
+  struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
+  BLOCK_INPUT;
+  gtk_widget_destroy (GTK_WIDGET (p->pointer));
+  UNBLOCK_INPUT;
+  return Qnil;
+}
+
+typedef char * (*xg_get_file_func) P_ ((GtkWidget *));
 
 #ifdef HAVE_GTK_FILE_CHOOSER_DIALOG_NEW
+
+/* Return the selected file for file chooser dialog W.
+   The returned string must be free:d.  */
+
+static char *
+xg_get_file_name_from_chooser (w)
+     GtkWidget *w;
+{
+  return gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (w));
+}
+
 /* Read a file name from the user using a file chooser dialog.
    F is the current frame.
    PROMPT is a prompt to show to the user.  May not be NULL.
    DEFAULT_FILENAME is a default selection to be displayed.  May be NULL.
    If MUSTMATCH_P is non-zero, the returned file name must be an existing
-   file.
-
-   Returns a file name or NULL if no file was selected.
-   The returned string must be freed by the caller.  */
-
-static char *
-xg_get_file_with_chooser (f, prompt, default_filename, mustmatch_p, only_dir_p)
+   file.  *FUNC is set to a function that can be used to retrieve the
+   selected file name from the returned widget.
+
+   Returns the created widget.  */
+
+static GtkWidget *
+xg_get_file_with_chooser (f, prompt, default_filename,
+                          mustmatch_p, only_dir_p, func)
      FRAME_PTR f;
      char *prompt;
      char *default_filename;
      int mustmatch_p, only_dir_p;
+     xg_get_file_func *func;
 {
   GtkWidget *filewin;
   GtkWindow *gwin = GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f));
-
-  char *fn = 0;
   GtkFileChooserAction action = (mustmatch_p ?
                                  GTK_FILE_CHOOSER_ACTION_OPEN :
                                  GTK_FILE_CHOOSER_ACTION_SAVE);
@@ -1171,12 +1205,6 @@
                                          GTK_RESPONSE_OK,
                                          NULL);
 
-  xg_set_screen (filewin, f);
-  gtk_widget_set_name (filewin, "emacs-filedialog");
-  gtk_window_set_transient_for (GTK_WINDOW (filewin), gwin);
-  gtk_window_set_destroy_with_parent (GTK_WINDOW (filewin), TRUE);
-
-
   if (default_filename)
     {
       Lisp_Object file;
@@ -1197,104 +1225,49 @@
       UNGCPRO;
     }
 
-  gtk_widget_show (filewin);
-
-  if (gtk_dialog_run (GTK_DIALOG (filewin)) == GTK_RESPONSE_OK)
-    fn = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filewin));
-
-  gtk_widget_destroy (filewin);
-
-  return fn;
+  *func = xg_get_file_name_from_chooser;
+  return filewin;
 }
 #endif /* HAVE_GTK_FILE_CHOOSER_DIALOG_NEW */
 
 #ifdef HAVE_GTK_FILE_SELECTION_NEW
-/* Callback function invoked when the Ok button is pressed in
-   a file dialog.
-   W is the file dialog widget,
-   ARG points to an integer where we record what has happend.  */
-
-static void
-xg_file_sel_ok (w, arg)
-     GtkWidget *w;
-     gpointer arg;
-{
-  *(int*)arg = XG_FILE_OK;
-}
-
-/* Callback function invoked when the Cancel button is pressed in
-   a file dialog.
-   W is the file dialog widget,
-   ARG points to an integer where we record what has happend.  */
-
-static void
-xg_file_sel_cancel (w, arg)
+
+/* Return the selected file for file selector dialog W.
+   The returned string must be free:d.  */
+
+static char *
+xg_get_file_name_from_selector (w)
      GtkWidget *w;
-     gpointer arg;
 {
-  *(int*)arg = XG_FILE_CANCEL;
+  GtkFileSelection *filesel = GTK_FILE_SELECTION (w);
+  return xstrdup ((char*) gtk_file_selection_get_filename (filesel));
 }
 
-/* Callback function invoked when the file dialog is destroyed (i.e.
-   popped down).  We must keep track of this, because if this
-   happens, GTK destroys the widget.  But if for example, Ok is pressed,
-   the dialog is popped down, but the dialog widget is not destroyed.
-   W is the file dialog widget,
-   ARG points to an integer where we record what has happend.  */
-
-static void
-xg_file_sel_destroy (w, arg)
-     GtkWidget *w;
-     gpointer arg;
-{
-  *(int*)arg = XG_FILE_DESTROYED;
-}
-
-/* Read a file name from the user using a file selection dialog.
+/* Create a file selection dialog.
    F is the current frame.
    PROMPT is a prompt to show to the user.  May not be NULL.
    DEFAULT_FILENAME is a default selection to be displayed.  May be NULL.
    If MUSTMATCH_P is non-zero, the returned file name must be an existing
-   file.
-
-   Returns a file name or NULL if no file was selected.
-   The returned string must be freed by the caller.  */
-
-static char *
+   file.  *FUNC is set to a function that can be used to retrieve the
+   selected file name from the returned widget.
+
+   Returns the created widget.  */
+
+static GtkWidget *
 xg_get_file_with_selection (f, prompt, default_filename,
-                            mustmatch_p, only_dir_p)
+                            mustmatch_p, only_dir_p, func)
      FRAME_PTR f;
      char *prompt;
      char *default_filename;
      int mustmatch_p, only_dir_p;
+     xg_get_file_func *func;
 {
   GtkWidget *filewin;
   GtkFileSelection *filesel;
-  int filesel_done = XG_FILE_NOT_DONE;
-  char *fn = 0;
 
   filewin = gtk_file_selection_new (prompt);
   filesel = GTK_FILE_SELECTION (filewin);
 
-  xg_set_screen (filewin, f);
-  gtk_widget_set_name (filewin, "emacs-filedialog");
-  gtk_window_set_transient_for (GTK_WINDOW (filewin),
-                                GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
-  gtk_window_set_destroy_with_parent (GTK_WINDOW (filewin), TRUE);
-
-  g_signal_connect (G_OBJECT (filesel->ok_button),
-                    "clicked",
-                    G_CALLBACK (xg_file_sel_ok),
-                    &filesel_done);
-  g_signal_connect (G_OBJECT (filesel->cancel_button),
-                    "clicked",
-                    G_CALLBACK (xg_file_sel_cancel),
-                    &filesel_done);
-  g_signal_connect (G_OBJECT (filesel),
-                    "destroy",
-                    G_CALLBACK (xg_file_sel_destroy),
-                    &filesel_done);
-
   if (default_filename)
     gtk_file_selection_set_filename (filesel, default_filename);
 
@@ -1305,19 +1278,9 @@
       gtk_file_selection_hide_fileop_buttons (filesel);
     }
 
-
-  gtk_widget_show_all (filewin);
-
-  while (filesel_done == XG_FILE_NOT_DONE)
-    gtk_main_iteration ();
-
-  if (filesel_done == XG_FILE_OK)
-    fn = xstrdup ((char*) gtk_file_selection_get_filename (filesel));
-
-  if (filesel_done != XG_FILE_DESTROYED)
-    gtk_widget_destroy (filewin);
-
-  return fn;
+  *func = xg_get_file_name_from_selector;
+
+  return filewin;
 }
 #endif /* HAVE_GTK_FILE_SELECTION_NEW */
 
@@ -1341,26 +1304,63 @@
      char *default_filename;
      int mustmatch_p, only_dir_p;
 {
+  GtkWidget *w = 0;
+  int count = SPECPDL_INDEX ();
+  char *fn = 0;
+  int filesel_done = 0;
+  xg_get_file_func func;
+
 #ifdef HAVE_GTK_FILE_BOTH
   if (use_old_gtk_file_dialog)
-    return xg_get_file_with_selection (f, prompt, default_filename,
-                                       mustmatch_p, only_dir_p);
-  return xg_get_file_with_chooser (f, prompt, default_filename,
-                                   mustmatch_p, only_dir_p);
+    w = xg_get_file_with_selection (f, prompt, default_filename,
+                                    mustmatch_p, only_dir_p, &func);
+  else
+    w = xg_get_file_with_chooser (f, prompt, default_filename,
+                                  mustmatch_p, only_dir_p, &func);
 
 #else /* not HAVE_GTK_FILE_BOTH */
 
-#ifdef HAVE_GTK_FILE_SELECTION_DIALOG_NEW
-  return xg_get_file_with_selection (f, prompt, default_filename,
-                                     mustmatch_p, only_dir_p);
+#ifdef HAVE_GTK_FILE_SELECTION_NEW
+  w = xg_get_file_with_selection (f, prompt, default_filename,
+                                  mustmatch_p, only_dir_p, &func);
 #endif
 #ifdef HAVE_GTK_FILE_CHOOSER_DIALOG_NEW
-  return xg_get_file_with_chooser (f, prompt, default_filename,
-                                   mustmatch_p, only_dir_p);
+  w = xg_get_file_with_chooser (f, prompt, default_filename,
+                                mustmatch_p, only_dir_p, &func);
 #endif
 
 #endif /* HAVE_GTK_FILE_BOTH */
-  return 0;
+
+  xg_set_screen (w, f);
+  gtk_widget_set_name (w, "emacs-filedialog");
+  gtk_window_set_transient_for (GTK_WINDOW (w),
+                                GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
+  gtk_window_set_destroy_with_parent (GTK_WINDOW (w), TRUE);
+  gtk_window_set_modal (GTK_WINDOW (w), TRUE);
+
+  g_signal_connect (G_OBJECT (w),
+                    "response",
+                    G_CALLBACK (xg_file_response_cb),
+                    &filesel_done);
+
+  /* Don't destroy the widget if closed by the window manager close button.  */
+  g_signal_connect (G_OBJECT (w), "delete-event", G_CALLBACK (gtk_true), NULL);
+
+  gtk_widget_show (w);
+
+  record_unwind_protect (pop_down_file_dialog, make_save_value (w, 0));
+  while (! filesel_done)
+    {
+      x_menu_wait_for_event (0);
+      gtk_main_iteration ();
+    }
+
+  if (filesel_done == GTK_RESPONSE_OK)
+    fn = (*func) (w);
+
+  unbind_to (count, Qnil);
+
+  return fn;
 }
 
 
@@ -1999,6 +1999,7 @@
                                     GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
       gtk_window_set_destroy_with_parent (GTK_WINDOW (w), TRUE);
       gtk_widget_set_name (w, "emacs-dialog");
+      gtk_window_set_modal (GTK_WINDOW (w), TRUE);
     }
   else if (menu_bar_p || pop_up_p)
     {
--- a/src/indent.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/indent.c	Mon Nov 22 11:06:39 2004 +0000
@@ -2063,21 +2063,41 @@
       XSETBUFFER (w->buffer, current_buffer);
     }
 
-  SET_TEXT_POS (pt, PT, PT_BYTE);
-  start_display (&it, w, pt);
+  if (noninteractive)
+    {
+      struct position pos;
+      pos = *vmotion (PT, XINT (lines), w);
+      SET_PT_BOTH (pos.bufpos, pos.bytepos);
+    }
+  else
+    {
+      int it_start;
+
+      SET_TEXT_POS (pt, PT, PT_BYTE);
+      start_display (&it, w, pt);
 
-  /* Move to the start of the display line containing PT.  If we don't
-     do this, we start moving with IT->current_x == 0, while PT is
-     really at some x > 0.  The effect is, in continuation lines, that
-     we end up with the iterator placed at where it thinks X is 0,
-     while the end position is really at some X > 0, the same X that
-     PT had.  */
-  move_it_by_lines (&it, 0, 0);
+      /* Scan from the start of the line containing PT.  If we don't
+	 do this, we start moving with IT->current_x == 0, while PT is
+	 really at some x > 0.  The effect is, in continuation lines, that
+	 we end up with the iterator placed at where it thinks X is 0,
+	 while the end position is really at some X > 0, the same X that
+	 PT had.  */
+      it_start = IT_CHARPOS (it);
+      reseat_at_previous_visible_line_start (&it);
+      it.current_x = it.hpos = 0;
+      move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
 
-  if (XINT (lines) != 0)
-    move_it_by_lines (&it, XINT (lines), 0);
+      /* Move back if we got too far.  This may happen if
+	 truncate-lines is on and PT is beyond right margin.  */
+      if (IT_CHARPOS (it) > it_start && XINT (lines) > 0)
+	move_it_by_lines (&it, -1, 0);
 
-  SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
+      it.vpos = 0;
+      if (XINT (lines) != 0)
+	move_it_by_lines (&it, XINT (lines), 0);
+
+      SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
+    }
 
   if (BUFFERP (old_buffer))
     w->buffer = old_buffer;
--- a/src/keyboard.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/keyboard.c	Mon Nov 22 11:06:39 2004 +0000
@@ -10655,7 +10655,7 @@
 to the given buffer position:
    (WINDOW AREA-OR-POS (X . Y) TIMESTAMP OBJECT POS (COL . ROW)
     IMAGE (DX . DY) (WIDTH . HEIGHT))
-The `posn-' functions access elements of such lists.  */*/)
+The `posn-' functions access elements of such lists.  */)
   (pos, window)
      Lisp_Object pos, window;
 {
--- a/src/keymap.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/keymap.c	Mon Nov 22 11:06:39 2004 +0000
@@ -729,19 +729,23 @@
   call2 (fun, key, val);
 }
 
-DEFUN ("map-keymap", Fmap_keymap, Smap_keymap, 2, 2, 0,
+DEFUN ("map-keymap", Fmap_keymap, Smap_keymap, 2, 3, 0,
        doc: /* Call FUNCTION for every binding in KEYMAP.
 FUNCTION is called with two arguments: the event and its binding.
 If KEYMAP has a parent, the parent's bindings are included as well.
 This works recursively: if the parent has itself a parent, then the
-grandparent's bindings are also included and so on.  */)
-     (function, keymap)
-     Lisp_Object function, keymap;
+grandparent's bindings are also included and so on.
+usage: (map-keymap FUNCTION KEYMAP)  */)
+     (function, keymap, sort_first)
+     Lisp_Object function, keymap, sort_first;
 {
   if (INTEGERP (function))
     /* We have to stop integers early since map_keymap gives them special
        significance.  */
     Fsignal (Qinvalid_function, Fcons (function, Qnil));
+  if (! NILP (sort_first))
+    return call3 (intern ("map-keymap-internal"), function, keymap, Qt);
+      
   map_keymap (keymap, map_keymap_call, function, NULL, 1);
   return Qnil;
 }
--- a/src/lisp.h	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/lisp.h	Mon Nov 22 11:06:39 2004 +0000
@@ -1374,7 +1374,7 @@
 
 /* Data type checking */
 
-#define NILP(x)  (XFASTINT (x) == XFASTINT (Qnil))
+#define NILP(x)  EQ (x, Qnil)
 #define GC_NILP(x) GC_EQ (x, Qnil)
 
 #define NUMBERP(x) (INTEGERP (x) || FLOATP (x))
@@ -2304,6 +2304,7 @@
 extern Lisp_Object string_make_unibyte P_ ((Lisp_Object));
 EXFUN (Fcopy_alist, 1);
 EXFUN (Fplist_get, 2);
+EXFUN (Fsafe_plist_get, 2);
 EXFUN (Fplist_put, 3);
 EXFUN (Fplist_member, 2);
 EXFUN (Fset_char_table_parent, 2);
@@ -2807,7 +2808,7 @@
 extern Lisp_Object last_minibuf_string;
 extern void choose_minibuf_frame P_ ((void));
 EXFUN (Fcompleting_read, 8);
-EXFUN (Fread_from_minibuffer, 7);
+EXFUN (Fread_from_minibuffer, 8);
 EXFUN (Fread_variable, 2);
 EXFUN (Fread_buffer, 3);
 EXFUN (Fread_minibuffer, 2);
--- a/src/macterm.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/macterm.c	Mon Nov 22 11:06:39 2004 +0000
@@ -279,7 +279,7 @@
 static void x_draw_bar_cursor P_ ((struct window *, struct glyph_row *, int,
 				   enum text_cursor_kinds));
 
-static void x_clip_to_row P_ ((struct window *, struct glyph_row *, GC));
+static void x_clip_to_row P_ ((struct window *, struct glyph_row *, int, GC));
 static void x_flush P_ ((struct frame *f));
 static void x_update_begin P_ ((struct frame *));
 static void x_update_window_begin P_ ((struct window *));
@@ -1454,12 +1454,12 @@
       int oldVH = row->visible_height;
       row->visible_height = p->h;
       row->y -= rowY - p->y;
-      x_clip_to_row (w, row, gc);
+      x_clip_to_row (w, row, -1, gc);
       row->y = oldY;
       row->visible_height = oldVH;
     }
   else
-    x_clip_to_row (w, row, gc);
+    x_clip_to_row (w, row, -1, gc);
 
   if (p->bx >= 0 && !p->overlay_p)
     {
@@ -4615,18 +4615,19 @@
    mode lines must be clipped to the whole window.  */
 
 static void
-x_clip_to_row (w, row, gc)
+x_clip_to_row (w, row, area, gc)
      struct window *w;
      struct glyph_row *row;
+     int area;
      GC gc;
 {
   struct frame *f = XFRAME (WINDOW_FRAME (w));
   Rect clip_rect;
-  int window_y, window_width;
-
-  window_box (w, -1, 0, &window_y, &window_width, 0);
-
-  clip_rect.left = WINDOW_TO_FRAME_PIXEL_X (w, 0);
+  int window_x, window_y, window_width;
+
+  window_box (w, area, &window_x, &window_y, &window_width, 0);
+
+  clip_rect.left = window_x;
   clip_rect.top = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
   clip_rect.top = max (clip_rect.top, window_y);
   clip_rect.right = clip_rect.left + window_width;
@@ -4692,7 +4693,7 @@
   gc = dpyinfo->scratch_cursor_gc;
 
   /* Set clipping, draw the rectangle, and reset clipping again.  */
-  x_clip_to_row (w, row, gc);
+  x_clip_to_row (w, row, TEXT_AREA, gc);
   mac_draw_rectangle (dpy, FRAME_MAC_WINDOW (f), gc, x, y, wd, h);
   mac_reset_clipping (dpy, FRAME_MAC_WINDOW (f));
 }
@@ -4763,7 +4764,7 @@
       width = min (cursor_glyph->pixel_width, width);
 
       w->phys_cursor_width = width;
-      x_clip_to_row (w, row, gc);
+      x_clip_to_row (w, row, TEXT_AREA, gc);
 
       if (kind == BAR_CURSOR)
 	XFillRectangle (dpy, window, gc,
--- a/src/minibuf.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/minibuf.c	Mon Nov 22 11:06:39 2004 +0000
@@ -219,7 +219,7 @@
 				     Lisp_Object, Lisp_Object,
 				     int, Lisp_Object,
 				     Lisp_Object, Lisp_Object,
-				     int, int));
+				     int, int, int));
 static Lisp_Object read_minibuf_noninteractive P_ ((Lisp_Object, Lisp_Object,
 						    Lisp_Object, Lisp_Object,
 						    int, Lisp_Object,
@@ -438,7 +438,8 @@
 
 static Lisp_Object
 read_minibuf (map, initial, prompt, backup_n, expflag,
-	      histvar, histpos, defalt, allow_props, inherit_input_method)
+	      histvar, histpos, defalt, allow_props, inherit_input_method,
+	      keep_all)
      Lisp_Object map;
      Lisp_Object initial;
      Lisp_Object prompt;
@@ -449,6 +450,7 @@
      Lisp_Object defalt;
      int allow_props;
      int inherit_input_method;
+     int keep_all;
 {
   Lisp_Object val;
   int count = SPECPDL_INDEX ();
@@ -727,7 +729,7 @@
   last_minibuf_string = val;
 
   /* Choose the string to add to the history.  */
-  if (SCHARS (val) != 0)
+  if (SCHARS (val) != 0 || keep_all)
     histstring = val;
   else if (STRINGP (defalt))
     histstring = defalt;
@@ -754,7 +756,8 @@
       if (NILP (histval)
 	  || (CONSP (histval)
 	      /* Don't duplicate the most recent entry in the history.  */
-	      && NILP (Fequal (histstring, Fcar (histval)))))
+	      && (keep_all
+		  || NILP (Fequal (histstring, Fcar (histval))))))
 	{
 	  Lisp_Object length;
 
@@ -916,7 +919,7 @@
 }
 
 
-DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 7, 0,
+DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 8, 0,
        doc: /* Read a string from the minibuffer, prompting with string PROMPT.
 The optional second arg INITIAL-CONTENTS is an obsolete alternative to
   DEFAULT-VALUE.  It normally should be nil in new code, except when
@@ -940,6 +943,8 @@
   the empty string.
 Seventh arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
  the current input method and the setting of `enable-multibyte-characters'.
+Eight arg KEEP-ALL, if non-nil, says to put all inputs in the history list,
+ even empty or duplicate inputs.
 If the variable `minibuffer-allow-text-properties' is non-nil,
  then the string which is returned includes whatever text properties
  were present in the minibuffer.  Otherwise the value has no text properties.
@@ -955,9 +960,9 @@
 one puts point at the beginning of the string.  *Note* that this
 behavior differs from the way such arguments are used in `completing-read'
 and some related functions, which use zero-indexing for POSITION.  */)
-     (prompt, initial_contents, keymap, read, hist, default_value, inherit_input_method)
+  (prompt, initial_contents, keymap, read, hist, default_value, inherit_input_method, keep_all)
      Lisp_Object prompt, initial_contents, keymap, read, hist, default_value;
-     Lisp_Object inherit_input_method;
+     Lisp_Object inherit_input_method, keep_all;
 {
   Lisp_Object histvar, histpos, val;
   struct gcpro gcpro1;
@@ -988,7 +993,8 @@
 		      Qnil, !NILP (read),
 		      histvar, histpos, default_value,
 		      minibuffer_allow_text_properties,
-		      !NILP (inherit_input_method));
+		      !NILP (inherit_input_method),
+		      !NILP (keep_all));
   UNGCPRO;
   return val;
 }
@@ -1005,7 +1011,7 @@
   CHECK_STRING (prompt);
   return read_minibuf (Vminibuffer_local_map, initial_contents,
 		       prompt, Qnil, 1, Qminibuffer_history,
-		       make_number (0), Qnil, 0, 0);
+		       make_number (0), Qnil, 0, 0, 0);
 }
 
 DEFUN ("eval-minibuffer", Feval_minibuffer, Seval_minibuffer, 1, 2, 0,
@@ -1043,7 +1049,7 @@
   Lisp_Object val;
   val = Fread_from_minibuffer (prompt, initial_input, Qnil,
 			       Qnil, history, default_value,
-			       inherit_input_method);
+			       inherit_input_method, Qnil);
   if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (default_value))
     val = default_value;
   return val;
@@ -1065,7 +1071,7 @@
   CHECK_STRING (prompt);
   return read_minibuf (Vminibuffer_local_ns_map, initial, prompt, Qnil,
 		       0, Qminibuffer_history, make_number (0), Qnil, 0,
-		       !NILP (inherit_input_method));
+		       !NILP (inherit_input_method), 0);
 }
 
 DEFUN ("read-command", Fread_command, Sread_command, 1, 2, 0,
@@ -1716,7 +1722,7 @@
 		      : Vminibuffer_local_must_match_map,
 		      init, prompt, make_number (pos), 0,
 		      histvar, histpos, def, 0,
-		      !NILP (inherit_input_method));
+		      !NILP (inherit_input_method), 0);
 
   if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (def))
     val = def;
@@ -2081,9 +2087,29 @@
   if (XINT (Fminibuffer_prompt_end ()) == ZV)
     goto exit;
 
-  if (!NILP (Ftest_completion (Fminibuffer_contents (),
+  val = Fminibuffer_contents ();
+  if (!NILP (Ftest_completion (val,
 			       Vminibuffer_completion_table,
 			       Vminibuffer_completion_predicate)))
+    {
+      if (completion_ignore_case)
+	{ /* Fixup case of the field, if necessary. */
+	  Lisp_Object compl
+	    = Ftry_completion (val,
+			       Vminibuffer_completion_table,
+			       Vminibuffer_completion_predicate);
+	  if (STRINGP (compl)
+	      /* If it weren't for this piece of paranoia, I'd replace
+		 the whole thing with a call to do_completion. */
+	      && EQ (Flength (val), Flength (compl)))
+	    {
+	      del_range (XINT (Fminibuffer_prompt_end ()), ZV);
+	      Finsert (1, &compl);
+	    }
+	}
+      goto exit;
+    }
+
     goto exit;
 
   /* Call do_completion, but ignore errors.  */
@@ -2691,8 +2717,8 @@
   DEFVAR_BOOL ("completion-ignore-case", &completion_ignore_case,
 	       doc: /* Non-nil means don't consider case significant in completion.
 
-See also `read-file-name-completion-ignore-case' concerning case significance
-in completion when reading a file name.  */);
+For file-name completion, the variable `read-file-name-completion-ignore-case'
+controls the behavior, rather than this variable.  */);
   completion_ignore_case = 0;
 
   DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
--- a/src/regex.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/regex.c	Mon Nov 22 11:06:39 2004 +0000
@@ -1250,7 +1250,7 @@
 
 reg_syntax_t
 re_set_syntax (syntax)
-    reg_syntax_t syntax;
+     reg_syntax_t syntax;
 {
   reg_syntax_t ret = re_syntax_options;
 
@@ -1258,6 +1258,17 @@
   return ret;
 }
 WEAK_ALIAS (__re_set_syntax, re_set_syntax)
+
+/* Regexp to use to replace spaces, or NULL meaning don't.  */
+static re_char *whitespace_regexp;
+
+void
+re_set_whitespace_regexp (regexp)
+     re_char *regexp;
+{
+  whitespace_regexp = regexp;
+}
+WEAK_ALIAS (__re_set_syntax, re_set_syntax)
 
 /* This table gives an error message for each of the error codes listed
    in regex.h.  Obviously the order here has to be same as there.
@@ -2436,6 +2447,15 @@
   /* If the object matched can contain multibyte characters.  */
   const boolean multibyte = RE_MULTIBYTE_P (bufp);
 
+  /* Nonzero if we have pushed down into a subpattern.  */
+  int in_subpattern = 0;
+
+  /* These hold the values of p, pattern, and pend from the main
+     pattern when we have pushed into a subpattern.  */
+  re_char *main_p;
+  re_char *main_pattern;
+  re_char *main_pend;
+
 #ifdef DEBUG
   debug++;
   DEBUG_PRINT1 ("\nCompiling pattern: ");
@@ -2498,12 +2518,61 @@
   begalt = b = bufp->buffer;
 
   /* Loop through the uncompiled pattern until we're at the end.  */
-  while (p != pend)
+  while (1)
     {
+      if (p == pend)
+	{
+	  /* If this is the end of an included regexp,
+	     pop back to the main regexp and try again.  */
+	  if (in_subpattern)
+	    {
+	      in_subpattern = 0;
+	      pattern = main_pattern;
+	      p = main_p;
+	      pend = main_pend;
+	      continue;
+	    }
+	  /* If this is the end of the main regexp, we are done.  */
+	  break;
+	}
+
       PATFETCH (c);
 
       switch (c)
 	{
+	case ' ':
+	  {
+	    re_char *p1 = p;
+
+	    /* If there's no special whitespace regexp, treat
+	       spaces normally.  And don't try to do this recursively.  */
+	    if (!whitespace_regexp || in_subpattern)
+	      goto normal_char;
+
+	    /* Peek past following spaces.  */
+	    while (p1 != pend)
+	      {
+		if (*p1 != ' ')
+		  break;
+		p1++;
+	      }
+	    /* If the spaces are followed by a repetition op,
+	       treat them normally.  */
+	    if (p1 == pend
+		|| (*p1 == '*' || *p1 == '+' || *p1 == '?'
+		    || (*p1 == '\\' && p1 + 1 != pend && p1[1] == '{')))
+	      goto normal_char;
+
+	    /* Replace the spaces with the whitespace regexp.  */
+	    in_subpattern = 1;
+	    main_p = p1;
+	    main_pend = pend;
+	    main_pattern = pattern;
+	    p = pattern = whitespace_regexp;
+	    pend = p + strlen (p);
+	    break;
+	  }    
+
 	case '^':
 	  {
 	    if (   /* If at start of pattern, it's an operator.	 */
--- a/src/search.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/search.c	Mon Nov 22 11:06:39 2004 +0000
@@ -41,7 +41,7 @@
 struct regexp_cache
 {
   struct regexp_cache *next;
-  Lisp_Object regexp;
+  Lisp_Object regexp, whitespace_regexp;
   struct re_pattern_buffer buf;
   char fastmap[0400];
   /* Nonzero means regexp was compiled to do full POSIX backtracking.  */
@@ -83,6 +83,8 @@
 
 Lisp_Object Qinvalid_regexp;
 
+Lisp_Object Vsearch_spaces_regexp;
+
 static void set_search_regs ();
 static void save_search_regs ();
 static int simple_search ();
@@ -107,7 +109,9 @@
    for this pattern.  0 means backtrack only enough to get a valid match.
    MULTIBYTE is nonzero if we want to handle multibyte characters in
    PATTERN.  0 means all multibyte characters are recognized just as
-   sequences of binary data.  */
+   sequences of binary data.
+
+   The behavior also depends on Vsearch_spaces_regexp.  */
 
 static void
 compile_pattern_1 (cp, pattern, translate, regp, posix, multibyte)
@@ -158,11 +162,19 @@
   cp->buf.translate = (! NILP (translate) ? translate : make_number (0));
   cp->posix = posix;
   cp->buf.multibyte = multibyte;
+  cp->whitespace_regexp = Vsearch_spaces_regexp;
   BLOCK_INPUT;
   old = re_set_syntax (RE_SYNTAX_EMACS
 		       | (posix ? 0 : RE_NO_POSIX_BACKTRACKING));
+
+  re_set_whitespace_regexp (NILP (Vsearch_spaces_regexp) ? NULL
+			    : SDATA (Vsearch_spaces_regexp));
+
   val = (char *) re_compile_pattern ((char *)raw_pattern,
 				     raw_pattern_size, &cp->buf);
+
+  re_set_whitespace_regexp (NULL);
+
   re_set_syntax (old);
   UNBLOCK_INPUT;
   if (val)
@@ -223,7 +235,8 @@
 	  && !NILP (Fstring_equal (cp->regexp, pattern))
 	  && EQ (cp->buf.translate, (! NILP (translate) ? translate : make_number (0)))
 	  && cp->posix == posix
-	  && cp->buf.multibyte == multibyte)
+	  && cp->buf.multibyte == multibyte
+	  && !NILP (Fequal (cp->whitespace_regexp, Vsearch_spaces_regexp)))
 	break;
 
       /* If we're at the end of the cache, compile into the nil cell
@@ -1051,7 +1064,7 @@
       return pos;
     }
 
-  if (RE && !trivial_regexp_p (string))
+  if (RE && !(trivial_regexp_p (string) && NILP (Vsearch_spaces_regexp)))
     {
       unsigned char *p1, *p2;
       int s1, s2;
@@ -2972,6 +2985,7 @@
       searchbufs[i].buf.buffer = (unsigned char *) xmalloc (100);
       searchbufs[i].buf.fastmap = searchbufs[i].fastmap;
       searchbufs[i].regexp = Qnil;
+      searchbufs[i].whitespace_regexp = Qnil;
       staticpro (&searchbufs[i].regexp);
       searchbufs[i].next = (i == REGEXP_CACHE_SIZE-1 ? 0 : &searchbufs[i+1]);
     }
@@ -2998,6 +3012,14 @@
   saved_last_thing_searched = Qnil;
   staticpro (&saved_last_thing_searched);
 
+  DEFVAR_LISP ("search-spaces-regexp", &Vsearch_spaces_regexp,
+      /* doc: Regexp to substitute for bunches of spaces in regexp search.
+Some commands use this for user-specified regexps.
+Spaces that occur inside character classes or repetition operators
+or other such regexp constructs are not replaced with this.
+A value of nil (which is the normal value) means treat spaces literally.  */);
+  Vsearch_spaces_regexp = Qnil;
+
   defsubr (&Slooking_at);
   defsubr (&Sposix_looking_at);
   defsubr (&Sstring_match);
--- a/src/w32term.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/w32term.c	Mon Nov 22 11:06:39 2004 +0000
@@ -260,7 +260,7 @@
 static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *));
 static void x_draw_bar_cursor P_ ((struct window *, struct glyph_row *, int,
 				   enum text_cursor_kinds));
-static void w32_clip_to_row P_ ((struct window *, struct glyph_row *, HDC));
+static void w32_clip_to_row P_ ((struct window *, struct glyph_row *, int, HDC));
 
 static Lisp_Object Qvendor_specific_keysyms;
 
@@ -691,12 +691,12 @@
       int oldVH = row->visible_height;
       row->visible_height = p->h;
       row->y -= rowY - p->y;
-      w32_clip_to_row (w, row, hdc);
+      w32_clip_to_row (w, row, -1, hdc);
       row->y = oldY;
       row->visible_height = oldVH;
     }
   else
-    w32_clip_to_row (w, row, hdc);
+    w32_clip_to_row (w, row, -1, hdc);
 
   if (p->bx >= 0 && !p->overlay_p)
     {
@@ -4912,18 +4912,19 @@
    mode lines must be clipped to the whole window.  */
 
 static void
-w32_clip_to_row (w, row, hdc)
+w32_clip_to_row (w, row, area, hdc)
      struct window *w;
      struct glyph_row *row;
+     int area;
      HDC hdc;
 {
   struct frame *f = XFRAME (WINDOW_FRAME (w));
   RECT clip_rect;
-  int window_y, window_width;
-
-  window_box (w, -1, 0, &window_y, &window_width, 0);
-
-  clip_rect.left = WINDOW_TO_FRAME_PIXEL_X (w, 0);
+  int window_x, window_y, window_width;
+
+  window_box (w, area, &window_x, &window_y, &window_width, 0);
+
+  clip_rect.left = window_x;
   clip_rect.top = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
   clip_rect.top = max (clip_rect.top, window_y);
   clip_rect.right = clip_rect.left + window_width;
@@ -4983,7 +4984,7 @@
   rect.right = rect.left + wd;
   hdc = get_frame_dc (f);
   /* Set clipping, draw the rectangle, and reset clipping again.  */
-  w32_clip_to_row (w, row, hdc);
+  w32_clip_to_row (w, row, TEXT_AREA, hdc);
   FrameRect (hdc, &rect, hb);
   DeleteObject (hb);
   w32_set_clip_rectangle (hdc, NULL);
@@ -5049,7 +5050,7 @@
 
 
       hdc = get_frame_dc (f);
-      w32_clip_to_row (w, row, hdc);
+      w32_clip_to_row (w, row, TEXT_AREA, hdc);
 
       if (kind == BAR_CURSOR)
 	{
--- a/src/window.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/window.c	Mon Nov 22 11:06:39 2004 +0000
@@ -243,7 +243,8 @@
   register struct window *p;
 
   p = allocate_window ();
-  XSETFASTINT (p->sequence_number, ++sequence_number);
+  ++sequence_number;
+  XSETFASTINT (p->sequence_number, sequence_number);
   XSETFASTINT (p->left_col, 0);
   XSETFASTINT (p->top_line, 0);
   XSETFASTINT (p->total_lines, 0);
@@ -2659,6 +2660,9 @@
             --shrinkable;
             total_removed += smallest;
 
+            /* We don't know what the smallest is now.  */
+            smallest = total;
+
             /* Out of for, just remove one window at the time and
                check again if we have enough space.  */
             break;
@@ -2683,6 +2687,16 @@
      that are left and still can be shrunk.  */
   while (total_shrink > total_removed)
     {
+      int nonzero_sizes = 0;
+      int nonzero_idx = -1;
+
+      for (i = 0; i < nchildren; ++i)
+        if (new_sizes[i] > 0)
+          {
+            ++nonzero_sizes;
+            nonzero_idx = i;
+          }
+      
       for (i = 0; i < nchildren; ++i)
         if (new_sizes[i] > min_size)
           {
@@ -2693,6 +2707,25 @@
                check again if we have enough space.  */
             break;
           }
+
+
+      /* Special case, only one window left.  */
+      if (nonzero_sizes == 1)
+        break;
+    }
+
+  /* Any surplus due to rounding, we add to windows that are left.  */
+  while (total_shrink < total_removed)
+    {
+      for (i = 0; i < nchildren; ++i)
+        {
+          if (new_sizes[i] != 0 && total_shrink < total_removed)
+            {
+              ++new_sizes[i];
+              --total_removed;
+              break;
+            }
+        }
     }
 
   return new_sizes;
@@ -3119,7 +3152,8 @@
   w = XWINDOW (window);
   w->frozen_window_start_p = 0;
 
-  XSETFASTINT (w->use_time, ++window_select_count);
+  ++window_select_count;
+  XSETFASTINT (w->use_time, window_select_count);
   if (EQ (window, selected_window))
     return window;
 
@@ -3610,7 +3644,8 @@
       = ((struct Lisp_Vector *)o)->contents[i];
   XSETWINDOW (new, p);
 
-  XSETFASTINT (p->sequence_number, ++sequence_number);
+  ++sequence_number;
+  XSETFASTINT (p->sequence_number, sequence_number);
 
   /* Put new into window structure in place of window */
   replace_window (window, new);
@@ -5852,7 +5887,7 @@
       p = SAVED_WINDOW_N (vector, i);
       w = XWINDOW (window);
 
-      XSETFASTINT (w->temslot, i++);
+      XSETFASTINT (w->temslot, i); i++;
       p->window = window;
       p->buffer = w->buffer;
       p->left_col = w->left_col;
--- a/src/xdisp.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/xdisp.c	Mon Nov 22 11:06:39 2004 +0000
@@ -264,6 +264,10 @@
 
 int auto_raise_tool_bar_buttons_p;
 
+/* Non-zero means to reposition window if cursor line is only partially visible.  */
+
+int make_cursor_line_fully_visible_p;
+
 /* Margin around tool bar buttons in pixels.  */
 
 Lisp_Object Vtool_bar_button_margin;
@@ -884,7 +888,7 @@
 static void reseat P_ ((struct it *, struct text_pos, int));
 static void reseat_1 P_ ((struct it *, struct text_pos, int));
 static void back_to_previous_visible_line_start P_ ((struct it *));
-static void reseat_at_previous_visible_line_start P_ ((struct it *));
+void reseat_at_previous_visible_line_start P_ ((struct it *));
 static void reseat_at_next_visible_line_start P_ ((struct it *, int));
 static int next_element_from_display_vector P_ ((struct it *));
 static int next_element_from_string P_ ((struct it *));
@@ -1781,7 +1785,8 @@
 
       /* If drawing a tool-bar window, draw it over the internal border
 	 at the top of the window.  */
-      if (s->w == XWINDOW (s->f->tool_bar_window))
+      if (WINDOWP (s->f->tool_bar_window)
+	  && s->w == XWINDOW (s->f->tool_bar_window))
 	r.y -= FRAME_INTERNAL_BORDER_WIDTH (s->f);
     }
 
@@ -4587,7 +4592,7 @@
    selective display.  At the end, update IT's overlay information,
    face information etc.  */
 
-static void
+void
 reseat_at_previous_visible_line_start (it)
      struct it *it;
 {
@@ -4892,8 +4897,9 @@
 	     translated to octal form.  */
 	  else if ((it->c < ' '
 		    && (it->area != TEXT_AREA
-			/* In mode line, treat \n, \t like other crl chars.  */
-			|| (it->glyph_row && it->glyph_row->mode_line_p)
+			/* In mode line, treat \n like other crl chars.  */
+			|| (it->c != '\n'
+			    && it->glyph_row && it->glyph_row->mode_line_p)
 			|| (it->c != '\n' && it->c != '\t')))
 		   || (it->multibyte_p
 		       ? ((it->c >= 127
@@ -5770,6 +5776,8 @@
 				  result = MOVE_NEWLINE_OR_CR;
 				  break;
 				}
+			      if (it->method == next_element_from_display_vector)
+				it->face_id = it->saved_face_id;
 			    }
 #endif /* HAVE_WINDOW_SYSTEM */
 			}
@@ -6696,6 +6704,7 @@
   struct gcpro gcpro1;
 
   GCPRO1 (m);
+  clear_message (1,1);
 
   /* First flush out any partial line written with print.  */
   message_log_maybe_newline ();
@@ -10886,6 +10895,9 @@
   struct glyph_row *row;
   int window_height;
 
+  if (!make_cursor_line_fully_visible_p)
+    return 1;
+
   /* It's not always possible to find the cursor, e.g, when a window
      is full of overlay strings.  Don't do anything in that case.  */
   if (w->cursor.vpos < 0)
@@ -11473,7 +11485,8 @@
 	      /* if PT is not in the glyph row, give up.  */
 	      rc = CURSOR_MOVEMENT_MUST_SCROLL;
 	    }
-	  else if (MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row))
+	  else if (MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row)
+		   && make_cursor_line_fully_visible_p)
 	    {
 	      if (PT == MATRIX_ROW_END_CHARPOS (row)
 		  && !row->ends_at_zv_p
@@ -13519,7 +13532,9 @@
 	 && CHARPOS (start) > BEGV)
 	/* Old redisplay didn't take scroll margin into account at the bottom,
 	   but then global-hl-line-mode doesn't scroll.  KFS 2004-06-14 */
-	|| w->cursor.y + cursor_height + this_scroll_margin > it.last_visible_y)
+	|| (w->cursor.y + (make_cursor_line_fully_visible_p
+			   ? cursor_height + this_scroll_margin
+			   : 1)) > it.last_visible_y)
       {
 	w->cursor.vpos = -1;
 	clear_glyph_matrix (w->desired_matrix);
@@ -14776,6 +14791,8 @@
 				  row->continued_p = 0;
 				  row->exact_window_width_line_p = 1;
 				}
+			      else if (it->method == next_element_from_display_vector)
+				it->face_id = it->saved_face_id;
 			    }
 #endif /* HAVE_WINDOW_SYSTEM */
 			}
@@ -15501,7 +15518,9 @@
 		  {
 		    int bytepos = last - lisp_string;
 		    int charpos = string_byte_to_char (elt, bytepos);
-		    int endpos = (precision <= 0 ? SCHARS (elt)
+		    int endpos = (precision <= 0
+				  ? string_byte_to_char (elt,
+							 this - lisp_string)
 				  : charpos + nchars);
 
 		    n += store_mode_line_string (NULL,
@@ -15809,7 +15828,7 @@
 	props = mode_line_string_face_prop;
       else if (!NILP (mode_line_string_face))
 	{
-	  Lisp_Object face = Fplist_get (props, Qface);
+	  Lisp_Object face = Fsafe_plist_get (props, Qface);
 	  props = Fcopy_sequence (props);
 	  if (NILP (face))
 	    face = mode_line_string_face;
@@ -15834,7 +15853,7 @@
 	  Lisp_Object face;
 	  if (NILP (props))
 	    props = Ftext_properties_at (make_number (0), lisp_string);
-	  face = Fplist_get (props, Qface);
+	  face = Fsafe_plist_get (props, Qface);
 	  if (NILP (face))
 	    face = mode_line_string_face;
 	  else
@@ -17283,7 +17302,8 @@
   s->y = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
 
   /* Display the internal border below the tool-bar window.  */
-  if (s->w == XWINDOW (s->f->tool_bar_window))
+  if (WINDOWP (s->f->tool_bar_window)
+      && s->w == XWINDOW (s->f->tool_bar_window))
     s->y -= FRAME_INTERNAL_BORDER_WIDTH (s->f);
 
   s->ybase = s->y + row->ascent;
@@ -18255,6 +18275,19 @@
   return x_reached;
 }
 
+/* Expand row matrix if too narrow.  Don't expand if area
+   is not present.  */
+
+#define IT_EXPAND_MATRIX_WIDTH(it, area)		\
+  {							\
+    if (!fonts_changed_p				\
+	&& (it->glyph_row->glyphs[area]			\
+	    < it->glyph_row->glyphs[area + 1]))		\
+      {							\
+	it->w->ncols_scale_factor++;			\
+	fonts_changed_p = 1;				\
+      }							\
+  }
 
 /* Store one glyph for IT->char_to_display in IT->glyph_row.
    Called from x_produce_glyphs when IT->glyph_row is non-null.  */
@@ -18292,11 +18325,8 @@
       glyph->font_type = FONT_TYPE_UNKNOWN;
       ++it->glyph_row->used[area];
     }
-  else if (!fonts_changed_p)
-    {
-      it->w->ncols_scale_factor++;
-      fonts_changed_p = 1;
-    }
+  else
+    IT_EXPAND_MATRIX_WIDTH (it, area);
 }
 
 /* Store one glyph for the composition IT->cmp_id in IT->glyph_row.
@@ -18334,11 +18364,8 @@
       glyph->font_type = FONT_TYPE_UNKNOWN;
       ++it->glyph_row->used[area];
     }
-  else if (!fonts_changed_p)
-    {
-      it->w->ncols_scale_factor++;
-      fonts_changed_p = 1;
-    }
+  else
+    IT_EXPAND_MATRIX_WIDTH (it, area);
 }
 
 
@@ -18508,11 +18535,8 @@
 	  glyph->font_type = FONT_TYPE_UNKNOWN;
 	  ++it->glyph_row->used[area];
 	}
-      else if (!fonts_changed_p)
-	{
-	  it->w->ncols_scale_factor++;
-	  fonts_changed_p = 1;
-	}
+      else
+	IT_EXPAND_MATRIX_WIDTH (it, area);
     }
 }
 
@@ -18556,11 +18580,8 @@
       glyph->font_type = FONT_TYPE_UNKNOWN;
       ++it->glyph_row->used[area];
     }
-  else if (!fonts_changed_p)
-    {
-      it->w->ncols_scale_factor++;
-      fonts_changed_p = 1;
-    }
+  else
+    IT_EXPAND_MATRIX_WIDTH (it, area);
 }
 
 
@@ -18615,14 +18636,14 @@
   plist = XCDR (it->object);
 
   /* Compute the width of the stretch.  */
-  if ((prop = Fplist_get (plist, QCwidth), !NILP (prop))
+  if ((prop = Fsafe_plist_get (plist, QCwidth), !NILP (prop))
       && calc_pixel_width_or_height (&tem, it, prop, font, 1, 0))
     {
       /* Absolute width `:width WIDTH' specified and valid.  */
       zero_width_ok_p = 1;
       width = (int)tem;
     }
-  else if (prop = Fplist_get (plist, QCrelative_width),
+  else if (prop = Fsafe_plist_get (plist, QCrelative_width),
 	   NUMVAL (prop) > 0)
     {
       /* Relative width `:relative-width FACTOR' specified and valid.
@@ -18646,7 +18667,7 @@
       x_produce_glyphs (&it2);
       width = NUMVAL (prop) * it2.pixel_width;
     }
-  else if ((prop = Fplist_get (plist, QCalign_to), !NILP (prop))
+  else if ((prop = Fsafe_plist_get (plist, QCalign_to), !NILP (prop))
 	   && calc_pixel_width_or_height (&tem, it, prop, font, 1, &align_to))
     {
       if (it->glyph_row == NULL || !it->glyph_row->mode_line_p)
@@ -18666,13 +18687,13 @@
     width = 1;
 
   /* Compute height.  */
-  if ((prop = Fplist_get (plist, QCheight), !NILP (prop))
+  if ((prop = Fsafe_plist_get (plist, QCheight), !NILP (prop))
       && calc_pixel_width_or_height (&tem, it, prop, font, 0, 0))
     {
       height = (int)tem;
       zero_height_ok_p = 1;
     }
-  else if (prop = Fplist_get (plist, QCrelative_height),
+  else if (prop = Fsafe_plist_get (plist, QCrelative_height),
 	   NUMVAL (prop) > 0)
     height = FONT_HEIGHT (font) * NUMVAL (prop);
   else
@@ -18684,7 +18705,7 @@
   /* Compute percentage of height used for ascent.  If
      `:ascent ASCENT' is present and valid, use that.  Otherwise,
      derive the ascent from the font in use.  */
-  if (prop = Fplist_get (plist, QCascent),
+  if (prop = Fsafe_plist_get (plist, QCascent),
       NUMVAL (prop) > 0 && NUMVAL (prop) <= 100)
     ascent = height * NUMVAL (prop) / 100.0;
   else if (!NILP (prop)
@@ -20055,6 +20076,11 @@
   if (!cursor_row->enabled_p)
     goto mark_cursor_off;
 
+  /* If line spacing is > 0, old cursor may only be partially visible in
+     window after split-window.  So adjust visible height.  */
+  cursor_row->visible_height = min (cursor_row->visible_height,
+				    window_text_bottom_y (w) - cursor_row->y);
+
   /* If row is completely invisible, don't attempt to delete a cursor which
      isn't there.  This can happen if cursor is at top of a window, and
      we switch to a buffer with a header line in that window.  */
@@ -20098,6 +20124,7 @@
     {
       int x, y;
       int header_line_height = WINDOW_HEADER_LINE_HEIGHT (w);
+      int width;
 
       cursor_glyph = get_phys_cursor_glyph (w);
       if (cursor_glyph == NULL)
@@ -20105,9 +20132,10 @@
 
       x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
       y = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, cursor_row->y));
-
-      FRAME_RIF (f)->clear_frame_area (f, x, y,
-                                       cursor_glyph->pixel_width, cursor_row->visible_height);
+      width = min (cursor_glyph->pixel_width,
+                   window_box_width (w, TEXT_AREA) - w->phys_cursor.x);
+
+      FRAME_RIF (f)->clear_frame_area (f, x, y, width, cursor_row->visible_height);
     }
 
   /* Erase the cursor by redrawing the character underneath it.  */
@@ -20887,7 +20915,7 @@
   if (IMAGEP (object))
     {
       Lisp_Object image_map, hotspot;
-      if ((image_map = Fplist_get (XCDR (object), QCmap),
+      if ((image_map = Fsafe_plist_get (XCDR (object), QCmap),
 	   !NILP (image_map))
 	  && (hotspot = find_hot_spot (image_map, dx, dy),
 	      CONSP (hotspot))
@@ -20899,12 +20927,14 @@
 	  /* Could check AREA_ID to see if we enter/leave this hot-spot.
 	     If so, we could look for mouse-enter, mouse-leave
 	     properties in PLIST (and do something...).  */
-	  if ((plist = XCDR (hotspot), CONSP (plist)))
-	    {
-	      pointer = Fplist_get (plist, Qpointer);
+	  hotspot = XCDR (hotspot);
+	  if (CONSP (hotspot)
+	      && (plist = XCAR (hotspot), CONSP (plist)))
+	    {
+	      pointer = Fsafe_plist_get (plist, Qpointer);
 	      if (NILP (pointer))
 		pointer = Qhand;
-	      help = Fplist_get (plist, Qhelp_echo);
+	      help = Fsafe_plist_get (plist, Qhelp_echo);
 	      if (!NILP (help))
 		{
 		  help_echo_string = help;
@@ -20915,7 +20945,7 @@
 		}
 	    }
 	  if (NILP (pointer))
-	    pointer = Fplist_get (XCDR (object), QCpointer);
+	    pointer = Fsafe_plist_get (XCDR (object), QCpointer);
 	}
     }
 
@@ -20925,13 +20955,16 @@
       /* If we're on a string with `help-echo' text property, arrange
 	 for the help to be displayed.  This is done by setting the
 	 global variable help_echo_string to the help string.  */
-      help = Fget_text_property (pos, Qhelp_echo, string);
-      if (!NILP (help))
-	{
-	  help_echo_string = help;
-	  XSETWINDOW (help_echo_window, w);
-	  help_echo_object = string;
-	  help_echo_pos = charpos;
+      if (NILP (help))
+	{
+	  help = Fget_text_property (pos, Qhelp_echo, string);
+	  if (!NILP (help))
+	    {
+	      help_echo_string = help;
+	      XSETWINDOW (help_echo_window, w);
+	      help_echo_object = string;
+	      help_echo_pos = charpos;
+	    }
 	}
 
       if (NILP (pointer))
@@ -21066,7 +21099,7 @@
 	  if (img != NULL && IMAGEP (img->spec))
 	    {
 	      Lisp_Object image_map, hotspot;
-	      if ((image_map = Fplist_get (XCDR (img->spec), QCmap),
+	      if ((image_map = Fsafe_plist_get (XCDR (img->spec), QCmap),
 		   !NILP (image_map))
 		  && (hotspot = find_hot_spot (image_map,
 					       glyph->slice.x + dx,
@@ -21080,12 +21113,14 @@
 		  /* Could check AREA_ID to see if we enter/leave this hot-spot.
 		     If so, we could look for mouse-enter, mouse-leave
 		     properties in PLIST (and do something...).  */
-		  if ((plist = XCDR (hotspot), CONSP (plist)))
+		  hotspot = XCDR (hotspot);
+		  if (CONSP (hotspot)
+		      && (plist = XCAR (hotspot), CONSP (plist)))
 		    {
-		      pointer = Fplist_get (plist, Qpointer);
+		      pointer = Fsafe_plist_get (plist, Qpointer);
 		      if (NILP (pointer))
 			pointer = Qhand;
-		      help_echo_string = Fplist_get (plist, Qhelp_echo);
+		      help_echo_string = Fsafe_plist_get (plist, Qhelp_echo);
 		      if (!NILP (help_echo_string))
 			{
 			  help_echo_window = window;
@@ -21095,7 +21130,7 @@
 		    }
 		}
 	      if (NILP (pointer))
-		pointer = Fplist_get (XCDR (img->spec), QCpointer);
+		pointer = Fsafe_plist_get (XCDR (img->spec), QCpointer);
 	    }
 	}
 
@@ -22394,6 +22429,10 @@
     doc: /* *Non-nil means raise tool-bar buttons when the mouse moves over them.  */);
   auto_raise_tool_bar_buttons_p = 1;
 
+  DEFVAR_BOOL ("make-cursor-line-fully-visible", &make_cursor_line_fully_visible_p,
+    doc: /* *Non-nil means to scroll (recenter) cursor line if it is not fully visible.  */);
+  make_cursor_line_fully_visible_p = 1;
+
   DEFVAR_LISP ("tool-bar-button-margin", &Vtool_bar_button_margin,
     doc: /* *Margin around tool-bar buttons in pixels.
 If an integer, use that for both horizontal and vertical margins.
--- a/src/xfns.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/xfns.c	Mon Nov 22 11:06:39 2004 +0000
@@ -5129,6 +5129,23 @@
   *result = XmCR_CANCEL;
 }
 
+static Lisp_Object
+clean_up_file_dialog (arg)
+     Lisp_Object arg;
+{
+  struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
+  Widget dialog = (Widget) p->pointer;
+
+  /* Clean up.  */
+  BLOCK_INPUT;
+  XtUnmanageChild (dialog);
+  XtDestroyWidget (dialog);
+  x_menu_set_in_use (0);
+  UNBLOCK_INPUT;
+
+  return Qnil;
+}
+
 
 DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 5, 0,
        doc: /* Read file name, prompting with PROMPT in directory DIR.
@@ -5150,6 +5167,10 @@
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6;
 
   GCPRO6 (prompt, dir, default_filename, mustmatch, only_dir_p, file);
+
+  if (popup_activated ())
+    error ("Trying to use a menu from within a menu-entry");
+
   CHECK_STRING (prompt);
   CHECK_STRING (dir);
 
@@ -5232,13 +5253,17 @@
       XmStringFree (default_xmstring);
     }
 
+  record_unwind_protect (clean_up_file_dialog, make_save_value (dialog, 0));
+
   /* Process events until the user presses Cancel or OK.  */
+  x_menu_set_in_use (1);
   result = 0;
   while (result == 0)
     {
       XEvent event;
+      x_menu_wait_for_event (0);
       XtAppNextEvent (Xt_app_con, &event);
-      (void) x_dispatch_event (&event, FRAME_X_DISPLAY (f) );
+      (void) x_dispatch_event (&event, FRAME_X_DISPLAY (f));
     }
 
   /* Get the result.  */
@@ -5256,9 +5281,6 @@
   else
     file = Qnil;
 
-  /* Clean up.  */
-  XtUnmanageChild (dialog);
-  XtDestroyWidget (dialog);
   UNBLOCK_INPUT;
   UNGCPRO;
 
@@ -5273,6 +5295,15 @@
 
 #ifdef USE_GTK
 
+static Lisp_Object
+clean_up_dialog (arg)
+     Lisp_Object arg;
+{
+  x_menu_set_in_use (0);
+
+  return Qnil;
+}
+
 DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 5, 0,
        doc: /* Read file name, prompting with PROMPT in directory DIR.
 Use a file selection dialog.  Select DEFAULT-FILENAME in the dialog's file
@@ -5285,16 +5316,21 @@
   FRAME_PTR f = SELECTED_FRAME ();
   char *fn;
   Lisp_Object file = Qnil;
-  int count = specpdl_ptr - specpdl;
+  int count = SPECPDL_INDEX ();
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6;
   char *cdef_file;
 
   GCPRO6 (prompt, dir, default_filename, mustmatch, only_dir_p, file);
+
+  if (popup_activated ())
+    error ("Trying to use a menu from within a menu-entry");
+
   CHECK_STRING (prompt);
   CHECK_STRING (dir);
 
   /* Prevent redisplay.  */
   specbind (Qinhibit_redisplay, Qt);
+  record_unwind_protect (clean_up_dialog, Qnil);
 
   BLOCK_INPUT;
 
--- a/src/xmenu.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/xmenu.c	Mon Nov 22 11:06:39 2004 +0000
@@ -288,7 +288,7 @@
 
 static Lisp_Object
 unuse_menu_items (dummy)
-     int dummy;
+     Lisp_Object dummy;
 {
   return menu_items_inuse = Qnil;
 }
@@ -1118,9 +1118,19 @@
 
 #ifndef MSDOS
 
+/* Set menu_items_inuse so no other popup menu or dialog is created.  */
+
+void
+x_menu_set_in_use (in_use)
+     int in_use;
+{
+  menu_items_inuse = in_use ? Qt : Qnil;
+  popup_activated_flag = in_use;
+}
+
 /* Wait for an X event to arrive or for a timer to expire.  */
 
-static void
+void
 x_menu_wait_for_event (void *data)
 {
   extern EMACS_TIME timer_check P_ ((int));
@@ -1173,14 +1183,6 @@
 
 #ifdef USE_X_TOOLKIT
 
-static Lisp_Object
-pop_down_menu (dummy)
-     int dummy;
-{
-  popup_activated_flag = 0;
-  return Qnil;
-}
-
 /* Loop in Xt until the menu pulldown or dialog popup has been
    popped down (deactivated).  This is used for x-popup-menu
    and x-popup-dialog; it is not used for the menu bar.
@@ -1200,9 +1202,6 @@
 {
   XEvent event;
 
-  int specpdl_count = SPECPDL_INDEX ();
-  record_unwind_protect (pop_down_menu, Qnil);
-
   while (popup_activated_flag)
     {
        if (initial_event)
@@ -1252,8 +1251,6 @@
 
       x_dispatch_event (&event, event.xany.display);
     }
-
-  unbind_to (specpdl_count, Qnil);
 }
 
 #endif /* USE_X_TOOLKIT */
@@ -1261,30 +1258,12 @@
 #ifdef USE_GTK
 /* Loop util popup_activated_flag is set to zero in a callback.
    Used for popup menus and dialogs. */
-static GtkWidget *current_menu;
-
-static Lisp_Object
-pop_down_menu (dummy)
-     int dummy;
-{
-  if (current_menu)
-    {
-      gtk_widget_unmap (current_menu);
-      current_menu = 0;
-      popup_activated_flag = 0;
-    }
-  return Qnil;
-}
 
 static void
 popup_widget_loop (do_timers, widget)
      int do_timers;
      GtkWidget *widget;
 {
-  int specpdl_count = SPECPDL_INDEX ();
-  current_menu = widget;
-  record_unwind_protect (pop_down_menu, Qnil);
-
   ++popup_activated_flag;
 
   /* Process events in the Gtk event loop until done.  */
@@ -1293,8 +1272,6 @@
       if (do_timers) x_menu_wait_for_event (0);
       gtk_main_iteration ();
     }
-
-  unbind_to (specpdl_count, Qnil);
 }
 #endif
 
@@ -2443,6 +2420,19 @@
   if (cb_data) menu_item_selection = (Lisp_Object *) cb_data->call_data;
 }
 
+static Lisp_Object
+pop_down_menu (arg)
+     Lisp_Object arg;
+{
+  struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
+
+  popup_activated_flag = 0;
+  BLOCK_INPUT;
+  gtk_widget_destroy (GTK_WIDGET (p->pointer));
+  UNBLOCK_INPUT;
+  return Qnil;
+}
+
 /* Pop up the menu for frame F defined by FIRST_WV at X/Y and loop until the
    menu pops down.
    menu_item_selection will be set to the selection.  */
@@ -2458,6 +2448,7 @@
   GtkWidget *menu;
   GtkMenuPositionFunc pos_func = 0;  /* Pop up at pointer.  */
   struct next_popup_x_y popup_x_y;
+  int specpdl_count = SPECPDL_INDEX ();
 
   xg_crazy_callback_abort = 1;
   menu = xg_create_widget ("popup", first_wv->name, f, first_wv,
@@ -2488,13 +2479,15 @@
   gtk_widget_show_all (menu);
   gtk_menu_popup (GTK_MENU (menu), 0, 0, pos_func, &popup_x_y, i, 0);
 
+  record_unwind_protect (pop_down_menu, make_save_value (menu, 0));
+
   /* Set this to one.  popup_widget_loop increases it by one, so it becomes
      two.  show_help_echo uses this to detect popup menus.  */
   popup_activated_flag = 1;
   /* Process events that apply to the menu.  */
-  popup_widget_loop (1, 0);
-
-  gtk_widget_destroy (menu);
+  popup_widget_loop (1, menu);
+
+  unbind_to (specpdl_count, Qnil);
 
   /* Must reset this manually because the button release event is not passed
      to Emacs event loop. */
@@ -2522,6 +2515,24 @@
   menu_item_selection = (Lisp_Object *) client_data;
 }
 
+/* ARG is the LWLIB ID of the dialog box, represented
+   as a Lisp object as (HIGHPART . LOWPART).  */
+
+static Lisp_Object
+pop_down_menu (arg)
+     Lisp_Object arg;
+{
+  LWLIB_ID id = (XINT (XCAR (arg)) << 4 * sizeof (LWLIB_ID)
+                 | XINT (XCDR (arg)));
+
+  BLOCK_INPUT;
+  lw_destroy_all_widgets (id);
+  UNBLOCK_INPUT;
+  popup_activated_flag = 0;
+
+  return Qnil;
+}
+
 /* Pop up the menu for frame F defined by FIRST_WV at X/Y and loop until the
    menu pops down.
    menu_item_selection will be set to the selection.  */
@@ -2578,15 +2589,19 @@
   /* Display the menu.  */
   lw_popup_menu (menu, (XEvent *) &dummy);
   popup_activated_flag = 1;
-
-  /* Process events that apply to the menu.  */
-  popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), menu_id, 1, 0);
-
-  /* fp turned off the following statement and wrote a comment
-     that it is unnecessary--that the menu has already disappeared.
-     Nowadays the menu disappears ok, all right, but
-     we need to delete the widgets or multiple ones will pile up.  */
-  lw_destroy_all_widgets (menu_id);
+  
+  {
+    int fact = 4 * sizeof (LWLIB_ID);
+    int specpdl_count = SPECPDL_INDEX ();
+    record_unwind_protect (pop_down_menu,
+                           Fcons (make_number (menu_id >> (fact)),
+                                  make_number (menu_id & ~(-1 << (fact)))));
+
+    /* Process events that apply to the menu.  */
+    popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), menu_id, 1, 0);
+
+    unbind_to (specpdl_count, Qnil);
+  }
 }
 
 #endif /* not USE_GTK */
@@ -2897,13 +2912,16 @@
 
   if (menu)
     {
+      int specpdl_count = SPECPDL_INDEX ();
+      record_unwind_protect (pop_down_menu, make_save_value (menu, 0));
+
       /* Display the menu.  */
       gtk_widget_show_all (menu);
 
       /* Process events that apply to the menu.  */
       popup_widget_loop (1, menu);
 
-      gtk_widget_destroy (menu);
+      unbind_to (specpdl_count, Qnil);
     }
 }
 
@@ -2926,23 +2944,6 @@
 }
 
 
-/* ARG is the LWLIB ID of the dialog box, represented
-   as a Lisp object as (HIGHPART . LOWPART).  */
-
-Lisp_Object
-xdialog_show_unwind (arg)
-     Lisp_Object arg;
-{
-  LWLIB_ID id = (XINT (XCAR (arg)) << 4 * sizeof (LWLIB_ID)
-		 | XINT (XCDR (arg)));
-  BLOCK_INPUT;
-  lw_destroy_all_widgets (id);
-  UNBLOCK_INPUT;
-  popup_activated_flag = 0;
-  return Qnil;
-}
-
-
 /* Pop up the dialog for frame F defined by FIRST_WV and loop until the
    dialog pops down.
    menu_item_selection will be set to the selection.  */
@@ -2970,7 +2971,7 @@
     int fact = 4 * sizeof (LWLIB_ID);
 
     /* xdialog_show_unwind is responsible for popping the dialog box down.  */
-    record_unwind_protect (xdialog_show_unwind,
+    record_unwind_protect (pop_down_menu,
                            Fcons (make_number (dialog_id >> (fact)),
                                   make_number (dialog_id & ~(-1 << (fact)))));
 
@@ -3203,6 +3204,41 @@
  		  Qnil, menu_object, make_number (item), 1);
 }
 
+static Lisp_Object
+pop_down_menu (arg)
+     Lisp_Object arg;
+{
+  struct Lisp_Save_Value *p1 = XSAVE_VALUE (Fcar (arg));
+  struct Lisp_Save_Value *p2 = XSAVE_VALUE (Fcdr (arg));
+  
+  FRAME_PTR f = p1->pointer;
+  XMenu *menu = p2->pointer;
+
+  BLOCK_INPUT;
+#ifndef MSDOS
+  XUngrabPointer (FRAME_X_DISPLAY (f), CurrentTime);
+  XUngrabKeyboard (FRAME_X_DISPLAY (f), CurrentTime);
+#endif
+  XMenuDestroy (FRAME_X_DISPLAY (f), menu);
+
+#ifdef HAVE_X_WINDOWS
+  /* Assume the mouse has moved out of the X window.
+     If it has actually moved in, we will get an EnterNotify.  */
+  x_mouse_leave (FRAME_X_DISPLAY_INFO (f));
+
+  /* State that no mouse buttons are now held.
+     (The oldXMenu code doesn't track this info for us.)
+     That is not necessarily true, but the fiction leads to reasonable
+     results, and it is a pain to ask which are actually held now.  */
+  FRAME_X_DISPLAY_INFO (f)->grabbed = 0;
+
+#endif /* HAVE_X_WINDOWS */
+
+  UNBLOCK_INPUT;
+
+  return Qnil;
+}
+
 
 static Lisp_Object
 xmenu_show (f, x, y, for_click, keymaps, title, error)
@@ -3224,6 +3260,7 @@
   int maxwidth;
   int dummy_int;
   unsigned int dummy_uint;
+  int specpdl_count = SPECPDL_INDEX ();
 
   *error = 0;
   if (menu_items_n_panes == 0)
@@ -3416,20 +3453,17 @@
 #ifndef MSDOS
   XMenuActivateSetWaitFunction (x_menu_wait_for_event, FRAME_X_DISPLAY (f));
 #endif
+  
+  record_unwind_protect (pop_down_menu,
+                         Fcons (make_save_value (f, 0),
+                                make_save_value (menu, 0)));
 
   /* Help display under X won't work because XMenuActivate contains
      a loop that doesn't give Emacs a chance to process it.  */
   menu_help_frame = f;
   status = XMenuActivate (FRAME_X_DISPLAY (f), menu, &pane, &selidx,
-			  x, y, ButtonReleaseMask, &datap,
-			  menu_help_callback);
-
-
-#ifdef HAVE_X_WINDOWS
-  /* Assume the mouse has moved out of the X window.
-     If it has actually moved in, we will get an EnterNotify.  */
-  x_mouse_leave (FRAME_X_DISPLAY_INFO (f));
-#endif
+                          x, y, ButtonReleaseMask, &datap,
+                          menu_help_callback);
 
   switch (status)
     {
@@ -3480,15 +3514,8 @@
       entry = Qnil;
       break;
     }
-  XMenuDestroy (FRAME_X_DISPLAY (f), menu);
-
-#ifdef HAVE_X_WINDOWS
-  /* State that no mouse buttons are now held.
-     (The oldXMenu code doesn't track this info for us.)
-     That is not necessarily true, but the fiction leads to reasonable
-     results, and it is a pain to ask which are actually held now.  */
-  FRAME_X_DISPLAY_INFO (f)->grabbed = 0;
-#endif
+
+  unbind_to (specpdl_count, Qnil);
 
   return entry;
 }
--- a/src/xterm.c	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/xterm.c	Mon Nov 22 11:06:39 2004 +0000
@@ -358,7 +358,7 @@
 static void x_draw_bar_cursor P_ ((struct window *, struct glyph_row *, int,
 				   enum text_cursor_kinds));
 
-static void x_clip_to_row P_ ((struct window *, struct glyph_row *, GC));
+static void x_clip_to_row P_ ((struct window *, struct glyph_row *, int, GC));
 static void x_flush P_ ((struct frame *f));
 static void x_update_begin P_ ((struct frame *));
 static void x_update_window_begin P_ ((struct window *));
@@ -710,12 +710,12 @@
       int oldVH = row->visible_height;
       row->visible_height = p->h;
       row->y -= rowY - p->y;
-      x_clip_to_row (w, row, gc);
+      x_clip_to_row (w, row, -1, gc);
       row->y = oldY;
       row->visible_height = oldVH;
     }
   else
-    x_clip_to_row (w, row, gc);
+    x_clip_to_row (w, row, -1, gc);
 
   if (p->bx >= 0 && !p->overlay_p)
     {
@@ -7139,18 +7139,19 @@
    mode lines must be clipped to the whole window.  */
 
 static void
-x_clip_to_row (w, row, gc)
+x_clip_to_row (w, row, area, gc)
      struct window *w;
      struct glyph_row *row;
+     int area;
      GC gc;
 {
   struct frame *f = XFRAME (WINDOW_FRAME (w));
   XRectangle clip_rect;
-  int window_y, window_width;
-
-  window_box (w, -1, 0, &window_y, &window_width, 0);
-
-  clip_rect.x = WINDOW_TO_FRAME_PIXEL_X (w, 0);
+  int window_x, window_y, window_width;
+
+  window_box (w, area, &window_x, &window_y, &window_width, 0);
+
+  clip_rect.x = window_x;
   clip_rect.y = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
   clip_rect.y = max (clip_rect.y, window_y);
   clip_rect.width = window_width;
@@ -7216,7 +7217,7 @@
   gc = dpyinfo->scratch_cursor_gc;
 
   /* Set clipping, draw the rectangle, and reset clipping again.  */
-  x_clip_to_row (w, row, gc);
+  x_clip_to_row (w, row, TEXT_AREA, gc);
   XDrawRectangle (dpy, FRAME_X_WINDOW (f), gc, x, y, wd, h);
   XSetClipMask (dpy, gc, None);
 }
@@ -7288,7 +7289,7 @@
       width = min (cursor_glyph->pixel_width, width);
 
       w->phys_cursor_width = width;
-      x_clip_to_row (w, row, gc);
+      x_clip_to_row (w, row, TEXT_AREA, gc);
 
       if (kind == BAR_CURSOR)
 	  XFillRectangle (dpy, window, gc,
--- a/src/xterm.h	Sat Nov 13 18:34:40 2004 +0000
+++ b/src/xterm.h	Mon Nov 22 11:06:39 2004 +0000
@@ -1072,6 +1072,8 @@
 
 /* Defined in xmenu.c */
 
+extern void x_menu_set_in_use P_ ((int));
+extern void x_menu_wait_for_event P_ ((void *data));
 extern void x_activate_menubar P_ ((struct frame *));
 extern int popup_activated P_ ((void));
 extern void initialize_frame_menubar P_ ((struct frame *));