anchor.diff:      (if (zerop ret)
           nil ret)))
   
  -(defun ensure-asdf ()
  -  #-asdf
  -  (or
  -   (ignore-errors (cl:load (merge-pathnames (format nil "lisp/asdf/~A/asdf.lisp" (opt "asdf")) (opt "homedir"))))
  -   (ignore-errors (require :asdf))))
  +(let (sentinel)
  +  (defun ensure-asdf ()
  +    (or
  +     sentinel
  +     (not (setf sentinel t))
  +     (find :asdf *features*)
  +     (ignore-errors (cl:load (merge-pathnames (format nil "lisp/asdf/~A/asdf.lisp" (opt "asdf")) (opt "homedir"))))
  +     (ignore-errors (require :asdf)))))
   
   #+(and unix sbcl) ;; from swank
   (progn
  
positive.code:      for arg = (if p (subseq ar 0 p) ar)
       do (if (find :quicklisp *features*)
              (funcall (read-from-string "ql:quickload") arg :silent t)
              #+asdf(asdf:operate 'asdf:load-op arg))
       while p))
  
  (setf (fdefinition 'load-system)
  
negative.code:         (cdr (assoc x ext:*environment-list* :test #'string=))))
    #+ecl(ext:getenv x)
    #+sbcl(sb-posix:getenv x)
    #-(or abcl ecl ccl clisp sbcl cmucl)
    (when (find :asdf *features*)
      (funcall (read-from-string "asdf::getenv") x)))
  
  (defun ros-opts (&optional append)
    (when append
      (setf *ros-opts* (append append (ros-opts))))
    (or *ros-opts*
        (ignore-errors
         (setf *ros-opts*
               (let((*read-eval*))
                 (or (read-from-string (getenv "ROS_OPTS"))
                     '()))))))
  
  (defun opt (param)
    (second (assoc param (ros-opts) :test 'equal)))
  