anchor.diff:    `(mezzano.supervisor:with-mutex ((fat32-host-lock ,host))
        ,@body))
   
  -(defun sub-path (pathname)
  -  "If pathname is file return name, type, attribute and paret-path.
  - If pathname is directory return name, nil, attribute and paret-path."
  -  (let* ((namestring (namestring pathname)))
  -    (loop :for i from (- (length namestring) 2) :downto 0
  -          :when (char= #\> (char namestring i))
  -          :do (return (if (file-name pathname)
  -                          (values (pathname-name pathname)
  -                                  (pathname-type pathname)
  -                                  (ash 1 +attribute-archive+)
  -                                  (pathname (subseq namestring 0 (1+ i))))
  -                          (values (subseq namestring
  -                                          (1+ i)
  -                                          (1- (length namestring)))
  -                                  nil
  -                                  (ash 1 +attribute-directory+)
  -                                  (pathname (subseq namestring 0 (1+ i)))))))))
  -
   (defun file-name (pathname)
     "Take pathname and return file name."
     (unless (or (eql :wild (pathname-name pathname))
  
positive.code:   (let* ((disk (partition host))
           (fat32 (fat-structure host))
           (fat (fat host)))
      (multiple-value-bind (directory cluster-n start) (find-file host path)
        (assert start (start) "File/directory not found. ~s" path)
        (remove-file directory start disk cluster-n fat32 fat))))
  
  (defmethod expunge-directory-using-host ((host fat32-host) path &key)
    (declare (ignore host path))
  
negative.code:         (concatenate 'string (pathname-name pathname) "." (pathname-type pathname))
          (pathname-name pathname))))
  
  (defun open-file-metadata (host pathname)
    (loop :with fat32 := (fat-structure host)
          :with disk := (partition host)
          :with directory-cluster := (first-root-dir-cluster fat32)
          :with parent-dir := (read-file fat32 disk (first-root-dir-cluster fat32) (fat host))
          :with file-name := (file-name pathname)
          :for file :in (rest (pathname-directory pathname))
          :do (do-files (start) parent-dir
                (return-from open-file-metadata nil)
                (when (and (string= file (read-file-name parent-dir start))
                           (directory-p parent-dir start))
                  (setf directory-cluster (read-first-cluster parent-dir start)
                        parent-dir (read-file fat32
                                              disk
                                              (read-first-cluster parent-dir start)
                                              (fat host)))
                  (return start)))
          :finally (do-files (start) parent-dir
                     (return-from open-file-metadata (values parent-dir directory-cluster))
                     (when (and (string= file-name (read-file-name parent-dir start))
                                (file-p parent-dir start))
                       (return-from open-file-metadata (values parent-dir directory-cluster start))))))
  
  (defun open-file (host pathname)
    (multiple-value-bind (parent-dir parent-cluster file-offset) (open-file-metadata host pathname)
      (declare (ignore parent-cluster))
      (when file-offset
        (return-from open-file
          (values (read-file (fat-structure host)
                             (partition host)
                             (read-first-cluster parent-dir file-offset)
                             (fat host))
                  (read-first-cluster parent-dir file-offset)
                  (read-file-length parent-dir file-offset))))))
  
  (defmethod open-using-host ((host fat32-host) pathname
                              &key direction element-type if-exists if-does-not-exist external-format)
  