branch: externals/idlwave
commit 46ac2bca8eb952c712368d2f7a97e11b59c0d66a
Author: jdsmith <jdsmith>
Commit: jdsmith <jdsmith>
Initial seed of IDLWAVE v4.10 (added after the fact, forgot to add)
---
idlw-help.el | 3060 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 3060 insertions(+)
diff --git a/idlw-help.el b/idlw-help.el
new file mode 100644
index 0000000000..e3b5b84c9e
--- /dev/null
+++ b/idlw-help.el
@@ -0,0 +1,3060 @@
+;;; idlw-help.el --- Help code and topics for IDLWAVE
+;; Copyright (c) 2000 Carsten Dominik
+;; Copyright (c) 2001 J.D.Smith
+;;
+;; Author: Carsten Dominik <[email protected]>
+;; Maintainer: J.D. Smith <[email protected]>
+;; Version: 4.10
+
+;; This file is not 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 constants which contain the topics information for IDLWAVE's
+;; online help feature. This information is extracted automatically from
+;; the IDL documentation.
+;;
+;; Created by get_rinfo on Tue Nov 27 16:14:14 2001
+;; IDL version: 5.5
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;; Code:
+
+
+(defvar idlwave-completion-help-info)
+(defvar idlwave-help-use-dedicated-frame)
+(defvar idlwave-help-frame-parameters)
+
+(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-help-file nil
+ "The file containing the ASCII help for IDLWAVE.")
+
+(defvar idlwave-help-topics nil
+ "List of helptopics and byte positions in `idlw-help.txt'.")
+
+(defvar idlwave-help-current-topic nil
+ "The topic currently loaded into the IDLWAVE Help buffer.")
+
+(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-name-translations nil) ; defined by get_rinfo
+(defvar idlwave-help-alt-names nil) ; defined by get_rinfo
+(defvar idlwave-help-special-topic-words) ; defined by get_rinfo
+
+(defvar idlwave-help-stack-back nil
+ "Help topic stack for backwards motion.")
+(defvar idlwave-help-stack-forward nil
+ "Help topic stack for forward motion.
+Only gets populated when moving back.")
+
+
+;; 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 "n" 'idlwave-help-next-topic)
+(define-key idlwave-help-mode-map "p" 'idlwave-help-previous-topic)
+(define-key idlwave-help-mode-map " " 'scroll-up)
+(define-key idlwave-help-mode-map [delete] 'scroll-down)
+(define-key idlwave-help-mode-map "b" 'idlwave-help-back)
+(define-key idlwave-help-mode-map "f" 'idlwave-help-forward)
+(define-key idlwave-help-mode-map "c" 'idlwave-help-clear-history)
+(define-key idlwave-help-mode-map "o" 'idlwave-online-help)
+(define-key idlwave-help-mode-map "*" 'idlwave-help-load-entire-file)
+(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 "L" 'idlwave-help-activate-aggressively)
+(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"
+ ["Open topic" idlwave-online-help t]
+ ["History: Backward" idlwave-help-back t]
+ ["History: Forward" idlwave-help-forward t]
+ ["History: Clear" idlwave-help-clear-history t]
+ "---"
+ ["Follow Link" idlwave-help-follow-link (not idlwave-help-is-source)]
+ ["Browse: Next Topic" idlwave-help-next-topic (not idlwave-help-is-source)]
+ ["Browse: Previous Topic" idlwave-help-previous-topic
+ (not idlwave-help-is-source)]
+ ["Load Entire Help File" idlwave-help-load-entire-file t]
+ "---"
+ ["Definition <-> Help Text" idlwave-help-toggle-header-match-and-def
+ idlwave-help-is-source]
+ ["Find DocLib Header" idlwave-help-find-header idlwave-help-is-source]
+ ["Find First DocLib Header" idlwave-help-find-first-header
+ idlwave-help-is-source]
+ ["Fontify help buffer" idlwave-help-fontify idlwave-help-is-source]
+ "--"
+ ["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
+Topic Histrory: [b]ackward [f]orward
+Topic Browsing: [n]ext [p]revious
+Choose new Topic: [o]pen
+Follow Link: Mouse button 2 finds help on word at point
+Text Searches: Inside Topic: Use Emacs search functions
+ Global: Press `*' to load entire help file
+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)
+ (set (make-local-variable 'idlwave-help-is-source) nil)
+ (run-hooks 'idlwave-help-mode-hook))
+
+(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 pronts 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)
+ "; "))))))
+
+
+(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 beg end))
+ (st-ass (assoc (downcase this-word)
idlwave-help-special-topic-words))
+ module keyword cw mod1 mod2 mod3)
+ (if (or arg
+ (and (not (member (string-to-char this-word) '(?! ?.)))
+ (not st-ass)))
+ ;; Need the module information
+ (progn
+ (setq module (idlwave-what-module-find-class)
+ cw (nth 2 (idlwave-where)))
+ ;; 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))
+ (st-ass (setq mod1 (list (or (cdr st-ass) (car st-ass))
+ nil nil nil)))
+ ((string-match "\\`![a-zA-Z0-9_]+" this-word)
+ ;; A system variable
+ (setq mod1 (list "system variables" nil nil
+ (match-string 0 this-word))))
+ ((string-match "^\\." this-word)
+ ;; An executive command
+ (setq mod1 (list this-word nil nil nil)))
+ ((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 insite string delimiters should be
+ ;; the class inside OBJ_NEW.
+ ;; FIXME: Do we really need the in-quotes restriction?
+ ;; This is why it does not work after INHERITS.
+ (setq mod1 (list nil nil this-word nil)))
+ ((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))))
+ (setq mod1 (append module (list keyword)))
+ (setq mod2 module))
+ ((equal (char-after end) ?\()
+ ;; A function - what-module will have caught this
+ (setq mod1 module))
+ (t
+ ;; undecided - try function, keyword, then enclosing mod.
+ ;; Check for keyword abbreviations, but do not report
+ ;; errors, because it might 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 module (list keyword))
+ mod2 (list this-word 'fun nil)
+ mod3 module))))
+ (t
+ (setq mod1 module)))
+ (if mod3
+ (condition-case nil
+ (apply 'idlwave-online-help nil mod1)
+ (error (condition-case nil
+ (apply 'idlwave-online-help nil mod2)
+ (error (apply 'idlwave-online-help nil mod3)))))
+ (if mod2
+ (condition-case nil
+ (apply 'idlwave-online-help nil mod1)
+ (error (apply 'idlwave-online-help nil mod2)))
+ (if mod1
+ (apply 'idlwave-online-help nil mod1)
+ (error "Don't know which routine to show help for.")))))))
+
+(defvar idlwave-extra-help-function)
+(defun idlwave-do-mouse-completion-help (ev)
+ "Display online help on n item in the *Completions* buffer.
+Need additional info stored in `idlwave-completion-help-info'."
+ (let* ((cw (selected-window))
+ (info idlwave-completion-help-info)
+ (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)
+ (mouse-set-point ev)
+ (setq word (idlwave-this-word))
+ (select-window cw)
+ (cond ((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)))
+ (if sclasses
+ (setq classes (idlwave-members-only
+ classes (cons class sclasses))))
+ (if (not idlwave-extra-help-function)
+ (setq classes (idlwave-grep-help-topics classes)))
+ (setq class (idlwave-help-popup-select ev classes))))
+ (if (stringp class)
+ (setq class (idlwave-find-inherited-class
+ (idlwave-sintern-routine-or-method name class)
+ type (idlwave-sintern-class class)))))
+ ((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)))
+ (if sclasses
+ (setq classes (idlwave-members-only
+ classes (cons class sclasses))))
+ (if (not idlwave-extra-help-function)
+ (setq classes (idlwave-grep-help-topics classes)))
+ (setq class (idlwave-help-popup-select ev classes))))
+ (if (stringp class)
+ (setq class (idlwave-find-inherited-class
+ (idlwave-sintern-routine-or-method name class)
+ type (idlwave-sintern-class class)))))
+ ((eq what 'class)
+ (setq class word))
+ ((and (symbolp what) ;; FIXME: document this.
+ (fboundp what))
+ (funcall what 'set word))
+ (t (error "Cannot help with this item")))
+ (if (and need-class (not class))
+ (error "Cannot help with this item"))
+ (idlwave-online-help nil name type class kwd)))
+
+(defvar idlwave-highlight-help-links-in-completion)
+(defun idlwave-highlight-linked-completions ()
+ "Highlight all completions for which help is available.
+`idlwave-help-link-face' is used for this."
+ (if idlwave-highlight-help-links-in-completion
+ (save-excursion
+ (set-buffer (get-buffer "*Completions*"))
+ (save-excursion
+ (let* ((buffer-read-only nil)
+ (case-fold-search t)
+ (props (list 'face 'idlwave-help-link-face))
+ (info idlwave-completion-help-info)
+ (what (nth 0 info))
+ (name (nth 1 info))
+ (type (nth 2 info))
+ (class (nth 3 info))
+ ;; (kwd (nth 4 info))
+ (sclasses (nth 5 info))
+ (kwd-doit
+ (and (eq what 'keyword)
+ (if (equal (idlwave-downcase-safe name) "obj_new")
+ (idlwave-is-help-topic
+ (idlwave-make-full-name
+ idlwave-current-obj_new-class "Init"))
+ (idlwave-is-help-topic
+ (idlwave-make-full-name class name)))))
+ 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)
+ (cond
+ ((eq what 'class)
+ (setq doit (idlwave-is-help-topic word)))
+ ((memq what '(procedure function routine))
+ (if (eq class t)
+ (setq doit (idlwave-any-help-topic
+ (idlwave-all-method-classes
+ (idlwave-sintern-method word) type)))
+ (if sclasses
+ (setq doit (idlwave-any-help-topic
+ (mapcar (lambda (x)
+ (idlwave-make-full-name x word))
+ (idlwave-members-only
+ (idlwave-all-method-classes
+ (idlwave-sintern-method word) type)
+ (cons class sclasses)))))
+ (setq doit (idlwave-is-help-topic
+ (idlwave-make-full-name class word))))))
+ ((eq what 'keyword)
+ (if (eq class t)
+ (setq doit (idlwave-any-help-topic
+ (idlwave-all-method-classes
+ (idlwave-sintern-method name) type)))
+ (if sclasses
+ (setq doit (idlwave-any-help-topic
+ (mapcar
+ (lambda (x)
+ (idlwave-make-full-name x name))
+ (idlwave-members-only
+ (idlwave-all-method-keyword-classes
+ (idlwave-sintern-method name)
+ (idlwave-sintern-keyword word)
+ type)
+ (cons class sclasses)))))
+ (setq doit kwd-doit))))
+ ((and (symbolp what) ; FIXME: document this.
+ (fboundp what))
+ (setq doit (funcall what 'test word))))
+ (if doit
+ (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)))))
+
+(defun idlwave-help-follow-link (ev)
+ "Try the word at point as a help topic. If positive, display topic."
+ (interactive "e")
+ (mouse-set-point ev)
+ (let* ((beg (or (previous-single-property-change (1+ (point))
+ 'idlwave-help-link)
+ (point-min)))
+ (end (or (next-single-property-change (point) 'idlwave-help-link)
+ (point-max)))
+ (this-word (downcase (buffer-substring beg end)))
+ (ass (assoc this-word idlwave-help-special-topic-words))
+ (topic (if ass (or (cdr ass) (car ass)) this-word)))
+ (cond ((idlwave-is-help-topic topic)
+ (idlwave-online-help
+ (idlwave-help-maybe-translate topic)))
+ ((string-match "::" this-word)
+ (let* ((l (split-string this-word "::"))
+ (class (car l))
+ (method (nth 1 l)))
+ (idlwave-online-help nil method nil class)))
+ (t
+ (error "Cannot find help for \"%s\"" this-word)))))
+
+(defun idlwave-help-next-topic ()
+ "Select next topic in the physical sequence in the Help file."
+ (interactive)
+ (if (stringp idlwave-help-current-topic)
+ (let* ((topic (car (car (cdr (memq (assoc idlwave-help-current-topic
+ idlwave-help-topics)
+ idlwave-help-topics))))))
+ (if topic
+ (idlwave-online-help topic)
+ (error "Already in last topic")))
+ (error "No \"next\" topic")))
+
+(defun idlwave-help-previous-topic ()
+ "Select previous topic in the physical sequence in the Help file."
+ (interactive)
+ (if (stringp idlwave-help-current-topic)
+ (let* ((topic (car (nth (- (length idlwave-help-topics)
+ (length (memq (assoc
idlwave-help-current-topic
+ idlwave-help-topics)
+ idlwave-help-topics))
+ 1)
+ idlwave-help-topics))))
+ (if topic
+ (idlwave-online-help topic)
+ (error "Already in first topic")))
+ (error "No \"previous\" topic")))
+
+(defun idlwave-help-back ()
+ "Select previous topic as given by help history stack."
+ (interactive)
+ (if idlwave-help-stack-back
+ (let* ((back idlwave-help-stack-back)
+ (fwd idlwave-help-stack-forward)
+ (goto (car back)))
+ (setq back (cdr back))
+ (setq fwd (cons (cons idlwave-help-current-topic (window-start)) fwd))
+ (if (consp (car goto))
+ (apply 'idlwave-online-help nil (car goto))
+ (idlwave-online-help (car goto)))
+ (set-window-start (selected-window) (cdr goto))
+ (setq idlwave-help-stack-forward fwd
+ idlwave-help-stack-back back))
+ (error "Cannot go back any further in history")))
+
+(defun idlwave-help-forward ()
+ "Select next topic as given by help history stack.
+Only accessible if you have walked back with `idlwave-help-back' first."
+ (interactive)
+ (if idlwave-help-stack-forward
+ (let* ((back idlwave-help-stack-back)
+ (fwd idlwave-help-stack-forward)
+ (goto (car fwd)))
+ (setq fwd (cdr fwd))
+ (setq back (cons (cons idlwave-help-current-topic (window-start)) back))
+ (if (consp (car goto))
+ (apply 'idlwave-online-help nil (car goto))
+ (idlwave-online-help (car goto)))
+ (set-window-start (selected-window) (cdr goto))
+ (setq idlwave-help-stack-forward fwd
+ idlwave-help-stack-back back))
+ (error "Cannot go forward any further in history")))
+
+(defun idlwave-help-clear-history ()
+ "Clear the history."
+ (interactive)
+ (setq idlwave-help-stack-back nil
+ idlwave-help-stack-forward nil))
+
+(defun idlwave-help-load-entire-file ()
+ "Load the entire help file for global searches."
+ (interactive)
+ (let ((buffer-read-only nil))
+ (idlwave-help-load-topic "***")
+ (message "Entire Help file loaded")))
+
+(defun idlwave-find-help (class1 routine1 keyword1)
+ "Find help corresponding to the arguments."
+ (let ((search-list (idlwave-help-make-search-list class1 routine1 keyword1))
+ class routine keyword topic
+ entry pre-re pos-re found kwd-re
+ pos-p not-first)
+
+ (save-excursion
+ (set-buffer (idlwave-help-get-help-buffer))
+ ;; Loop over all possible search compinations
+ (while (and (not found)
+ (setq entry (car search-list)))
+ (setq search-list (cdr search-list))
+ (catch 'next
+ (setq class (nth 0 entry)
+ routine (nth 1 entry)
+ keyword (nth 2 entry))
+
+ ;; The [XYZ] keywords need a special search strategy
+ (if (and keyword (string-match "^[xyz]" keyword))
+ (setq kwd-re (format "\\(%s\\|\\[[xyz]+\\]\\)%s"
+ (substring keyword 0 1)
+ (substring keyword 1)))
+ (setq kwd-re keyword))
+
+ ;; Determine the topic, and the regular expressions for narrowing and
+ ;; window start during display.
+ (setq topic (if class
+ (if routine (concat class "::" routine) class)
+ routine))
+ (setq pre-re nil pos-re nil found nil)
+ (setq pos-p nil)
+ (cond ((and (stringp keyword) (string-match "^!" keyword))
+ ;; A system keyword
+ (setq pos-re (concat "^[ \t]*"
+ "\\(![a-zA-Z0-9_]+ *, *\\)*"
+ keyword
+ "\\( *, *![a-zA-Z0-9_]+ *\\)*"
+ " *\\([sS]ystem +[vV]ariables?\\)?"
+ "[ \t]*$")))
+ ((and class routine)
+ ;; A class method
+ (if keyword
+ (setq pos-re (concat
+ "^ *"
+ kwd-re
+ " *\\(( *\\(get *, *set\\|get\\|set\\)
*)\\)?"
+ " *$"))))
+ (routine
+ ;; A normal routine
+ (if keyword
+ (setq pre-re "^ *keywords *$"
+ pos-re (concat
+ "^ *"
+ kwd-re
+ " *$"))))
+ (class
+ ;; Just a class
+ (if keyword
+ (setq pre-re "^ *keywords *$"
+ pos-re (concat
+ "^ *"
+ kwd-re
+ " *\\(( *\\(get *, *set\\|get\\|set\\)
*)\\)?"
+ " *$")))))
+ ;; Load the correct help topic into this buffer
+ (widen)
+ (if (not (equal topic idlwave-help-current-topic))
+ ;; The last topic was different - load the new one.
+ (let ((buffer-read-only nil))
+ (or (idlwave-help-load-topic topic)
+ (throw 'next nil))))
+ (goto-char (point-min))
+
+ ;; Position cursor and window start.
+ (if pre-re
+ (re-search-forward pre-re nil t))
+ (if (and pos-re
+ (setq pos-p (re-search-forward pos-re nil t)))
+ (progn (goto-char (match-beginning 0))))
+ ;; Determine if we found what we wanted
+ (setq found (if pos-re
+ pos-p
+ (not not-first)))
+ (setq not-first t)))
+ (if found
+ (point)
+ (or idlwave-help-use-dedicated-frame
+ (idlwave-help-quit))
+ nil))))
+
+(defvar default-toolbar-visible-p)
+(defvar idlwave-help-activate-links-aggressively)
+(defun idlwave-help-display-help-window (pos &optional nolinks)
+ "Display the help window and move window start to POS.
+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
+ ;; Use a special frame for this
+ (if (frame-live-p idlwave-help-frame)
+ nil
+ (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)))))
+ ;; We should use display-buffer here, but there are problems on Emacs
+ (select-frame idlwave-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)
+ (goto-char pos)
+ (recenter 0)
+ (if nolinks
+ nil
+ (idlwave-help-activate-see-also)
+ (idlwave-help-activate-methods)
+ (idlwave-help-activate-class)
+ (if idlwave-help-activate-links-aggressively
+ (idlwave-help-activate-aggressively)))
+ (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)))
+
+(defvar idlwave-help-is-source)
+(defun idlwave-help-load-topic (topic)
+ "Load topic TOPIC into the current buffer."
+ (setq idlwave-help-is-source nil)
+ (let* ((entry (assoc topic idlwave-help-topics))
+ beg end)
+ (if (equal topic "***")
+ ;; Make it load the whole file
+ (setq entry (cons t nil)))
+ (if entry
+ (progn
+ (setq beg (cdr entry)
+ end (cdr (car (cdr (memq entry idlwave-help-topics)))))
+ (erase-buffer)
+ (setq idlwave-help-current-topic topic)
+ (setq idlwave-help-mode-line-indicator (upcase topic))
+ (insert-file-contents idlwave-help-file nil beg end)
+ (set-buffer-modified-p nil)
+ t)
+ nil)))
+
+(defvar idlwave-extra-help-function)
+(defun idlwave-online-help (topic &optional name type class keyword)
+ "Display help on a certain topic.
+Note that the topics are the section headings in the IDL documentation.
+Thus the right topic may not always be easy to guess."
+ (interactive (list (completing-read "Topic: " idlwave-help-topics)))
+ (let ((last-topic idlwave-help-current-topic)
+ (last-ws (window-start (get-buffer-window "*IDLWAVE Help*" t))))
+ ;; Push the current topic on the history stack
+ (if last-topic
+ (progn
+ (if (equal last-topic (car (car idlwave-help-stack-back)))
+ (setcdr (car idlwave-help-stack-back) (or last-ws 1))
+ (setq idlwave-help-stack-back
+ (cons (cons last-topic (or last-ws 1))
+ idlwave-help-stack-back)))))
+ (if (> (length idlwave-help-stack-back) 20)
+ (setcdr (nthcdr 17 idlwave-help-stack-back) nil))
+ (setq idlwave-help-stack-forward nil)
+ (if topic
+ ;; A specific topic
+ (progn
+ (save-excursion
+ (set-buffer (idlwave-help-get-help-buffer))
+ (let ((buffer-read-only nil))
+ (idlwave-help-load-topic (downcase topic))))
+ (idlwave-help-display-help-window 0))
+ ;; Find the right topic and place
+ (if idlwave-extra-help-function
+ (condition-case nil
+ (idlwave-routine-info-help name type class keyword)
+ (error
+ (idlwave-help-get-special-help name type class keyword)))
+ (idlwave-routine-info-help name type class keyword)))))
+
+(defun idlwave-routine-info-help (routine type class &optional keyword)
+ "Show help about KEYWORD of ROUTINE in CLASS. TYPE is currently ignored.
+When CLASS is nil, look for a normal routine.
+When ROUTINE is nil, display the info about the entire class.
+When KEYWORD is non-nil, position window start at the description of that
+keyword, but still have the whole topic in the buffer."
+ (let ((cw (selected-window))
+ (help-pos (idlwave-find-help class routine keyword)))
+ (if help-pos
+ (idlwave-help-display-help-window help-pos)
+ (idlwave-help-error routine type class keyword))
+ (select-window cw)))
+
+(defun idlwave-help-get-special-help (name type class keyword)
+ "Call the function given by `idlwave-extra-help-function'."
+ (let* ((cw (selected-window))
+ (idlwave-min-frame-width nil)
+ (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
+ (progn
+ (setq idlwave-help-current-topic (list name type class keyword))
+ (idlwave-help-display-help-window help-pos 'no-links)
+ ;; Check if we have to widen the frame
+ (if (and (integerp idlwave-min-frame-width)
+ (framep idlwave-help-frame)
+ (< (frame-width idlwave-help-frame) idlwave-min-frame-width))
+ (set-frame-width idlwave-help-frame idlwave-min-frame-width)))
+ (setq idlwave-help-current-topic nil)
+ (idlwave-help-error name type class keyword))
+ (select-window cw)))
+
+(defvar idlwave-min-frame-width)
+(defvar idlwave-help-def-pos)
+(defvar idlwave-help-args)
+(defvar idlwave-help-in-header)
+(defvar idlwave-help-is-source)
+(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 manual.
+Works by loading the routine source file into the help buffer.
+Depending on the value of `idlwave-help-source-try-header', it shows
+the routine definition or the header description.
+
+This function can be used as `idlwave-extra-help-function'."
+ (let* ((entry (idlwave-best-rinfo-assoc
+ name (or type t) class (idlwave-routines)))
+ (case-fold-search t)
+ (file (cdr (nth 3 entry)))
+ header-pos def-pos)
+ (setq idlwave-help-def-pos nil)
+ (setq idlwave-help-args (list name type class keyword))
+ (setq idlwave-help-in-header nil)
+ (setq idlwave-help-is-source t)
+ (if (stringp file)
+ (progn
+ (setq file (idlwave-expand-lib-file-name file))
+ (if (and (> (buffer-size) 3)
+ (equal file (get-text-property 1 :idlwave-file))
+ nil) ;; force reloading the file each time
+ ;; FIXME: store and check the modification time?
+ nil ; Do nothing: this is already the correct file
+ ;; load the file
+ (if (file-exists-p file)
+ (progn
+ (erase-buffer)
+ (insert-file-contents file nil nil nil 'replace))
+ (idlwave-help-error name type class keyword))
+ (if idlwave-help-fontify-source-code
+ (idlwave-help-fontify))))
+ (idlwave-help-error name type class keyword))
+ (setq idlwave-help-mode-line-indicator file)
+ (put-text-property 1 2 :idlwave-file file)
+
+ ;; Try to find a good place to display
+ ;; First, find the definition
+ (setq def-pos (idlwave-help-find-routine-definition
+ name type class keyword))
+ (setq idlwave-help-def-pos def-pos)
+
+ (if idlwave-help-source-try-header
+ ;; 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-min-frame-width)
+ (setq idlwave-min-frame-width 80))
+ (goto-char (or header-pos def-pos)))
+ (idlwave-help-error name type class keyword))
+
+ (point)))
+
+
+;; FIXME: Should use type here.
+(defun idlwave-help-find-routine-definition (name type class keyword)
+ "Find the definition of routine CLASS::NAME in current buffer.
+TYPE and KEYWORD are ignored.
+Returns hte point of match if successful, nil otherwise."
+ (save-excursion
+ (goto-char (point-max))
+ (if (re-search-backward
+ (concat "^[ \t]*\\(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)
+ ;; NAME tag plus the routine name. The new version is from JD.
+ (name-re (concat
+ "\\(^;+\\*?[ \t]*name\\([ \t]*:\\|[ \t]*$\\)[ \t]*\\(\n;+[
\t]*\\)*"
+ (if (stringp class)
+ (concat "\\(" (regexp-quote (downcase class))
+ "::\\)?")
+ "")
+ (regexp-quote (downcase name))
+ "\\>\\)"
+ "\\|"
+ "\\(^;+[ \t]*"
+ (regexp-quote (downcase name))
+ ":[ \t]*$\\)"))
+; (name-re (concat
+; "\\(^;+\\*?[ \t]*name\\([ \t]*:\\|[ \t]*$\\)[ \t]*\\(\n;+[
\t]*\\)?"
+; (if (stringp class)
+; (concat "\\(" (regexp-quote (downcase class))
+; "::\\)?")
+; "")
+; (regexp-quote (downcase name))
+; "\\>"))
+ ;; Header start plus name
+ (header-re (concat "\\(" idlwave-doclib-start "\\).*\n"
+ "\\(^;+.*\n\\)*"
+ "\\(" name-re "\\)"))
+ ;; A keywords section
+ (kwds-re "^;+[ \t]+KEYWORD PARAMETERS:[ \t]*$") ; hard
+ (kwds-re2 (concat ; forgiving
+ "^;+\\*?[ \t]*"
+ "\\([-A-Z_ ]*KEYWORD[-A-Z_ ]*\\)"
+ "\\(:\\|[ \t]*\n\\)"))
+ ;; The 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))
+ (or (re-search-forward kwds-re dend t)
+ (re-search-forward kwds-re2 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")
+ (if (not idlwave-help-is-source)
+ (error "This is not a source file"))
+ (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")
+ (if (not idlwave-help-is-source)
+ (error "This is not a source file"))
+ (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 (not idlwave-help-is-source)
+ (error "Fontification only for source files...")
+ (if (and (featurep 'font-lock)
+ idlwave-help-is-source)
+ (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 "Cannot find help on %s%s"
+ (idlwave-make-full-name class name)
+ (if keyword (format ", keyword %s" (upcase keyword)) "")))
+
+(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-help-make-search-list (class routine keyword)
+ "Return a list of all possible search compinations.
+For some routines, keywords are described under a different topic or routine.
+This function returns a list of entries (class routine keyword) to be
+searched. It also makes everything downcase, to make sure the regexp
+searches will work properly with `case-fold-search'"
+ (let (routines list)
+ (setq routine (idlwave-downcase-safe routine)
+ class (idlwave-downcase-safe class)
+ keyword (idlwave-downcase-safe keyword))
+ (setq routine (or (cdr (assoc routine idlwave-help-name-translations))
+ routine))
+ (setq routines (append (cdr (assoc routine idlwave-help-alt-names))
+ (list routine)))
+ (if (equal routine "obj_new")
+ (setq routines (cons (list (idlwave-downcase-safe
+ idlwave-current-obj_new-class)
+ "init" keyword)
+ routines)))
+ (while routines
+ (if (consp (car routines))
+ (setq list (cons (car routines) list))
+ (setq list (cons (list class (car routines) keyword) list)))
+ (setq routines (cdr routines)))
+ list))
+
+(defvar idlwave-help-link-map (copy-keymap idlwave-help-mode-map)
+ "The keymap for activated stuff in the Help application.")
+
+(define-key idlwave-help-link-map (if (featurep 'xemacs) [button1] [mouse-1])
+ 'idlwave-help-follow-link)
+(define-key idlwave-help-link-map (if (featurep 'xemacs) [button2] [mouse-2])
+ 'idlwave-help-follow-link)
+(define-key idlwave-help-link-map (if (featurep 'xemacs) [button3] [mouse-3])
+ 'idlwave-help-follow-link)
+
+(defun idlwave-help-activate-see-also ()
+ "Highlight the items under `See Also' in indicate they may be used as links."
+ (save-excursion
+ (if (re-search-forward "^ *See Also *$" nil t)
+ (let ((lim (+ (point) 500))
+ (case-fold-search nil)
+ (props (list 'face 'idlwave-help-link-face
+ 'idlwave-help-link t
+ (if (featurep 'xemacs) 'keymap 'local-map)
+ idlwave-help-link-map
+ 'mouse-face 'highlight))
+ (buffer-read-only nil))
+ (while (re-search-forward "\\(\\.?[A-Z][A-Z0-9_]+\\)" lim t)
+ (if (idlwave-is-help-topic (match-string 1))
+ (add-text-properties (match-beginning 1) (match-end 1)
props)))))))
+
+(defun idlwave-help-activate-methods ()
+ "Highlight the items under `See Also' in indicate they may be used as links."
+ (save-excursion
+ (if (re-search-forward "^ *Methods *$" nil t)
+ (let ((lim (+ (point) 1000))
+ (case-fold-search t)
+ (props (list 'face 'idlwave-help-link-face
+ 'idlwave-help-link t
+ (if (featurep 'xemacs) 'keymap 'local-map)
+ idlwave-help-link-map
+ 'mouse-face 'highlight))
+ (buffer-read-only nil))
+ (while (re-search-forward
+ "^ *\\* +\"?\\([A-Z][A-Z0-9_]+::[A-Z][A-Z0-9_]+\\)\"?\\( *on
+page +[0-9]*\\)? *" lim t)
+ (add-text-properties (match-beginning 1) (match-end 1) props))))))
+
+(defun idlwave-help-activate-class ()
+ "Highlight the items under `See Also' in indicate they may be used as links."
+ (save-excursion
+ (goto-char (point-min))
+ (if (looking-at "\\([A-Z][A-Z0-9_]+\\)::[A-Z][A-Z0-9_]+ *$")
+ (let ((props (list 'face 'idlwave-help-link-face
+ 'idlwave-help-link t
+ (if (featurep 'xemacs) 'keymap 'local-map)
+ idlwave-help-link-map
+ 'mouse-face 'highlight))
+ (buffer-read-only nil))
+ (add-text-properties (match-beginning 1) (match-end 1) props)))))
+
+(defun idlwave-help-activate-aggressively ()
+ (interactive)
+ (let ((props (list 'face 'idlwave-help-link-face
+ 'idlwave-help-link t
+ (if (featurep 'xemacs) 'keymap 'local-map)
+ idlwave-help-link-map
+ 'mouse-face 'highlight))
+ (except
+ '("For" "If" "Example" "Wait" "Do" "Events" "Fonts" "Device"
+ "Reference" "Guide" "Routines" "Return" "Print" "Reverse"
+ "Function" "Pro" "Where" "Plot"))
+ (case-fold-search nil)
+ (buffer-read-only nil)
+ b e s bc ac)
+ (save-excursion
+ (goto-char (point-min))
+ (while (re-search-forward "\\.?[A-Z][a-zA-Z0-9_:]+" nil t)
+ (setq b (match-beginning 0) e (match-end 0) s (match-string 0)
+ bc (char-before b) ac (char-after e))
+ (if (and (idlwave-is-help-topic s)
+ (not (member s except))
+ (not (eq bc ?/)) (not (eq ac ?=))
+ (string-match "[A-Z]" (substring s 1)) ; 2nd UPPER char
+ (not (equal (downcase s) idlwave-help-current-topic)))
+ (add-text-properties b e props)))
+ (goto-char (point-min))
+ (while (re-search-forward "\"" nil t)
+ (when (looking-at "\\([^\"]+\\)\"")
+ (setq b (match-beginning 1) e (match-end 1) s (match-string 1))
+ (when (< (length s) 100)
+ (while (string-match "\\s-\\s-+" s)
+ (setq s (replace-match " " t t s)))
+ (if (idlwave-is-help-topic s)
+ (add-text-properties b e props))))))))
+
+(defvar idlwave-max-popup-menu-items)
+(defun idlwave-help-popup-select (ev list)
+ "Selected an item in LIST with a popup menu."
+ (let ((maxpopup idlwave-max-popup-menu-items)
+ rtn menu resp)
+ (cond ((null list))
+ ((= 1 (length list))
+ (setq rtn (car list)))
+ ((featurep 'xemacs)
+ (setq list (sort list (lambda (a b)
+ (string< (upcase a) (upcase b)))))
+ (setq menu
+ (append (list "Select Class")
+ (mapcar (lambda (x) (vector x (list 'idlwave-help-pset
+ x)))
+ list)))
+ (setq menu (idlwave-help-split-menu-xemacs menu maxpopup))
+ (setq resp (get-popup-menu-response menu))
+ (funcall (event-function resp) (event-object resp)))
+ (t
+ (setq list (sort list (lambda (a b)
+ (string< (upcase a) (upcase b)))))
+ (setq menu (cons "Select Class"
+ (list
+ (append (list "")
+ (mapcar (lambda(x) (cons x x)) list)))))
+ (setq menu (idlwave-help-split-menu-emacs menu maxpopup))
+ (setq rtn (x-popup-menu ev menu))))
+ rtn))
+
+(defun idlwave-help-split-menu-xemacs (menu N)
+ "Split the MENU into submenus of maximum length N."
+ (if (<= (length menu) (1+ N))
+ ;; No splitting needed
+ menu
+ (let* ((title (car menu))
+ (entries (cdr menu))
+ (menu (list title))
+ (cnt 0)
+ (nextmenu nil))
+ (while entries
+ (while (and entries (< cnt N))
+ (setq cnt (1+ cnt)
+ nextmenu (cons (car entries) nextmenu)
+ entries (cdr entries)))
+ (setq nextmenu (nreverse nextmenu))
+ (setq nextmenu (cons (format "%s...%s"
+ (aref (car nextmenu) 0)
+ (aref (nth (1- cnt) nextmenu) 0))
+ nextmenu))
+ (setq menu (cons nextmenu menu)
+ nextmenu nil
+ cnt 0))
+ (nreverse menu))))
+
+(defun idlwave-help-split-menu-emacs (menu N)
+ "Split the MENU into submenus of maximum length N."
+ (if (<= (length (nth 1 menu)) (1+ N))
+ ;; No splitting needed
+ menu
+ (let* ((title (car menu))
+ (entries (cdr (nth 1 menu)))
+ (menu nil)
+ (cnt 0)
+ (nextmenu nil))
+ (while entries
+ (while (and entries (< cnt N))
+ (setq cnt (1+ cnt)
+ nextmenu (cons (car entries) nextmenu)
+ entries (cdr entries)))
+ (setq nextmenu (nreverse nextmenu))
+ (prin1 nextmenu)
+ (setq nextmenu (cons (format "%s...%s"
+ (car (car nextmenu))
+ (car (nth (1- cnt) nextmenu)))
+ nextmenu))
+ (setq menu (cons nextmenu menu)
+ nextmenu nil
+ cnt 0))
+ (setq menu (nreverse menu))
+ (setq menu (cons title menu))
+ menu)))
+
+(defvar rtn)
+(defun idlwave-help-pset (item)
+ (set 'rtn item))
+
+(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-is-help-topic (word)
+ "Try if this could be a help topic.
+Also checks special translation lists."
+ (setq word (downcase word))
+ (car
+ (or (assoc word idlwave-help-topics)
+ (assoc word idlwave-help-name-translations)
+ (assoc word idlwave-help-special-topic-words))))
+
+(defun idlwave-help-maybe-translate (word)
+ "Return the real topic assiciated with WORD."
+ (setq word (downcase word))
+ (or (car (assoc word idlwave-help-topics))
+ (cdr (assoc word idlwave-help-name-translations))
+ (cdr (assoc word idlwave-help-special-topic-words))))
+
+(defun idlwave-grep-help-topics (list)
+ "Return only the classis in LIST which are also help topics."
+ (delq nil (mapcar 'idlwave-is-help-topic list)))
+
+(defun idlwave-any-help-topic (list)
+ "Return the first member in LIST which is also a help topic."
+ (catch 'exit
+ (while list
+ (if (idlwave-is-help-topic (car list))
+ (throw 'exit (car list))
+ (setq list (cdr list))))))
+
+(setq idlwave-help-topics
+ '(
+ ("### idlw-help.txt --- help file for idlwave" . 0)
+ ("reference" . 539)
+ ("idl syntax" . 1476)
+ (".compile" . 13151)
+ (".continue" . 14546)
+ (".edit" . 15456)
+ (".full_reset_session" . 15933)
+ (".go" . 16861)
+ (".out" . 17128)
+ (".reset_session" . 17405)
+ (".return" . 19747)
+ (".rnew" . 20271)
+ (".run" . 22240)
+ (".skip" . 25132)
+ (".step" . 26334)
+ (".stepover" . 26878)
+ (".trace" . 27702)
+ ("a_correlate" . 28021)
+ ("abs" . 30635)
+ ("acos" . 31528)
+ ("adapt_hist_equal" . 32394)
+ ("alog" . 35609)
+ ("alog10" . 36338)
+ ("amoeba" . 36743)
+ ("annotate" . 43240)
+ ("arg_present" . 46034)
+ ("array_equal" . 47890)
+ ("arrow" . 49769)
+ ("ascii_template" . 51834)
+ ("asin" . 53421)
+ ("assoc" . 54001)
+ ("atan" . 58059)
+ ("axis" . 59363)
+ ("bar_plot" . 66135)
+ ("begin...end" . 71836)
+ ("beseli" . 74670)
+ ("beselj" . 76451)
+ ("beselk" . 78203)
+ ("besely" . 79986)
+ ("beta" . 81765)
+ ("bilinear" . 82615)
+ ("bin_date" . 85473)
+ ("binary_template" . 86583)
+ ("bindgen" . 89643)
+ ("binomial" . 90872)
+ ("blas_axpy" . 93400)
+ ("blk_con" . 95902)
+ ("box_cursor" . 97920)
+ ("break" . 99831)
+ ("breakpoint" . 100414)
+ ("broyden" . 104899)
+ ("bytarr" . 108580)
+ ("byte" . 109510)
+ ("byteorder" . 111185)
+ ("bytscl" . 117619)
+ ("c_correlate" . 120044)
+ ("caldat" . 123221)
+ ("calendar" . 126586)
+ ("call_external" . 127601)
+ ("call_function" . 159898)
+ ("call_method" . 161156)
+ ("call_procedure" . 162362)
+ ("case" . 163576)
+ ("catch" . 165841)
+ ("cd" . 169263)
+ ("cdf routines" . 173587)
+ ("chebyshev" . 174915)
+ ("check_math" . 175629)
+ ("chisqr_cvf" . 184014)
+ ("chisqr_pdf" . 185254)
+ ("choldc" . 187218)
+ ("cholsol" . 188231)
+ ("cindgen" . 189830)
+ ("cir_3pnt" . 190900)
+ ("close" . 192364)
+ ("clust_wts" . 194324)
+ ("cluster" . 196126)
+ ("color_convert" . 198920)
+ ("color_quan" . 200953)
+ ("colormap_applicable" . 207862)
+ ("comfit" . 209163)
+ ("common" . 212996)
+ ("compile_opt" . 213258)
+ ("complex" . 217712)
+ ("complexarr" . 221100)
+ ("complexround" . 222043)
+ ("compute_mesh_normals" . 222770)
+ ("cond" . 223390)
+ ("congrid" . 225107)
+ ("conj" . 229814)
+ ("constrained_min" . 230572)
+ ("continue" . 242230)
+ ("contour" . 243235)
+ ("graphics keywords accepted" . 265243)
+ ("examples" . 265807)
+ ("convert_coord" . 268043)
+ ("convol" . 271194)
+ ("coord2to3" . 278263)
+ ("correlate" . 279857)
+ ("cos" . 282137)
+ ("cosh" . 283026)
+ ("cramer" . 283850)
+ ("create_struct" . 285316)
+ ("create_view" . 287070)
+ ("crossp" . 291434)
+ ("crvlength" . 291768)
+ ("ct_luminance" . 293389)
+ ("cti_test" . 295087)
+ ("cursor" . 299084)
+ ("curvefit" . 303379)
+ ("cv_coord" . 309235)
+ ("cvttobm" . 312199)
+ ("cw_animate" . 314583)
+ ("cw_animate_getp" . 321153)
+ ("cw_animate_load" . 322921)
+ ("cw_animate_run" . 325962)
+ ("cw_arcball" . 327860)
+ ("cw_bgroup" . 333892)
+ ("keywords to widget_control and widget_info" . 340474)
+ ("widget events returned by the cw_bgroup widget" . 341511)
+ ("see also" . 341887)
+ ("cw_clr_index" . 341924)
+ ("cw_colorsel" . 345764)
+ ("cw_defroi" . 348356)
+ ("cw_field" . 352966)
+ ("cw_filesel" . 360253)
+ ("cw_form" . 366331)
+ ("cw_fslider" . 381044)
+ ("cw_light_editor" . 387213)
+ ("cw_light_editor_get" . 394348)
+ ("cw_light_editor_set" . 397610)
+ ("cw_orient" . 400553)
+ ("cw_palette_editor" . 403310)
+ ("cw_palette_editor_get" . 414553)
+ ("cw_palette_editor_set" . 415150)
+ ("cw_pdmenu" . 416116)
+ ("cw_rgbslider" . 428334)
+ ("cw_tmpl" . 433135)
+ ("cw_zoom" . 434297)
+ ("dblarr" . 442470)
+ ("dcindgen" . 443400)
+ ("dcomplex" . 444479)
+ ("dcomplexarr" . 447730)
+ ("define_key" . 448670)
+ ("defroi" . 464670)
+ ("defsysv" . 467290)
+ ("delete_symbol" . 469065)
+ ("dellog" . 469705)
+ ("delvar" . 470218)
+ ("deriv" . 470930)
+ ("derivsig" . 471604)
+ ("determ" . 472470)
+ ("device" . 474245)
+ ("dfpmin" . 480834)
+ ("dialog_message" . 484843)
+ ("dialog_pickfile" . 489330)
+ ("example" . 494511)
+ ("see also" . 494785)
+ ("dialog_printersetup" . 494806)
+ ("dialog_read_image" . 498062)
+ ("dialog_write_image" . 501416)
+ ("digital_filter" . 504234)
+ ("dilate" . 505914)
+ ("dindgen" . 515299)
+ ("dissolve" . 516319)
+ ("dist" . 517468)
+ ("dlm_load" . 518253)
+ ("dlm_register" . 518898)
+ ("do_apple_script" . 519958)
+ ("doc_library" . 521718)
+ ("double" . 525028)
+ ("draw_roi" . 526853)
+ ("efont" . 529379)
+ ("eigenql" . 531066)
+ ("eigenvec" . 534404)
+ ("elmhes" . 537476)
+ ("empty" . 538968)
+ ("enable_sysrtn" . 539564)
+ ("eof" . 542412)
+ ("eos_* routines" . 544036)
+ ("erase" . 544144)
+ ("erode" . 545428)
+ ("errorf" . 552879)
+ ("errplot" . 553730)
+ ("execute" . 555232)
+ ("exit" . 556704)
+ ("exp" . 557588)
+ ("expand" . 558537)
+ ("expand_path" . 559578)
+ ("expint" . 565896)
+ ("extrac" . 567726)
+ ("extract_slice" . 571222)
+ ("f_cvf" . 577220)
+ ("f_pdf" . 578652)
+ ("factorial" . 580496)
+ ("fft" . 582069)
+ ("file_chmod" . 589542)
+ ("file_delete" . 596495)
+ ("file_expand_path" . 598719)
+ ("file_mkdir" . 600247)
+ ("file_test" . 601350)
+ ("filepath" . 609294)
+ ("findfile" . 611760)
+ ("findgen" . 614640)
+ ("finite" . 615721)
+ ("fix" . 618881)
+ ("flick" . 622088)
+ ("float" . 622647)
+ ("floor" . 624341)
+ ("see also" . 625451)
+ ("flow3" . 625489)
+ ("fltarr" . 627319)
+ ("flush" . 628261)
+ ("for" . 628761)
+ ("format_axis_values" . 629536)
+ ("forward_function" . 630472)
+ ("free_lun" . 630902)
+ ("fstat" . 632515)
+ ("fulstr" . 638089)
+ ("funct" . 639514)
+ ("function" . 640675)
+ ("fv_test" . 640957)
+ ("fx_root" . 643632)
+ ("fz_roots" . 646470)
+ ("gamma" . 648790)
+ ("gamma_ct" . 649666)
+ ("gauss_cvf" . 650962)
+ ("gauss_pdf" . 651990)
+ ("gauss2dfit" . 653634)
+ ("gaussfit" . 658177)
+ ("gaussint" . 662099)
+ ("get_drive_list" . 663150)
+ ("get_kbrd" . 664616)
+ ("get_lun" . 666431)
+ ("get_screen_size" . 667817)
+ ("get_symbol" . 669100)
+ ("getenv" . 669803)
+ ("goto" . 675538)
+ ("grid_tps" . 677060)
+ ("grid3" . 681991)
+ ("gs_iter" . 686735)
+ ("h_eq_ct" . 690230)
+ ("h_eq_int" . 691213)
+ ("hanning" . 692750)
+ ("hdf_* routines" . 694141)
+ ("hdf_browser" . 694346)
+ ("hdf_read" . 699634)
+ ("heap_gc" . 705089)
+ ("help" . 707124)
+ ("hilbert" . 720419)
+ ("hist_2d" . 722017)
+ ("hist_equal" . 724002)
+ ("histogram" . 727689)
+ ("hls" . 736981)
+ ("hqr" . 751232)
+ ("hsv" . 753176)
+ ("ibeta" . 754500)
+ ("identity" . 757310)
+ ("idl_container object class" . 758480)
+ ("idlanroi object class" . 758569)
+ ("idlanroigroup object class" . 758653)
+ ("idlffdicom object class" . 758741)
+ ("idlffdxf object class" . 758826)
+ ("idlfflanguagecat object class" . 758909)
+ ("idlffshape object class" . 759000)
+ ("idlgr* object classes" . 759085)
+ ("if...then...else" . 759802)
+ ("igamma" . 760885)
+ ("image_cont" . 764051)
+ ("image_statistics" . 765217)
+ ("imaginary" . 769760)
+ ("indgen" . 770942)
+ ("int_2d" . 773086)
+ ("int_3d" . 777479)
+ ("int_tabulated" . 781441)
+ ("intarr" . 783829)
+ ("interpol" . 784580)
+ ("interpolate" . 787302)
+ ("invert" . 794048)
+ ("ioctl" . 795877)
+ ("ishft" . 800968)
+ ("isocontour" . 801733)
+ ("isosurface" . 808148)
+ ("journal" . 811126)
+ ("julday" . 812520)
+ ("keyword_set" . 816170)
+ ("krig2d" . 817214)
+ ("kurtosis" . 824187)
+ ("kw_test" . 825466)
+ ("l64indgen" . 829630)
+ ("label_date" . 830639)
+ ("label_region" . 836110)
+ ("ladfit" . 839140)
+ ("laguerre" . 841287)
+ ("leefilt" . 844013)
+ ("legendre" . 845719)
+ ("linbcg" . 849843)
+ ("lindgen" . 853043)
+ ("linfit" . 854060)
+ ("linkimage" . 857803)
+ ("syntax" . 860192)
+ ("arguments" . 860361)
+ ("live_contour" . 872683)
+ ("live_control" . 886512)
+ ("live_destroy" . 889737)
+ ("live_export" . 892115)
+ ("live_image" . 896410)
+ ("live_info" . 906943)
+ ("live_line" . 923909)
+ ("live_load" . 929605)
+ ("live_oplot" . 930025)
+ ("live_plot" . 937828)
+ ("live_print" . 951321)
+ ("live_rect" . 952783)
+ ("live_style" . 957611)
+ ("live_surface" . 968053)
+ ("ljlct" . 987683)
+ ("ll_arc_distance" . 988762)
+ ("lmfit" . 990480)
+ ("lmgr" . 998235)
+ ("lngamma" . 1002618)
+ ("lnp_test" . 1003252)
+ ("loadct" . 1007006)
+ ("locale_get" . 1008907)
+ ("lon64arr" . 1009110)
+ ("lonarr" . 1009875)
+ ("long" . 1010766)
+ ("long64" . 1012333)
+ ("lsode" . 1013888)
+ ("lu_complex" . 1021415)
+ ("ludc" . 1023934)
+ ("lumprove" . 1025270)
+ ("lusol" . 1027568)
+ ("m_correlate" . 1029584)
+ ("machar" . 1032694)
+ ("make_array" . 1035844)
+ ("make_dll" . 1039398)
+ ("map_2points" . 1050855)
+ ("map_continents" . 1055987)
+ ("map_grid" . 1062274)
+ ("map_image" . 1071631)
+ ("map_patch" . 1077816)
+ ("map_proj_info" . 1083755)
+ ("map_set" . 1086754)
+ ("matrix_multiply" . 1105252)
+ ("max" . 1107939)
+ ("md_test" . 1111034)
+ ("mean" . 1113420)
+ ("meanabsdev" . 1114543)
+ ("median" . 1116152)
+ ("memory" . 1118932)
+ ("mesh_clip" . 1123109)
+ ("mesh_decimate" . 1124905)
+ ("mesh_issolid" . 1128828)
+ ("mesh_merge" . 1130007)
+ ("mesh_numtriangles" . 1131498)
+ ("mesh_obj" . 1132019)
+ ("mesh_smooth" . 1144726)
+ ("mesh_surfacearea" . 1146419)
+ ("mesh_validate" . 1148134)
+ ("mesh_volume" . 1149925)
+ ("message" . 1150808)
+ ("min" . 1154160)
+ ("min_curve_surf" . 1156644)
+ ("mk_html_help" . 1164695)
+ ("modifyct" . 1169596)
+ ("moment" . 1171124)
+ ("morph_close" . 1174930)
+ ("morph_distance" . 1178982)
+ ("morph_gradient" . 1183244)
+ ("morph_hitormiss" . 1186369)
+ ("morph_open" . 1189972)
+ ("morph_thin" . 1194184)
+ ("morph_tophat" . 1195884)
+ ("mpeg_close" . 1198617)
+ ("mpeg_open" . 1199478)
+ ("mpeg_put" . 1205330)
+ ("mpeg_save" . 1207271)
+ ("msg_cat_close" . 1208502)
+ ("msg_cat_compile" . 1208810)
+ ("msg_cat_open" . 1210560)
+ ("multi" . 1212268)
+ ("n_elements" . 1213039)
+ ("n_params" . 1214401)
+ ("n_tags" . 1215128)
+ ("ncdf_* routines" . 1216822)
+ ("newton" . 1216930)
+ ("norm" . 1220602)
+ ("obj_class" . 1223196)
+ ("obj_destroy" . 1224824)
+ ("obj_isa" . 1226343)
+ ("obj_new" . 1227154)
+ ("obj_valid" . 1231207)
+ ("objarr" . 1234562)
+ ("on_error" . 1235753)
+ ("on_ioerror" . 1236746)
+ ("online_help" . 1238136)
+ ("open" . 1242442)
+ ("oplot" . 1265115)
+ ("oploterr" . 1268777)
+ ("p_correlate" . 1269727)
+ ("particle_trace" . 1271476)
+ ("pcomp" . 1275345)
+ ("plot" . 1281098)
+ ("plot_3dbox" . 1287958)
+ ("plot_field" . 1292191)
+ ("ploterr" . 1293670)
+ ("plots" . 1294675)
+ ("pnt_line" . 1298221)
+ ("point_lun" . 1299827)
+ ("polar_contour" . 1303040)
+ ("polar_surface" . 1305820)
+ ("poly" . 1308526)
+ ("poly_2d" . 1309107)
+ ("poly_area" . 1315252)
+ ("poly_fit" . 1316715)
+ ("polyfill" . 1322078)
+ ("polyfillv" . 1329135)
+ ("polyshade" . 1332078)
+ ("polywarp" . 1338568)
+ ("popd" . 1341804)
+ ("powell" . 1342505)
+ ("primes" . 1346107)
+ ("print/printf" . 1346857)
+ ("printd" . 1350561)
+ ("pro" . 1351083)
+ ("profile" . 1351908)
+ ("profiler" . 1353971)
+ ("profiles" . 1356801)
+ ("project_vol" . 1358942)
+ ("ps_show_fonts" . 1363308)
+ ("psafm" . 1364164)
+ ("pseudo" . 1365014)
+ ("ptr_free" . 1366492)
+ ("ptr_new" . 1367695)
+ ("ptr_valid" . 1369385)
+ ("ptrarr" . 1372574)
+ ("pushd" . 1374196)
+ ("qromb" . 1375035)
+ ("qromo" . 1377635)
+ ("qsimp" . 1381290)
+ ("query_* routines" . 1384103)
+ ("query_bmp" . 1387048)
+ ("query_dicom" . 1387923)
+ ("query_image" . 1389595)
+ ("query_jpeg" . 1393658)
+ ("query_pict" . 1394505)
+ ("query_png" . 1395357)
+ ("query_ppm" . 1397153)
+ ("query_srf" . 1398215)
+ ("query_tiff" . 1399059)
+ ("query_wav" . 1401221)
+ ("r_correlate" . 1402349)
+ ("r_test" . 1405781)
+ ("radon" . 1408097)
+ ("randomn" . 1423183)
+ ("randomu" . 1431232)
+ ("ranks" . 1438871)
+ ("rdpix" . 1440851)
+ ("read/readf" . 1441907)
+ ("read_ascii" . 1446842)
+ ("read_binary" . 1451566)
+ ("read_bmp" . 1454707)
+ ("read_dicom" . 1457750)
+ ("read_image" . 1459055)
+ ("read_interfile" . 1460420)
+ ("read_jpeg" . 1461759)
+ ("read_pict" . 1468134)
+ ("read_png" . 1469562)
+ ("read_ppm" . 1473071)
+ ("read_spr" . 1474867)
+ ("read_srf" . 1475879)
+ ("read_sylk" . 1477377)
+ ("read_tiff" . 1482497)
+ ("read_wav" . 1495578)
+ ("read_wave" . 1496407)
+ ("read_x11_bitmap" . 1498639)
+ ("read_xwd" . 1500317)
+ ("reads" . 1501691)
+ ("readu" . 1504088)
+ ("rebin" . 1507551)
+ ("recall_commands" . 1511517)
+ ("recon3" . 1512141)
+ ("reduce_colors" . 1522784)
+ ("reform" . 1524189)
+ ("regress" . 1526447)
+ ("repeat...until" . 1532830)
+ ("replicate" . 1533747)
+ ("replicate_inplace" . 1535015)
+ ("resolve_all" . 1537221)
+ ("resolve_routine" . 1539481)
+ ("restore" . 1541229)
+ ("retall" . 1544696)
+ ("return" . 1544989)
+ ("reverse" . 1547544)
+ ("rewind" . 1549360)
+ ("rk4" . 1549893)
+ ("roberts" . 1552163)
+ ("rot" . 1553757)
+ ("rotate" . 1557733)
+ ("round" . 1561187)
+ ("routine_info" . 1562480)
+ ("rs_test" . 1567144)
+ ("s_test" . 1570562)
+ ("save" . 1572502)
+ ("savgol" . 1576238)
+ ("scale3" . 1581599)
+ ("scale3d" . 1583203)
+ ("search2d" . 1583966)
+ ("search3d" . 1588960)
+ ("set_plot" . 1594341)
+ ("set_shading" . 1597397)
+ ("set_symbol" . 1600228)
+ ("setenv" . 1600959)
+ ("setlog" . 1601936)
+ ("setup_keys" . 1603640)
+ ("sfit" . 1607596)
+ ("shade_surf" . 1609555)
+ ("shade_surf_irr" . 1618863)
+ ("shade_volume" . 1621614)
+ ("shift" . 1627244)
+ ("show3" . 1629295)
+ ("showfont" . 1632001)
+ ("sin" . 1633654)
+ ("sindgen" . 1634782)
+ ("sinh" . 1635827)
+ ("size" . 1636929)
+ ("skewness" . 1643430)
+ ("skipf" . 1644680)
+ ("slicer3" . 1646193)
+ ("slide_image" . 1670427)
+ ("smooth" . 1677045)
+ ("sobel" . 1682373)
+ ("socket" . 1684206)
+ ("sort" . 1691492)
+ ("spawn" . 1693572)
+ ("sph_4pnt" . 1708332)
+ ("sph_scat" . 1709830)
+ ("spher_harm" . 1713264)
+ ("spl_init" . 1717507)
+ ("spl_interp" . 1720122)
+ ("spline" . 1722390)
+ ("spline_p" . 1723643)
+ ("sprsab" . 1726475)
+ ("sprsax" . 1729282)
+ ("sprsin" . 1730553)
+ ("sprstp" . 1734235)
+ ("sqrt" . 1735028)
+ ("standardize" . 1736038)
+ ("stddev" . 1738715)
+ ("stop" . 1739750)
+ ("strarr" . 1740545)
+ ("strcmp" . 1741217)
+ ("strcompress" . 1742965)
+ ("streamline" . 1743963)
+ ("stregex" . 1746201)
+ ("stretch" . 1752291)
+ ("string" . 1754329)
+ ("strjoin" . 1759071)
+ ("strlen" . 1760131)
+ ("strlowcase" . 1760963)
+ ("strmatch" . 1761806)
+ ("strmessage" . 1765092)
+ ("strmid" . 1766490)
+ ("strpos" . 1769186)
+ ("strput" . 1772360)
+ ("strsplit" . 1774066)
+ ("strtrim" . 1780209)
+ ("struct_assign" . 1781645)
+ ("struct_hide" . 1785296)
+ ("strupcase" . 1787991)
+ ("surface" . 1788784)
+ ("surfr" . 1798798)
+ ("svdc" . 1799522)
+ ("svdfit" . 1802698)
+ ("svsol" . 1809912)
+ ("swap_endian" . 1812366)
+ ("switch" . 1813284)
+ ("systime" . 1815708)
+ ("t_cvf" . 1819880)
+ ("t_pdf" . 1821113)
+ ("t3d" . 1822728)
+ ("tag_names" . 1826610)
+ ("tan" . 1828054)
+ ("tanh" . 1828792)
+ ("taprd" . 1829888)
+ ("tapwrt" . 1831485)
+ ("tek_color" . 1832817)
+ ("temporary" . 1833609)
+ ("tetra_clip" . 1834681)
+ ("tetra_surface" . 1836566)
+ ("tetra_volume" . 1837231)
+ ("thin" . 1838875)
+ ("threed" . 1841198)
+ ("time_test2" . 1842212)
+ ("timegen" . 1843093)
+ ("tm_test" . 1852126)
+ ("total" . 1855266)
+ ("trace" . 1858663)
+ ("trackball object" . 1859519)
+ ("transpose" . 1859597)
+ ("tri_surf" . 1861451)
+ ("triangulate" . 1867138)
+ ("trigrid" . 1873332)
+ ("triql" . 1886194)
+ ("trired" . 1888806)
+ ("trisol" . 1889914)
+ ("trnlog" . 1892304)
+ ("ts_coef" . 1895740)
+ ("ts_diff" . 1897273)
+ ("ts_fcast" . 1898696)
+ ("ts_smooth" . 1901134)
+ ("tv" . 1904249)
+ ("tvcrs" . 1911137)
+ ("tvlct" . 1913415)
+ ("tvrd" . 1917417)
+ ("tvscl" . 1923810)
+ ("uindgen" . 1926876)
+ ("uint" . 1927890)
+ ("uintarr" . 1929577)
+ ("ul64indgen" . 1930482)
+ ("ulindgen" . 1931515)
+ ("ulon64arr" . 1932531)
+ ("ulonarr" . 1933463)
+ ("ulong" . 1934397)
+ ("ulong64" . 1935996)
+ ("uniq" . 1937726)
+ ("usersym" . 1939644)
+ ("value_locate" . 1941536)
+ ("variance" . 1943922)
+ ("vax_float" . 1945216)
+ ("vector_field" . 1947687)
+ ("vel" . 1949494)
+ ("velovect" . 1951100)
+ ("vert_t3d" . 1953823)
+ ("voigt" . 1956595)
+ ("voronoi" . 1958855)
+ ("voxel_proj" . 1961304)
+ ("wait" . 1971041)
+ ("warp_tri" . 1971656)
+ ("watershed" . 1973921)
+ ("wdelete" . 1977624)
+ ("weof" . 1978496)
+ ("wf_draw" . 1979122)
+ ("where" . 1983517)
+ ("while...do" . 1989020)
+ ("widget_base" . 1989752)
+ ("widget_button" . 2037186)
+ ("widget_control" . 2056882)
+ ("widget_draw" . 2117983)
+ ("widget_droplist" . 2143969)
+ ("widget_event" . 2158751)
+ ("widget_info" . 2165038)
+ ("widget_label" . 2186521)
+ ("widget_list" . 2198925)
+ ("widget_slider" . 2214980)
+ ("widget_table" . 2231579)
+ ("widget_text" . 2262181)
+ ("window" . 2281635)
+ ("write_bmp" . 2287417)
+ ("write_image" . 2290729)
+ ("write_jpeg" . 2292100)
+ ("write_nrif" . 2297705)
+ ("write_pict" . 2299868)
+ ("write_png" . 2301220)
+ ("write_ppm" . 2304585)
+ ("write_spr" . 2305834)
+ ("write_srf" . 2306627)
+ ("write_sylk" . 2308689)
+ ("write_tiff" . 2310633)
+ ("write_wav" . 2322235)
+ ("write_wave" . 2323025)
+ ("writeu" . 2324623)
+ ("wset" . 2327042)
+ ("wshow" . 2328751)
+ ("wtn" . 2329900)
+ ("xbm_edit" . 2336392)
+ ("xdisplayfile" . 2339109)
+ ("xdxf" . 2342873)
+ ("xfont" . 2346783)
+ ("xinteranimate" . 2347872)
+ ("xloadct" . 2360122)
+ ("xmanager" . 2363823)
+ ("xmng_tmpl" . 2381473)
+ ("xmtool" . 2383196)
+ ("xobjview" . 2384540)
+ ("xpalette" . 2398767)
+ ("xpcolor" . 2405599)
+ ("xplot3d" . 2407026)
+ ("xregistered" . 2416315)
+ ("xroi" . 2417903)
+ ("xsq_test" . 2435729)
+ ("xsurface" . 2439394)
+ ("xvaredit" . 2441301)
+ ("xvolume" . 2442767)
+ ("xvolume_rotate" . 2452633)
+ ("xvolume_write_image" . 2455476)
+ ("xyouts" . 2456629)
+ ("zoom" . 2462694)
+ ("zoom_24" . 2465276)
+ ("idl_container" . 2473579)
+ ("idl_container::add" . 2474368)
+ ("idl_container::cleanup" . 2475117)
+ ("idl_container::count" . 2475832)
+ ("idl_container::get" . 2476084)
+ ("idl_container::init" . 2477564)
+ ("idl_container::iscontained" . 2478300)
+ ("idl_container::move" . 2478960)
+ ("idl_container::remove" . 2480051)
+ ("idlanroi" . 2480878)
+ ("idlanroi::appenddata" . 2482033)
+ ("idlanroi::cleanup" . 2484901)
+ ("idlanroi::computegeometry" . 2485632)
+ ("idlanroi::computemask" . 2488343)
+ ("idlanroi::containspoints" . 2492185)
+ ("idlanroi::getproperty" . 2493876)
+ ("idlanroi::init" . 2495800)
+ ("idlanroi::removedata" . 2500371)
+ ("idlanroi::replacedata" . 2502248)
+ ("idlanroi::rotate" . 2506896)
+ ("idlanroi::scale" . 2507615)
+ ("idlanroi::setproperty" . 2508420)
+ ("idlanroi::translate" . 2508769)
+ ("idlanroigroup" . 2509614)
+ ("idlanroigroup::add" . 2510564)
+ ("idlanroigroup::cleanup" . 2511145)
+ ("idlanroigroup::computemask" . 2511889)
+ ("idlanroigroup::computemesh" . 2515601)
+ ("idlanroigroup::containspoints" . 2518753)
+ ("idlanroigroup::getproperty" . 2521247)
+ ("idlanroigroup::init" . 2522971)
+ ("idlanroigroup::rotate" . 2523700)
+ ("idlanroigroup::scale" . 2524465)
+ ("idlanroigroup::translate" . 2525285)
+ ("idlffdicom" . 2526159)
+ ("idlffdicom::cleanup" . 2535570)
+ ("idlffdicom::dumpelements" . 2536674)
+ ("idlffdicom::getchildren" . 2537837)
+ ("idlffdicom::getdescription" . 2539569)
+ ("idlffdicom::getelement" . 2541514)
+ ("idlffdicom::getgroup" . 2543468)
+ ("idlffdicom::getlength" . 2545373)
+ ("idlffdicom::getparent" . 2547149)
+ ("idlffdicom::getpreamble" . 2548660)
+ ("idlffdicom::getreference" . 2549425)
+ ("idlffdicom::getvalue" . 2552040)
+ ("idlffdicom::getvr" . 2555933)
+ ("idlffdicom::init" . 2557719)
+ ("idlffdicom::read" . 2559008)
+ ("idlffdicom::reset" . 2559975)
+ ("idlffdxf" . 2560544)
+ ("idlffdxf::cleanup" . 2563525)
+ ("idlffdxf::getcontents" . 2564229)
+ ("idlffdxf::getentity" . 2567642)
+ ("idlffdxf::getpalette" . 2581797)
+ ("idlffdxf::init" . 2582258)
+ ("idlffdxf::putentity" . 2583140)
+ ("idlffdxf::read" . 2584062)
+ ("idlffdxf::removeentity" . 2584865)
+ ("idlffdxf::reset" . 2585549)
+ ("idlffdxf::setpalette" . 2585740)
+ ("idlffdxf::write" . 2586218)
+ ("idlfflanguagecat" . 2587739)
+ ("idlfflanguagecat::isvalid" . 2588456)
+ ("idlfflanguagecat::query" . 2588719)
+ ("idlfflanguagecat::setcatalog" . 2589473)
+ ("idlffshape" . 2590454)
+ ("idlffshape::addattribute" . 2607158)
+ ("idlffshape::cleanup" . 2609732)
+ ("idlffshape::close" . 2610879)
+ ("idlffshape::destroyentity" . 2611530)
+ ("idlffshape::getattributes" . 2612797)
+ ("idlffshape::getentity" . 2614554)
+ ("idlffshape::getproperty" . 2617165)
+ ("idlffshape::init" . 2621861)
+ ("idlffshape::open" . 2623701)
+ ("idlffshape::putentity" . 2624923)
+ ("idlffshape::setattributes" . 2626928)
+ ("idlgraxis" . 2630338)
+ ("idlgraxis::cleanup" . 2631054)
+ ("idlgraxis::getctm" . 2631770)
+ ("idlgraxis::getproperty" . 2633875)
+ ("idlgraxis::init" . 2636320)
+ ("idlgraxis::setproperty" . 2659052)
+ ("idlgrbuffer" . 2659404)
+ ("idlgrbuffer::cleanup" . 2660648)
+ ("idlgrbuffer::draw" . 2661388)
+ ("idlgrbuffer::erase" . 2662776)
+ ("idlgrbuffer::getcontiguouspixels" . 2663174)
+ ("idlgrbuffer::getdeviceinfo" . 2664347)
+ ("idlgrbuffer::getfontnames" . 2666797)
+ ("idlgrbuffer::getproperty" . 2668759)
+ ("idlgrbuffer::gettextdimensions" . 2670406)
+ ("idlgrbuffer::init" . 2672532)
+ ("idlgrbuffer::pickdata" . 2676554)
+ ("idlgrbuffer::read" . 2680010)
+ ("idlgrbuffer::select" . 2680304)
+ ("idlgrbuffer::setproperty" . 2682729)
+ ("idlgrclipboard" . 2683099)
+ ("idlgrclipboard::cleanup" . 2684212)
+ ("idlgrclipboard::draw" . 2684930)
+ ("idlgrclipboard::getcontiguouspixels" . 2687166)
+ ("idlgrclipboard::getdeviceinfo" . 2688352)
+ ("idlgrclipboard::getfontnames" . 2690730)
+ ("idlgrclipboard::getproperty" . 2692608)
+ ("idlgrclipboard::gettextdimensions" . 2693581)
+ ("idlgrclipboard::init" . 2695650)
+ ("idlgrclipboard::setproperty" . 2699875)
+ ("idlgrcolorbar" . 2700270)
+ ("idlgrcolorbar::cleanup" . 2701385)
+ ("idlgrcolorbar::computedimensions" . 2702100)
+ ("idlgrcolorbar::getproperty" . 2703750)
+ ("idlgrcolorbar::init" . 2705692)
+ ("idlgrcolorbar::setproperty" . 2716865)
+ ("idlgrcontour" . 2717247)
+ ("idlgrcontour::cleanup" . 2718268)
+ ("idlgrcontour::getctm" . 2718981)
+ ("idlgrcontour::getproperty" . 2721098)
+ ("idlgrcontour::init" . 2724664)
+ ("idlgrcontour::setproperty" . 2744918)
+ ("idlgrfont" . 2746856)
+ ("idlgrfont::cleanup" . 2747346)
+ ("idlgrfont::getproperty" . 2748062)
+ ("idlgrfont::init" . 2748973)
+ ("idlgrfont::setproperty" . 2752561)
+ ("idlgrimage" . 2752923)
+ ("idlgrimage::cleanup" . 2755202)
+ ("idlgrimage::getctm" . 2755909)
+ ("idlgrimage::getproperty" . 2758086)
+ ("idlgrimage::init" . 2760078)
+ ("idlgrimage::setproperty" . 2773698)
+ ("idlgrlegend" . 2774058)
+ ("idlgrlegend::cleanup" . 2775791)
+ ("idlgrlegend::computedimensions" . 2776513)
+ ("idlgrlegend::getproperty" . 2778146)
+ ("idlgrlegend::init" . 2780039)
+ ("idlgrlegend::setproperty" . 2790163)
+ ("idlgrlight" . 2790883)
+ ("idlgrlight::cleanup" . 2791794)
+ ("idlgrlight::getctm" . 2792522)
+ ("idlgrlight::getproperty" . 2794659)
+ ("idlgrlight::init" . 2795757)
+ ("idlgrlight::setproperty" . 2803418)
+ ("idlgrmodel" . 2803787)
+ ("idlgrmodel::add" . 2804968)
+ ("idlgrmodel::cleanup" . 2805969)
+ ("idlgrmodel::draw" . 2806697)
+ ("idlgrmodel::getbyname" . 2807667)
+ ("idlgrmodel::getctm" . 2809180)
+ ("idlgrmodel::getproperty" . 2811317)
+ ("idlgrmodel::init" . 2812225)
+ ("idlgrmodel::reset" . 2815821)
+ ("idlgrmodel::rotate" . 2816240)
+ ("idlgrmodel::scale" . 2817048)
+ ("idlgrmodel::setproperty" . 2817739)
+ ("idlgrmodel::translate" . 2818097)
+ ("idlgrmpeg" . 2818850)
+ ("idlgrmpeg::cleanup" . 2819654)
+ ("idlgrmpeg::getproperty" . 2820370)
+ ("idlgrmpeg::init" . 2821014)
+ ("idlgrmpeg::put" . 2830103)
+ ("idlgrmpeg::save" . 2831145)
+ ("idlgrmpeg::setproperty" . 2832038)
+ ("idlgrpalette" . 2832403)
+ ("idlgrpalette::cleanup" . 2833064)
+ ("idlgrpalette::getrgb" . 2833777)
+ ("idlgrpalette::getproperty" . 2834437)
+ ("idlgrpalette::init" . 2835541)
+ ("idlgrpalette::loadct" . 2839554)
+ ("idlgrpalette::nearestcolor" . 2840158)
+ ("idlgrpalette::setrgb" . 2840912)
+ ("idlgrpalette::setproperty" . 2841528)
+ ("idlgrpattern" . 2841917)
+ ("idlgrpattern::cleanup" . 2842554)
+ ("idlgrpattern::getproperty" . 2843306)
+ ("idlgrpattern::init" . 2844236)
+ ("idlgrplot" . 2848505)
+ ("idlgrplot::cleanup" . 2849205)
+ ("idlgrplot::getctm" . 2849915)
+ ("idlgrplot::getproperty" . 2852041)
+ ("idlgrplot::init" . 2853842)
+ ("idlgrplot::setproperty" . 2866899)
+ ("idlgrpolygon" . 2867253)
+ ("idlgrpolygon::cleanup" . 2868257)
+ ("idlgrpolygon::getctm" . 2868970)
+ ("idlgrpolygon::getproperty" . 2871142)
+ ("idlgrpolygon::init" . 2873313)
+ ("idlgrpolygon::setproperty" . 2893530)
+ ("idlgrpolyline" . 2893903)
+ ("idlgrpolyline::cleanup" . 2894665)
+ ("idlgrpolyline::getctm" . 2895381)
+ ("idlgrpolyline::getproperty" . 2897534)
+ ("idlgrpolyline::init" . 2899675)
+ ("idlgrpolyline::setproperty" . 2911673)
+ ("idlgrprinter" . 2912054)
+ ("idlgrprinter::cleanup" . 2913073)
+ ("idlgrprinter::draw" . 2914014)
+ ("idlgrprinter::getcontiguouspixels" . 2915368)
+ ("idlgrprinter::getfontnames" . 2916599)
+ ("idlgrprinter::getproperty" . 2918477)
+ ("idlgrprinter::gettextdimensions" . 2920257)
+ ("idlgrprinter::init" . 2922402)
+ ("idlgrprinter::newdocument" . 2928014)
+ ("idlgrprinter::newpage" . 2928357)
+ ("idlgrprinter::setproperty" . 2928591)
+ ("idlgrroi" . 2928961)
+ ("idlgrroi::cleanup" . 2929780)
+ ("idlgrroi::getproperty" . 2930512)
+ ("idlgrroi::init" . 2932523)
+ ("idlgrroi::pickvertex" . 2940290)
+ ("idlgrroi::setproperty" . 2941824)
+ ("idlgrroigroup" . 2942320)
+ ("idlgrroigroup::add" . 2943161)
+ ("idlgrroigroup::cleanup" . 2943740)
+ ("idlgrroigroup::getproperty" . 2944507)
+ ("idlgrroigroup::init" . 2946544)
+ ("idlgrroigroup::pickregion" . 2949413)
+ ("idlgrroigroup::setproperty" . 2950988)
+ ("idlgrscene" . 2951384)
+ ("idlgrscene::add" . 2952181)
+ ("idlgrscene::cleanup" . 2952759)
+ ("idlgrscene::getbyname" . 2953487)
+ ("idlgrscene::getproperty" . 2954964)
+ ("idlgrscene::init" . 2955882)
+ ("idlgrscene::setproperty" . 2958251)
+ ("idlgrsurface" . 2958610)
+ ("idlgrsurface::cleanup" . 2959325)
+ ("idlgrsurface::getctm" . 2960038)
+ ("idlgrsurface::getproperty" . 2962184)
+ ("idlgrsurface::init" . 2964448)
+ ("idlgrsurface::setproperty" . 2984949)
+ ("idlgrsymbol" . 2985322)
+ ("idlgrsymbol::cleanup" . 2985879)
+ ("idlgrsymbol::getproperty" . 2986601)
+ ("idlgrsymbol::init" . 2987525)
+ ("idlgrsymbol::setproperty" . 2991450)
+ ("idlgrtessellator" . 2991814)
+ ("idlgrtessellator::addpolygon" . 2993472)
+ ("idlgrtessellator::cleanup" . 2995172)
+ ("idlgrtessellator::init" . 2995896)
+ ("idlgrtessellator::reset" . 2996627)
+ ("idlgrtessellator::tessellate" . 2996968)
+ ("idlgrtext" . 2998369)
+ ("idlgrtext::cleanup" . 2999649)
+ ("idlgrtext::getctm" . 3000365)
+ ("idlgrtext::getproperty" . 3002491)
+ ("idlgrtext::init" . 3004917)
+ ("idlgrtext::setproperty" . 3016133)
+ ("idlgrview" . 3016485)
+ ("idlgrview::add" . 3017289)
+ ("idlgrview::cleanup" . 3017691)
+ ("idlgrview::getbyname" . 3018407)
+ ("idlgrview::getproperty" . 3019828)
+ ("idlgrview::init" . 3020949)
+ ("idlgrview::setproperty" . 3029273)
+ ("idlgrviewgroup" . 3029627)
+ ("idlgrviewgroup::add" . 3030760)
+ ("idlgrviewgroup::cleanup" . 3031510)
+ ("idlgrviewgroup::getbyname" . 3032234)
+ ("idlgrviewgroup::getproperty" . 3033667)
+ ("idlgrviewgroup::init" . 3034523)
+ ("idlgrviewgroup::setproperty" . 3036176)
+ ("idlgrvolume" . 3036567)
+ ("idlgrvolume::cleanup" . 3037447)
+ ("idlgrvolume::computebounds" . 3038185)
+ ("idlgrvolume::getctm" . 3039386)
+ ("idlgrvolume::getproperty" . 3041607)
+ ("idlgrvolume::init" . 3043958)
+ ("idlgrvolume::pickvoxel" . 3060232)
+ ("idlgrvolume::setproperty" . 3061794)
+ ("idlgrvrml" . 3062158)
+ ("idlgrvrml::cleanup" . 3065409)
+ ("idlgrvrml::draw" . 3066113)
+ ("idlgrvrml::getdeviceinfo" . 3066482)
+ ("idlgrvrml::getfontnames" . 3068859)
+ ("idlgrvrml::getproperty" . 3070728)
+ ("idlgrvrml::gettextdimensions" . 3071766)
+ ("idlgrvrml::init" . 3073804)
+ ("idlgrvrml::setproperty" . 3078331)
+ ("idlgrwindow" . 3078695)
+ ("idlgrwindow::cleanup" . 3080115)
+ ("idlgrwindow::draw" . 3080837)
+ ("idlgrwindow::erase" . 3082220)
+ ("idlgrwindow::getcontiguouspixels" . 3082656)
+ ("idlgrwindow::getdeviceinfo" . 3083829)
+ ("idlgrwindow::getfontnames" . 3086201)
+ ("idlgrwindow::getproperty" . 3088078)
+ ("idlgrwindow::gettextdimensions" . 3090472)
+ ("idlgrwindow::iconify" . 3092494)
+ ("idlgrwindow::init" . 3093372)
+ ("idlgrwindow::pickdata" . 3102311)
+ ("idlgrwindow::read" . 3105149)
+ ("idlgrwindow::select" . 3105429)
+ ("idlgrwindow::setcurrentcursor" . 3107801)
+ ("idlgrwindow::setproperty" . 3109967)
+ ("idlgrwindow::show" . 3110331)
+ ("trackball" . 3110646)
+ ("trackball::init" . 3111406)
+ ("trackball::reset" . 3113100)
+ ("trackball::update" . 3114572)
+ ("supported devices" . 3119039)
+ ("keywords accepted by the idl devices" . 3121015)
+ ("window systems" . 3205928)
+ ("printing graphics output files" . 3213514)
+ ("the cgm device" . 3220728)
+ ("the hp-gl device" . 3224165)
+ ("the lj device" . 3227974)
+ ("the macintosh display device" . 3235007)
+ ("the metafile display device" . 3235714)
+ ("the null display device" . 3237558)
+ ("the pcl device" . 3237825)
+ ("the printer device" . 3241355)
+ ("the postscript device" . 3242565)
+ ("the regis terminal device" . 3261928)
+ ("the tektronix device" . 3263935)
+ ("the microsoft windows device" . 3269040)
+ ("the x windows device" . 3269786)
+ ("the z-buffer device" . 3288369)
+ ("graphics keywords" . 3295987)
+ ("system variables" . 3328787)
+ ("idl operators" . 3386933)
+ ("reserved words" . 3405930)
+ ("fonts" . 3407247)
+ ("overview" . 3407909)
+ ("fonts in idl direct vs. object graphics" . 3409610)
+ ("about vector fonts" . 3411328)
+ ("about truetype fonts" . 3416492)
+ ("about device fonts" . 3427493)
+ ("choosing a font type" . 3441764)
+ ("embedded formatting commands" . 3446157)
+ ("formatting command examples" . 3452624)
+ ("truetype font samples" . 3457408)
+ ("vector font samples" . 3458339)
+ ("formats overview" . 3477526)
+ ("supports cdf v2.6r7. note that cdf v2.6 files" . 3481568)
+ ("variables and attributes" . 3481958)
+ ("cdf file options" . 3486138)
+ ("creating cdf files" . 3487723)
+ ("alphabetical listing of cdf routines" . 3491495)
+ ("cdf_attcreate" . 3491618)
+ ("cdf_attdelete" . 3492646)
+ ("cdf_attexists" . 3495320)
+ ("cdf_attget" . 3497882)
+ ("cdf_attinq" . 3500615)
+ ("cdf_attnum" . 3501882)
+ ("cdf_attput" . 3502372)
+ ("cdf_attrename" . 3507081)
+ ("cdf_close" . 3507661)
+ ("cdf_compression" . 3508359)
+ ("cdf_control" . 3514865)
+ ("cdf_create" . 3527602)
+ ("cdf_delete" . 3536192)
+ ("cdf_doc" . 3536717)
+ ("cdf_encode_epoch" . 3537916)
+ ("cdf_epoch" . 3540465)
+ ("cdf_error" . 3543405)
+ ("cdf_exists" . 3543670)
+ ("cdf_inquire" . 3544238)
+ ("cdf_lib_info" . 3547567)
+ ("cdf_open" . 3549359)
+ ("cdf_parse_epoch" . 3550016)
+ ("cdf_varcreate" . 3551494)
+ ("cdf_vardelete" . 3557671)
+ ("cdf_varget" . 3560524)
+ ("cdf_varget1" . 3564943)
+ ("cdf_varinq" . 3566456)
+ ("cdf_varnum" . 3568615)
+ ("cdf_varput" . 3569353)
+ ("cdf_varrename" . 3571835)
+ ("supports hdf 4.1r3. the following" . 3572778)
+ ("hdf interfaces" . 3573089)
+ ("creating hdf files" . 3576399)
+ ("hdf scientific dataset id numbers" . 3578880)
+ ("alphabetical listing of hdf routines" . 3584538)
+ ("hdf_an_annlen" . 3585062)
+ ("hdf_an_annlist" . 3585477)
+ ("hdf_an_atype2tag" . 3586450)
+ ("hdf_an_create" . 3587419)
+ ("hdf_an_createf" . 3588596)
+ ("hdf_an_end" . 3589554)
+ ("hdf_an_endaccess" . 3589923)
+ ("hdf_an_fileinfo" . 3590343)
+ ("hdf_an_get_tagref" . 3591628)
+ ("hdf_an_id2tagref" . 3593186)
+ ("hdf_an_numann" . 3594037)
+ ("hdf_an_readann" . 3595598)
+ ("hdf_an_select" . 3596385)
+ ("hdf_an_start" . 3597296)
+ ("hdf_an_tag2atype" . 3597994)
+ ("hdf_an_tagref2id" . 3598942)
+ ("hdf_an_writeann" . 3599647)
+ ("hdf_browser" . 3600549)
+ ("hdf_close" . 3600609)
+ ("hdf_deldd" . 3600890)
+ ("hdf_df24_addimage" . 3601278)
+ ("hdf_df24_getimage" . 3604365)
+ ("hdf_df24_getinfo" . 3605259)
+ ("hdf_df24_lastref" . 3606720)
+ ("hdf_df24_nimages" . 3608098)
+ ("hdf_df24_readref" . 3608939)
+ ("hdf_df24_restart" . 3609313)
+ ("hdf_dfan_addfds" . 3609502)
+ ("hdf_dfan_addfid" . 3609852)
+ ("hdf_dfan_getdesc" . 3611126)
+ ("hdf_dfan_getfds" . 3612907)
+ ("hdf_dfan_getfid" . 3614953)
+ ("hdf_dfan_getlabel" . 3615589)
+ ("hdf_dfan_lablist" . 3616619)
+ ("hdf_dfan_lastref" . 3618980)
+ ("hdf_dfan_putdesc" . 3619180)
+ ("hdf_dfan_putlabel" . 3620326)
+ ("hdf_dfp_addpal" . 3621439)
+ ("hdf_dfp_getpal" . 3621821)
+ ("hdf_dfp_lastref" . 3622148)
+ ("hdf_dfp_npals" . 3622345)
+ ("hdf_dfp_putpal" . 3622678)
+ ("hdf_dfp_readref" . 3624658)
+ ("hdf_dfp_restart" . 3625021)
+ ("hdf_dfp_writeref" . 3625201)
+ ("hdf_dfr8_addimage" . 3625685)
+ ("hdf_dfr8_getimage" . 3629933)
+ ("hdf_dfr8_getinfo" . 3630503)
+ ("hdf_dfr8_lastref" . 3631777)
+ ("hdf_dfr8_nimages" . 3633080)
+ ("hdf_dfr8_putimage" . 3633767)
+ ("hdf_dfr8_readref" . 3637527)
+ ("hdf_dfr8_restart" . 3637901)
+ ("hdf_dfr8_setpalette" . 3638088)
+ ("hdf_dupdd" . 3638646)
+ ("hdf_exists" . 3639207)
+ ("hdf_gr_attrinfo" . 3639740)
+ ("hdf_gr_create" . 3641157)
+ ("hdf_gr_end" . 3643058)
+ ("hdf_gr_endaccess" . 3643995)
+ ("hdf_gr_fileinfo" . 3644547)
+ ("hdf_gr_findattr" . 3645728)
+ ("hdf_gr_getattr" . 3646434)
+ ("hdf_gr_getchunkinfo" . 3647737)
+ ("hdf_gr_getiminfo" . 3649046)
+ ("hdf_gr_getlutid" . 3650628)
+ ("hdf_gr_getlutinfo" . 3651219)
+ ("hdf_gr_idtoref" . 3652350)
+ ("hdf_gr_luttoref" . 3652916)
+ ("hdf_gr_nametoindex" . 3653422)
+ ("hdf_gr_readimage" . 3654001)
+ ("hdf_gr_readlut" . 3656417)
+ ("hdf_gr_reftoindex" . 3657065)
+ ("hdf_gr_select" . 3657495)
+ ("hdf_gr_setattr" . 3658112)
+ ("hdf_gr_setchunk" . 3659980)
+ ("hdf_gr_setchunkcache" . 3661325)
+ ("hdf_gr_setcompress" . 3662004)
+ ("hdf_gr_setexternalfile" . 3662921)
+ ("hdf_gr_start" . 3664016)
+ ("hdf_gr_writeimage" . 3664899)
+ ("hdf_gr_writelut" . 3667885)
+ ("hdf_hdf2idltype" . 3669231)
+ ("hdf_idl2hdftype" . 3669799)
+ ("hdf_ishdf" . 3670400)
+ ("hdf_lib_info" . 3671043)
+ ("hdf_newref" . 3673860)
+ ("hdf_number" . 3674122)
+ ("hdf_open" . 3674809)
+ ("hdf_packdata" . 3676149)
+ ("hdf_read" . 3679367)
+ ("hdf_sd_adddata" . 3679423)
+ ("hdf_sd_attrfind" . 3683049)
+ ("hdf_sd_attrinfo" . 3684582)
+ ("hdf_sd_attrset" . 3687502)
+ ("hdf_sd_create" . 3692837)
+ ("hdf_sd_dimget" . 3697611)
+ ("hdf_sd_dimgetid" . 3699365)
+ ("hdf_sd_dimset" . 3700048)
+ ("hdf_sd_end" . 3703232)
+ ("hdf_sd_endaccess" . 3704325)
+ ("hdf_sd_fileinfo" . 3705292)
+ ("hdf_sd_getdata" . 3706647)
+ ("hdf_sd_getinfo" . 3708121)
+ ("hdf_sd_idtoref" . 3712225)
+ ("hdf_sd_iscoordvar" . 3713773)
+ ("hdf_sd_nametoindex" . 3714115)
+ ("hdf_sd_reftoindex" . 3715045)
+ ("hdf_sd_select" . 3715897)
+ ("hdf_sd_setcompress" . 3716932)
+ ("hdf_sd_setextfile" . 3719358)
+ ("hdf_sd_setinfo" . 3721610)
+ ("hdf_sd_start" . 3725821)
+ ("hdf_unpackdata" . 3727463)
+ ("hdf_vd_attach" . 3730780)
+ ("hdf_vd_detach" . 3731603)
+ ("hdf_vd_fdefine" . 3732010)
+ ("hdf_vd_fexist" . 3733312)
+ ("hdf_vd_find" . 3733730)
+ ("hdf_vd_get" . 3734180)
+ ("hdf_vd_getid" . 3736409)
+ ("hdf_vd_getinfo" . 3736972)
+ ("hdf_vd_getnext" . 3738394)
+ ("hdf_vd_insert" . 3739175)
+ ("hdf_vd_isvd" . 3739583)
+ ("hdf_vd_isvg" . 3740078)
+ ("hdf_vd_lone" . 3740564)
+ ("hdf_vd_read" . 3741318)
+ ("hdf_vd_seek" . 3743001)
+ ("hdf_vd_setinfo" . 3743380)
+ ("hdf_vd_write" . 3744276)
+ ("hdf_vg_addtr" . 3746906)
+ ("hdf_vg_attach" . 3747436)
+ ("hdf_vg_detach" . 3748330)
+ ("hdf_vg_getid" . 3748876)
+ ("hdf_vg_getinfo" . 3749448)
+ ("hdf_vg_getnext" . 3750677)
+ ("hdf_vg_gettr" . 3751463)
+ ("hdf_vg_gettrs" . 3751960)
+ ("hdf_vg_inqtr" . 3752601)
+ ("hdf_vg_insert" . 3753071)
+ ("hdf_vg_isvd" . 3753479)
+ ("hdf_vg_isvg" . 3753952)
+ ("hdf_vg_lone" . 3754433)
+ ("hdf_vg_number" . 3755192)
+ ("hdf_vg_setinfo" . 3755464)
+ ("eos routines" . 3756597)
+ ("feature routines" . 3756941)
+ ("hdf-eos programming model" . 3758516)
+ ("alphabetic listing of eos routines" . 3759169)
+ ("eos_eh_convang" . 3759295)
+ ("eos_eh_getversion" . 3760236)
+ ("eos_eh_idinfo" . 3761177)
+ ("eos_exists" . 3762142)
+ ("eos_gd_attach" . 3762476)
+ ("eos_gd_attrinfo" . 3763212)
+ ("eos_gd_blksomoffset" . 3764044)
+ ("eos_gd_close" . 3764687)
+ ("eos_gd_compinfo" . 3764995)
+ ("eos_gd_create" . 3765861)
+ ("eos_gd_defboxregion" . 3770176)
+ ("eos_gd_defcomp" . 3771198)
+ ("eos_gd_defdim" . 3773752)
+ ("eos_gd_deffield" . 3774610)
+ ("eos_gd_deforigin" . 3776331)
+ ("eos_gd_defpixreg" . 3777072)
+ ("eos_gd_defproj" . 3777808)
+ ("eos_gd_deftile" . 3779517)
+ ("eos_gd_deftimeperiod" . 3781308)
+ ("eos_gd_defvrtregion" . 3783132)
+ ("eos_gd_detach" . 3786732)
+ ("eos_gd_diminfo" . 3787261)
+ ("eos_gd_dupregion" . 3787810)
+ ("eos_gd_extractregion" . 3788964)
+ ("eos_gd_fieldinfo" . 3789942)
+ ("eos_gd_getfillvalue" . 3790982)
+ ("eos_gd_getpixels" . 3791614)
+ ("eos_gd_getpixvalues" . 3793019)
+ ("eos_gd_gridinfo" . 3794063)
+ ("eos_gd_inqattrs" . 3795203)
+ ("eos_gd_inqdims" . 3796090)
+ ("eos_gd_inqfields" . 3797014)
+ ("eos_gd_inqgrid" . 3798194)
+ ("eos_gd_interpolate" . 3799039)
+ ("eos_gd_nentries" . 3801024)
+ ("eos_gd_open" . 3801855)
+ ("eos_gd_origininfo" . 3802720)
+ ("eos_gd_pixreginfo" . 3803255)
+ ("eos_gd_projinfo" . 3803671)
+ ("eos_gd_query" . 3804632)
+ ("eos_gd_readattr" . 3807742)
+ ("eos_gd_readfield" . 3808372)
+ ("eos_gd_readtile" . 3809731)
+ ("eos_gd_regioninfo" . 3810858)
+ ("eos_gd_setfillvalue" . 3812644)
+ ("eos_gd_settilecache" . 3813378)
+ ("eos_gd_tileinfo" . 3814227)
+ ("eos_gd_writeattr" . 3815185)
+ ("eos_gd_writefield" . 3816422)
+ ("eos_gd_writefieldmeta" . 3818235)
+ ("eos_gd_writetile" . 3818927)
+ ("eos_pt_attach" . 3820078)
+ ("eos_pt_attrinfo" . 3820928)
+ ("eos_pt_bcklinkinfo" . 3821747)
+ ("eos_pt_close" . 3822480)
+ ("eos_pt_create" . 3822792)
+ ("eos_pt_defboxregion" . 3823558)
+ ("eos_pt_deflevel" . 3824883)
+ ("eos_pt_deflinkage" . 3828271)
+ ("eos_pt_deftimeperiod" . 3829068)
+ ("eos_pt_defvrtregion" . 3830051)
+ ("eos_pt_detach" . 3832611)
+ ("eos_pt_extractperiod" . 3833096)
+ ("eos_pt_extractregion" . 3834261)
+ ("eos_pt_fwdlinkinfo" . 3835356)
+ ("eos_pt_getlevelname" . 3836086)
+ ("eos_pt_getrecnums" . 3836953)
+ ("eos_pt_inqattrs" . 3838521)
+ ("eos_pt_inqpoint" . 3839276)
+ ("eos_pt_levelindx" . 3840141)
+ ("eos_pt_levelinfo" . 3840763)
+ ("eos_pt_nfields" . 3841855)
+ ("eos_pt_nlevels" . 3842472)
+ ("eos_pt_nrecs" . 3842936)
+ ("eos_pt_open" . 3843512)
+ ("eos_pt_periodinfo" . 3844345)
+ ("eos_pt_periodrecs" . 3845202)
+ ("eos_pt_query" . 3846180)
+ ("eos_pt_readattr" . 3847184)
+ ("eos_pt_readlevel" . 3847832)
+ ("eos_pt_regioninfo" . 3849227)
+ ("eos_pt_regionrecs" . 3850137)
+ ("eos_pt_sizeof" . 3851125)
+ ("eos_pt_updatelevel" . 3851889)
+ ("eos_pt_writeattr" . 3853392)
+ ("eos_pt_writelevel" . 3854507)
+ ("eos_query" . 3855572)
+ ("eos_sw_attach" . 3856711)
+ ("eos_sw_attrinfo" . 3857477)
+ ("eos_sw_close" . 3858294)
+ ("eos_sw_compinfo" . 3858603)
+ ("eos_sw_create" . 3859439)
+ ("eos_sw_defboxregion" . 3860202)
+ ("eos_sw_defcomp" . 3862188)
+ ("eos_sw_defdatafield" . 3864699)
+ ("eos_sw_defdim" . 3866458)
+ ("eos_sw_defdimmap" . 3867714)
+ ("eos_sw_defgeofield" . 3869764)
+ ("eos_sw_defidxmap" . 3871791)
+ ("eos_sw_deftimeperiod" . 3873078)
+ ("eos_sw_defvrtregion" . 3874876)
+ ("eos_sw_detach" . 3878840)
+ ("eos_sw_diminfo" . 3879317)
+ ("eos_sw_dupregion" . 3879816)
+ ("eos_sw_extractperiod" . 3880950)
+ ("eos_sw_extractregion" . 3882142)
+ ("eos_sw_fieldinfo" . 3883373)
+ ("eos_sw_getfillvalue" . 3884553)
+ ("eos_sw_idxmapinfo" . 3885185)
+ ("eos_sw_inqattrs" . 3886145)
+ ("eos_sw_inqdatafields" . 3886927)
+ ("eos_sw_inqdims" . 3888011)
+ ("eos_sw_inqgeofields" . 3888867)
+ ("eos_sw_inqidxmaps" . 3890025)
+ ("eos_sw_inqmaps" . 3891045)
+ ("eos_sw_inqswath" . 3892199)
+ ("eos_sw_mapinfo" . 3893003)
+ ("eos_sw_nentries" . 3893958)
+ ("eos_sw_open" . 3895072)
+ ("eos_sw_periodinfo" . 3895902)
+ ("eos_sw_query" . 3897291)
+ ("eos_sw_readattr" . 3899674)
+ ("eos_sw_readfield" . 3900310)
+ ("eos_sw_regioninfo" . 3901722)
+ ("eos_sw_setfillvalue" . 3903047)
+ ("eos_sw_writeattr" . 3903793)
+ ("eos_sw_writedatameta" . 3905032)
+ ("eos_sw_writefield" . 3906034)
+ ("eos_sw_writegeometa" . 3907888)
+ ("idl supports netcdf 2.4. the following" . 3909058)
+ ("netcdf data modes" . 3909545)
+ ("creating netcdf files" . 3911625)
+ ("type conversion" . 3916130)
+ ("specifying attributes and variables" . 3916492)
+ ("string data in netcdf files" . 3917024)
+ ("alphabetical listing of ncdf routines" . 3919304)
+ ("ncdf_attcopy" . 3919429)
+ ("ncdf_attdel" . 3920850)
+ ("ncdf_attget" . 3921699)
+ ("ncdf_attinq" . 3922677)
+ ("ncdf_attname" . 3925785)
+ ("ncdf_attput" . 3926831)
+ ("ncdf_attrename" . 3929461)
+ ("ncdf_close" . 3930224)
+ ("ncdf_control" . 3930665)
+ ("ncdf_create" . 3933696)
+ ("ncdf_dimdef" . 3935071)
+ ("ncdf_dimid" . 3935879)
+ ("ncdf_diminq" . 3936325)
+ ("ncdf_dimrename" . 3937310)
+ ("ncdf_exists" . 3938047)
+ ("ncdf_inquire" . 3938635)
+ ("ncdf_open" . 3939518)
+ ("ncdf_vardef" . 3940083)
+ ("ncdf_varget" . 3943444)
+ ("ncdf_varget1" . 3945859)
+ ("ncdf_varid" . 3947412)
+ ("ncdf_varinq" . 3947809)
+ ("ncdf_varput" . 3948891)
+ ("ncdf_varrename" . 3953145)
+ ("overview" . 3955823)
+ ("introduction to idl dataminer and odbc" . 3956535)
+ ("odbc conformance levels" . 3960490)
+ ("where to find additional information" . 3964040)
+ ("about this volume" . 3964667)
+ ("conventions" . 3966086)
+ ("network access requirements" . 3966862)
+ ("installation on unix systems" . 3967510)
+ ("initialization" . 3968855)
+ ("mappings" . 3969540)
+ ("error messages" . 3970814)
+ ("to use idl dataminer classes to perform actions" . 3973597)
+ ("components" . 3974348)
+ ("using the db_exists function" . 3975795)
+ ("creating a database object" . 3976335)
+ ("connecting to a database" . 3978231)
+ ("finding tables" . 3981774)
+ ("connecting to a table" . 3982852)
+ ("working with table data" . 3984111)
+ ("example" . 3985963)
+ ("odbc sql syntax notes" . 3989359)
+ ("idl dataminer api" . 3993210)
+ ("dialog_dbconnect()" . 3999021)
+ ("db_exists()" . 4000317)
+ ("idldbdatabase" . 4000670)
+ ("idldbdatabase::connect" . 4001879)
+ ("idldbdatabase::executesql" . 4003035)
+ ("idldbdatabase::getdatasources" . 4003786)
+ ("idldbdatabase::getproperty" . 4004406)
+ ("idldbdatabase::gettables" . 4007378)
+ ("idldbdatabase::setproperty" . 4008146)
+ ("idldbrecordset" . 4010071)
+ ("idldbrecordset::addrecord" . 4012072)
+ ("idldbrecordset::currentrecord" . 4013491)
+ ("idldbrecordset::deleterecord" . 4014132)
+ ("idldbrecordset::getfield" . 4014556)
+ ("idldbrecordset::getproperty" . 4015473)
+ ("idldbrecordset::getrecord" . 4018737)
+ ("idldbrecordset::movecursor" . 4019824)
+ ("idldbrecordset::nfields" . 4020806)
+ ("idldbrecordset::setfield" . 4021016)
+ ("overview" . 4022025)
+ ("odbc.ini file format" . 4023981)
+ ("odbc.ini file example" . 4029551)
+ ("supported drivers" . 4030741)
+ ("connect odbc for informix" . 4034280)
+ ("connect odbc for oracle" . 4060281)
+ ("connect odbc for sybase" . 4088922)
+ ("connect odbc for text" . 4120823)
+ ("the unix environment" . 4162804)
+ ("locking and isolation levels" . 4168078)
+ ("which you use in sql statements." . 4176823)
+ ("api functions" . 4176989)
+ ("scalar functions" . 4180843)
+ ("overview" . 4197766)
+ ("backwards compatibility" . 4197986)
+ ("dde routines" . 4200475)
+ ("demo_mode" . 4201683)
+ ("gethelp" . 4202020)
+ ("handle_create" . 4205285)
+ ("handle_free" . 4209987)
+ ("handle_info" . 4210627)
+ ("handle_move" . 4212602)
+ ("handle_value" . 4214278)
+ ("hdf_dfsd_adddata" . 4216061)
+ ("hdf_dfsd_dimget" . 4217461)
+ ("hdf_dfsd_dimset" . 4218270)
+ ("hdf_dfsd_endslice" . 4219682)
+ ("hdf_dfsd_getdata" . 4220083)
+ ("hdf_dfsd_getinfo" . 4220850)
+ ("hdf_dfsd_getslice" . 4223543)
+ ("hdf_dfsd_putslice" . 4224940)
+ ("hdf_dfsd_readref" . 4225886)
+ ("hdf_dfsd_setinfo" . 4226355)
+ ("hdf_dfsd_startslice" . 4231459)
+ ("pickfile" . 4235427)
+ ("polyfitw" . 4235689)
+ ("riemann" . 4238182)
+ ("rstrpos" . 4245653)
+ ("size executive command" . 4246933)
+ ("slicer" . 4250011)
+ ("str_sep" . 4260608)
+ ("tiff_dump" . 4262351)
+ ("tiff_read" . 4262970)
+ ("tiff_write" . 4265631)
+ ("wided" . 4269010)
+ ("widget_message" . 4269350)
+ ("calls" . 4269632)
+ ("using idl as an rpc server" . 4271232)
+ ("the idl rpc library" . 4274271)
+ ("free_idl_variable" . 4274688)
+ ("get_idl_variable" . 4275190)
+ ("idl_server_interactive" . 4278398)
+ ("kill_server" . 4279100)
+ ("register_idl_client" . 4279494)
+ ("send_idl_command" . 4280530)
+ ("set_idl_timeout" . 4281799)
+ ("set_idl_variable" . 4282278)
+ ("set_rpc_verbosity" . 4284190)
+ ("unregister_idl_client" . 4284730)
+ ("the varinfo_t structure" . 4285243)
+ ("v_make_byte" . 4286194)
+ ("v_make_complex" . 4286390)
+ ("v_make_dcomplex" . 4286584)
+ ("v_make_double" . 4286808)
+ ("v_make_float" . 4287002)
+ ("v_make_int" . 4287196)
+ ("v_make_long" . 4287365)
+ ("v_make_string" . 4287531)
+ ("v_fill_array" . 4287695)
+ ("more variable manipulation macros" . 4288808)
+ ("management" . 4290680)
+ ("rpc examples" . 4294944)
+ ("features in idl 5.5" . 4295304)
+ ("visualization enhancements" . 4296200)
+ ("analysis enhancements" . 4311825)
+ ("language enhancements" . 4324661)
+ ("user interface toolkit enhancements" . 4353611)
+ ("file access enhancements" . 4360942)
+ ("development environment enhancements" . 4368573)
+ ("scientific data formats enhancements" . 4369025)
+ ("idl activex control enhancements" . 4372171)
+ ("idl dataminer enhancements" . 4374057)
+ ("documentation enhancements" . 4379981)
+ ("enhanced idl utilities" . 4380467)
+ ("new and enhanced idl objects" . 4386412)
+ ("idlgrbuffer::pickdata" . 4387208)
+ ("idlgrcontour::getproperty" . 4388287)
+ ("idlgrcontour::init" . 4390742)
+ ("idlgrcontour::setproperty" . 4392763)
+ ("idlgrpolygon::getproperty" . 4395218)
+ ("idlgrpolygon::init" . 4397267)
+ ("idlgrpolygon::setproperty" . 4399736)
+ ("idlgrsurface::getproperty" . 4401785)
+ ("idlgrsurface::init" . 4404322)
+ ("idlgrsurface::setproperty" . 4407967)
+ ("idlgrwindow::pickdata" . 4410051)
+ ("new and enhanced idl routines" . 4411125)
+ ("new and updated system variables" . 4496983)
+ ("platforms supported in this release" . 4500833)
+ ("multi-threading in idl" . 4502530)
+ ("accelerate your computations." . 4502649)
+ ("the idl thread pool" . 4502841)
+ ("controlling the thread pool in idl" . 4507313)
+ ("routines supporting the thread pool" . 4521598)
+ ("in idl" . 4524173)
+ ("introduction to idl com objects" . 4524477)
+ ("skills required to use com objects" . 4526577)
+ ("idl com naming schemes" . 4527834)
+ ("using idl idispatch com objects" . 4530048)
+ ("using activex controls in idl" . 4543047)
+ ("menu widget" . 4558714)
+ ("introduction to the shortcut menu widget" . 4559064)
+ ("creating a base widget shortcut menu" . 4562401)
+ ("creating a draw widget shortcut menu" . 4565394)
+ ("creating a list widget shortcut menu" . 4571696)
+ ("creating a text widget shortcut menu" . 4578799)
+ ("new objects" . 4584989)
+ ("idlcomidispatch" . 4585207)
+ ("idlcomidispatch::init" . 4586383)
+ ("idlcomidispatch::getproperty" . 4588154)
+ ("idlcomidispatch::setproperty" . 4589374)
+ ("idlffmrsid" . 4590212)
+ ("idlffmrsid::cleanup" . 4590726)
+ ("idlffmrsid::getdimsatlevel" . 4591145)
+ ("idlffmrsid::getimagedata" . 4593058)
+ ("idlffmrsid::getproperty" . 4596841)
+ ("idlffmrsid::init" . 4600876)
+ ("new idl routines" . 4601742)
+ ("cpu" . 4601839)
+ ("define_msgblk" . 4606723)
+ ("define_msgblk_from_file" . 4610890)
+ ("erf" . 4616320)
+ ("erfc" . 4617231)
+ ("erfcx" . 4618172)
+ ("file_info" . 4618927)
+ ("file_search" . 4625314)
+ ("grid_input" . 4653386)
+ ("griddata" . 4659995)
+ ("hdf_vd_attrfind" . 4704978)
+ ("hdf_vd_attrinfo" . 4705945)
+ ("hdf_vd_attrset" . 4707770)
+ ("hdf_vd_isattr" . 4716743)
+ ("hdf_vd_nattrs" . 4717351)
+ ("heap_free" . 4718172)
+ ("interval_volume" . 4722176)
+ ("path_sep" . 4727191)
+ ("qgrid3" . 4728170)
+ ("qhull" . 4734980)
+ ("query_mrsid" . 4738793)
+ ("read_mrsid" . 4742348)
+ ("real_part" . 4745899)
+ ("region_grow" . 4746955)
+ ("simplex" . 4751429)
+ ("widget_activex" . 4758008)
+ ("widget_displaycontextmenu" . 4770895)
+ ("xobjview_rotate" . 4773351)
+ ("xobjview_write_image" . 4775014)
+ ("xroi" . 4776155)
+ ("new examples" . 4805873)
+ ("overview of new examples" . 4807045)
+ ("mapping an image onto a surface" . 4811182)
+ ("centering an image object" . 4814421)
+ ("image object" . 4819242)
+ ("working with mesh objects and routines" . 4824244)
+ ("copying and printing objects" . 4852950)
+ ("capturing idl direct graphics displays" . 4868029)
+ ("creating and restoring .sav files" . 4874242)
+ ("handling table widgets in guis" . 4883124)
+ ("finding straight lines in images" . 4892226)
+ ("color density contrasting in an image" . 4894955)
+ ("removing noise from an image with fft" . 4898764)
+ ("using double and triple integration" . 4902163)
+ ("obtaining irregular grid intervals" . 4907951)
+ ("functions" . 4910703)
+ ("determining bessel function accuracy" . 4915271)
+ ))
+
+;; Some routines need to be searched under a different name.
+;; Here are the required translations.
+(setq idlwave-help-name-translations
+ '(
+ ("openr" . "open")
+ ("openu" . "open")
+ ("openw" . "open")
+ ("print" . "print/printf")
+ ("printf" . "print/printf")
+ ("read" . "read/readf")
+ ("readf" . "read/readf")
+ ))
+
+;; The description for a keyword is not always in the same topic.
+;; Some keywords apply to many routines (graphics keywords). Keywords
+;; listed by INIT methods are not repeated for GETPROPERTY or SETPROPERTY.
+;; Thus, if a keyword description is not found, we sometimes must search
+;; the description of additional routines as well.
+;; The following list associates routines with other routines where keyword
+;; descriptions might be found. Currently we assume that we do not need to
+;; look in different object classes. This would be necessary for inheritance,
+;; but we do not treat this case currently.
+(setq idlwave-help-alt-names
+ '(
+ ("axis" "graphics keywords")
+ ("contour" "plot" "graphics keywords")
+ ("draw_roi" "graphics keywords")
+ ("map_continents" "graphics keywords")
+ ("map_grid" "graphics keywords")
+ ("map_set" "graphics keywords")
+ ("oplot" "graphics keywords")
+ ("plot" "graphics keywords")
+ ("plot_3dbox" "plot" "graphics keywords")
+ ("plots" "graphics keywords")
+ ("polyfill" "graphics keywords")
+ ("shade_surf" "graphics keywords")
+ ("surface" "plot" "graphics keywords")
+ ("xyouts" "graphics keywords")
+ ("getproperty" "init")
+ ("setproperty" "init")
+ ("device" "keywords accepted by the idl devices")
+ ("system variables" "controlling the thread pool in idl")
+ ))
+
+;; Special words in the source files with associated help topics
+(defconst idlwave-help-special-topic-words
+ '(
+ ("pro")
+ ("end" . "pro")
+ ("function")
+ ("return")
+ ("if" . "if...then...else")
+ ("then" . "if...then...else")
+ ("endif" . "if...then...else")
+ ("else" . "if...then...else")
+ ("endelse" . "if...then...else")
+ ("for")
+ ("endfor" . "for")
+ ("while" . "while...do")
+ ("endwhile" . "while...do")
+ ("do" . "while...do")
+ ("repeat" . "repeat...until")
+ ("endrep" . "repeat...until")
+ ("until" . "repeat...until")
+ ("case")
+ ("of" . "case")
+ ("endcase" . "case")
+ ("switch")
+ ("endswitch" . "switch")
+ ("break")
+ ("continue")
+ ("begin" . "begin...end")
+ ("common")
+ ("goto")
+ ("forward_function")
+ ("compile_opt")
+ ("on_ioerror")
+)
+ "Association list of help topics for special context words.")
+
+ ;; What would be a good width for a dedicated help frame?
+(setq idlwave-help-frame-width 67)
+
+;;; idlw-help.el ends here