anchor.diff:                            (rest body)
                             body)))
       `(progn
  -       (register-option (wrap-option-function ',(cons main-name other-names)
  -                                              ',parameters
  -                                              ',docstring
  -                                              (lambda ,(remove '&rest parameters)
  -                                                ,docstring
  -                                                (block ,lisp-name
  -                                                  ,@body)))
  +       (register-option ,(generate-wrap-option-function 
  +                          (cons main-name other-names)
  +                          parameters
  +                          docstring
  +                          `(lambda ,(remove '&rest parameters)
  +                             ,docstring
  +                             (block ,lisp-name
  +                               ,@body)))
                           t)
          ',lisp-name)))
   
  
positive.code: "
    (let ((verror  (gensym))
          (voutput (gensym)))
     `(let* ((,verror  nil)
             (,voutput (with-output-to-string (stream)
                         (let ((*standard-output* stream)
                               (*error-output*    stream)
                               (*trace-output*    stream))
                           (handler-case (progn ,@body)
                             (error (err) (setf ,verror err)))))))
        (when ,verror
          (terpri *error-output*)
          (princ ,voutput *error-output*)
          (terpri *error-output*)
          (princ ,verror *error-output*)
          (terpri *error-output*)
          (terpri *error-output*)
          #-testing-script (parse-options-finish ex-software)))))
  
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
negative.code:                   keys)))
  
  
  
  (defun generate-wrap-option-function (keys option-arguments docstring option-function-name)
    (let ((vargs (gensym)))
      (multiple-value-bind (mandatories optionals rest keys-args) (q&d-parse-parameters option-arguments)
        `(make-option
          :keys ',keys
          :arguments ',option-arguments
          :function (lambda (,vargs)
                      ,(flet ((generate-body ()
                                (cond
                                  (rest
                                   `(destructuring-bind ,option-arguments ,vargs
                                      (,option-function-name ,@(q&d-arguments mandatories
                                                                              optionals
                                                                              rest
                                                                              keys-args))
                                      nil))
                                  (keys-args
                                   (error "An option cannot have &key parameters without a &rest parameter. ~@
                                              Invalid option parameters: ~S" option-arguments))
                                  (t
                                   (let ((vremaining (gensym)))
                                     `(destructuring-bind (,@option-arguments &rest ,vremaining) ,vargs
                                        (,option-function-name ,@(q&d-arguments mandatories
                                                                                optionals
                                                                                rest
                                                                                keys-args))
                                        ,vremaining))))))
                         (if (zerop (length mandatories))
                             (generate-body)
                             `(if (<= ,(length mandatories) (length ,vargs))
                                  ,(generate-body)
                                  (error "Missing arguments: ~{~A ~}"
                                         (subseq ',option-arguments (length ,vargs)))))))
          :documentation ',(split-string docstring (string #\newline))))))
  
  
  ;;; ---
  