anchor.diff:        (if index
             (completion-option-prefix (elt words index))
             (completion-all-options))))
  -  (throw 'quit 0))
  +  (parse-options-finish ex-ok))
   
   
   (define-option ("--bash-completion-function") ()
  
positive.code: COMPREPLY=( $(~:*~A --bash-completions \"$COMP_CWORD\" \"${COMP_WORDS[@]}\") ) ; } ;~
  complete -F completion_~:*~A ~:*~A~%"
            *program-name*)
    (throw 'quit 0))
  
  
  
  (defun parse-options (arguments &optional default undefined-argument)
    (catch 'quit
      (flet ((process-arguments ()
               (cond
                 (arguments
                  (loop
                    :while arguments
                    :do (setf arguments (call-option-function (pop arguments)
                                                              arguments
                                                              undefined-argument))))
                 (default
                  (funcall default)))))
        (if *debug*
            (process-arguments)
            (handler-case (process-arguments)
              (error (err)
                (format *error-output* "~%ERROR: ~A~%" err)
                ;; TODO: select different sysexits codes depending on the error class.
                (return-from parse-options ex-software)))))
      0))
  
  ;;;; THE END ;;;;
  
negative.code:            "CALL-OPTION-FUNCTION" 
             "SET-DOCUMENTATION-TEXT"
             "*BASH-COMPLETION-HOOK*"
             "PARSE-OPTIONS" "PARSE-OPTIONS-FINISH"
             ;; Exit codes:
             "EX-OK" "EX--BASE" "EX-USAGE" "EX-DATAERR" "EX-NOINPUT"
             "EX-NOUSER" "EX-NOHOST" "EX-UNAVAILABLE" "EX-SOFTWARE"
  