Function: idlwave-do-find-module

idlwave-do-find-module is a byte-compiled function defined in idlwave.el.gz.

Signature

(idlwave-do-find-module NAME TYPE CLASS &optional FORCE-SOURCE THIS-BUFFER)

Source Code

;; Defined in /usr/src/emacs/lisp/obsolete/idlwave.el.gz
(defun idlwave-do-find-module (name type class
				    &optional force-source this-buffer)
  (let ((name1 (idlwave-make-full-name class name))
	source buf1 entry
	(buf (current-buffer))
	(pos (point))
	file name2)
    (setq entry (idlwave-best-rinfo-assq name type class (idlwave-routines)
					 'WITH-FILE)
	  source (or force-source (nth 3 entry))
	  name2 (if (nth 2 entry)
		    (idlwave-make-full-name (nth 2 entry) name)
		  name1))
    (if source
	(setq file (idlwave-routine-source-file source)))
    (unless file  ; Try to find it on the path.
      (setq file
	    (idlwave-expand-lib-file-name
	     (if class
		 (format "%s__define.pro" (downcase class))
	       (format "%s.pro" (downcase name))))))
    (cond
     ((or (null name) (equal name ""))
      (error "Abort"))
     ((eq (car source) 'system)
      (error "Source code for system routine %s is not available"
	     name2))
     ((or (not file) (not (file-regular-p file)))
      (error "Source code for routine %s is not available"
	     name2))
     (t
      (when (not this-buffer)
	(setq buf1
	      (idlwave-find-file-noselect file 'find))
	(pop-to-buffer buf1 t))
      (goto-char (point-max))
      (let ((case-fold-search t))
	(if (re-search-backward
	     (concat "^[ \t]*\\<"
		     (cond ((eq type 'fun) "function")
			   ((eq type 'pro) "pro")
			   (t "\\(pro\\|function\\)"))
		     "\\>[ \t]+"
		     (regexp-quote (downcase name2))
		     "[^a-zA-Z0-9_$]")
	     nil t)
	    (goto-char (match-beginning 0))
	  (pop-to-buffer buf)
	  (goto-char pos)
	  (error "Could not find routine %s" name2)))))))