anchor.diff:          (unless (= #x0F (aref directory (+ 11 i)))
             (return i))))))
   
  -(defmacro do-files ((var) directory &body body)
  +(defmacro do-files ((var) directory finally &body body)
     `(do ((,var (next-file ,directory 0) (next-file ,directory (+ 32 ,var))))
          ((null ,var)
  -        t)
  +        ,finally)
        ,@body))
   
   (defun read-name (directory offset)
  
positive.code:   (let ((cluster-data (find-file host pathname)))
      (let ((stack '())
            (path (unparse-pathname-directory pathname host)))
        (do-files
            (file) cluster-data
          (push
           (parse-simple-file-path host
                                   (format nil
  
negative.code:                                          (fat host))
          :for directory :in (rest (pathname-directory pathname))
          :do (do-files (start) cluster-data
                        (error 'simple-file-error
                               :pathname pathname
                               :format-control "Directory ~A not found. ~S"
                               :format-arguments (list directory pathname))
                (when (string= directory (read-file-name cluster-data start))
                  (setf cluster-sector (first-sector-of-cluster fat32 (read-first-cluster cluster-data start))
                        cluster-data (read-file fat32
  