(defun next-word ()
    (let* ((pt (point)))
      (forward-sexp)
      (buffer-substring pt (point))))


(defun get-defuns (n) (interactive "p")
  (or n (setq n 1))
  (while (>= (setq n (- n 1)) 0)
    (cond ((search-forward "F" nil t) 
    (let (f pack args lim pt def)
      (setq pt (point))
      (forward-char 1)
      (setq lim (if (search-forward "" nil t) (point) nil))
      (goto-char pt)
      (setq f (next-word))
      (next-line 1)
      (beginning-of-line)
      (setq def (next-word))
      (cond ((equal def "Macro"))
	    ((equal def "Special"))
	    (t (search-forward "package:" lim)
	      (forward-sexp -2)
	      (setq pack (next-word))
	      (search-forward "Args:" lim)
;	      (re-search-forward "\\(Args\\)\\|\\(Syntax\\):" lim)
	      (setq args (next-word))
	      (setq values  (re-search-forward "Values" lim t))
	      (other-window 1)
	      (cond ((equal def "Function")
		     (insert "(defun "  pack "::" f  args
			     (if values " (MV)" " T")
			     ")"))
		    (t (insert "(unknown " f ")")))
	      (insert ?\n)
	      (other-window 1)
	      )))))))

