anchor.diff:    (- (first-data-sector fat32)
        (root-dir-sectors)))
   
  -(defun first-sector-of-cluster (fat32 cluster)
  -  (+ (* (- cluster 2)
  +(defun first-sector-of-cluster (fat32 cluster-offset)
  +  (+ (* (- cluster-offset 2)
           (fat32-sectors-per-cluster fat32))
        (first-data-sector fat32)))
   
  
positive.code:   `(mezzano.supervisor:with-mutex ((fat32-host-lock ,host))
       ,@body))
  
  (defun file-name (path)
    "Return file name"
    (unless (or (eql :wild (pathname-name path))
                (eql :wild (pathname-type path)))
      (if (pathname-type path)
          (concatenate 'string (pathname-name path) "." (pathname-type path))
          (pathname-name path))))
  
  (defun find-file (host pathname)
    (loop :with fat32 := (fat32-structure host)
          :with disk := (partition host)
          :with file-name := (file-name pathname)
          :with cluster-sector := (first-root-dir-sector fat32)
          :with cluster := (read-file fat32
                                      disk
                                      (fat32-root-cluster fat32)
                                      (fat host))
          :for file :in (rest (pathname-directory pathname))
          :do (do-files (start) cluster
                (when (string= file (read-long-name cluster start))
                  (let ((directory (read-file fat32
                                              disk
                                              (read-first-cluster cluster start)
                                              (fat host))))
                    (setf cluster directory
                          cluster-sector (first-sector-of-cluster fat32
                                                                  directory)))))
          :finally (do-files (start) cluster
                     (when (string= file-name (read-long-name cluster start))
                       (return-from find-file (values cluster cluster-sector start))))))
  
  (defmethod delete-file-using-host ((host fat32-host) path &key)
    (let* ((disk (partition host))
           (fat32 (fat32-structure host)))
      (multiple-value-bind (cluster cluster-sector start) (find-file host path)
        (remove-file cluster
                     start
                     disk
                     cluster-sector
                     fat32))))
  
  (defun write-file-size (stream)
    (let* ((host (host stream))
           (path (file-stream-pathname stream))
           (file-length (read-buffer-size stream))
           (disk (partition host))
           (fat32 (fat32-structure host)))
      (multiple-value-bind (cluster cluster-sector offset) (find-file host path)
        (when offset
          (setf (aref cluster (+ 28 offset)) (ldb (byte 8 0) file-length)
                (aref cluster (+ 29 offset)) (ldb (byte 8 8) file-length)
                (aref cluster (+ 30 offset)) (ldb (byte 8 16) file-length)
                (aref cluster (+ 31 offset)) (ldb (byte 8 24) file-length))
  
          (write-cluster disk
                         cluster-sector
                         fat32
                         cluster)))))
  
  ;; WIP
  (defmethod open-using-host ((host fat32-host) pathname
  
negative.code: ;; Mount partition
  ;; (let* ((disk-name "FAT32")
  ;;        (disk (nth 3 (mezzano.supervisor:all-disks)))
  ;;        (fat32 (read-fat32-structure disk))
  ;;        (fat32-info (read-fat32-info-structure disk fat32))
  ;;        (fat (read-fat disk fat32))
  ;;        (instance (make-instance 'fat32-host
  ;;                                 :name disk-name
  