anchor.diff:    `(mezzano.supervisor:with-mutex ((fat32-host-lock ,host))
        ,@body))
   
  +(defun read-dir-from-pathname (host pathname)
  +  (loop
  +     with disk = (partition host)
  +     with fat32 = (fat32-structure host)
  +     for dir-name on (pathname-directory pathname)
  +     for dir =
  +       (cond
  +         ;; Read root dir
  +         ((eql :absolute (car dir-name))
  +          (mezzano.fat32-file-system:read-dir-from-cluster
  +           (mezzano.fat32-file-system:read-cluster
  +            fat32 disk
  +            (mezzano.fat32-file-system::first-root-dir-sector fat32))
  +           fat32))
  +         ;; Travel path
  +         (t (loop
  +               for file in dir
  +               when (string= (car dir-name) (virtual-dir-name file))
  +               do (return (read-dir-from-file (fat32-structure host)
  +                                              (partition host)
  +                                              file))
  +               finally
  +                 (:error (error 'simple-file-error
  +                                :pathname pathname
  +                                :format-control "Directory ~S does not exist. ~S"
  +                                :format-arguments (list (car dir-name) pathname))))))
  +     ;; Returt all files and subdirectories in dir
  +     finally (return dir)))
  +
   ;; WIP Don't require to load entire file
  +;; TODO Add write suport
   (defmethod open-using-host ((host fat32-host) pathname
                               &key direction element-type if-exists if-does-not-exist external-format)
   
     (with-fat32-host-locked (host)
  -    (let* ((disk (partition host))
  -           (fat32 (fat32-structure host))
  -           (buffer nil)
  -           (root-dir (mezzano.fat32-file-system:read-dir-from-cluster
  -                      (mezzano.fat32-file-system:read-cluster
  -                       fat32 disk
  -                       (mezzano.fat32-file-system::first-root-dir-sector fat32))
  -                      fat32))
  -           (read-buffer-size 0))
  +    (let ((buffer nil)
  +          (read-buffer-size 0))
   
         (when (member direction '(:output :io))
  -        (error "Feature not implemented"))
  -
  -      (multiple-value-bind (directory name) (unparse-pathname pathname host)
  -        (loop for dir-name in directory
  -           with dir = root-dir
  -           do (loop for file in dir
  -                 do (when (string= dir-name (virtual-dir-name file))
  -                      (setf dir
  -                            (read-dir-from-file (fat32-structure host)
  -                                                (partition host)
  -                                                file))))
  -           finally (loop for file in dir
  -                      do (when (string= name (virtual-dir-name file))
  -                           (setf buffer (mezzano.fat32-file-system:read-file file disk fat32)
  -                                 read-buffer-size (virtual-dir-file-size file))
  -                           (return))
  -                      finally (ecase if-does-not-exist
  -                                (:error (error 'simple-file-error
  -                                               :pathname pathname
  -                                               :format-control "File ~A does not exist. ~S"
  -                                               :format-arguments (list pathname name)))
  -                                (:create (error "Feature not implemented"))))))
  +        (error "Feature not implemented: ~a, ~a" ':output ':io))
  +      
  +      (loop
  +         with file-name = (concatenate 'string (pathname-name pathname)
  +                                       "." (pathname-type pathname))
  +         for file in (read-dir-from-pathname host pathname)
  +         when (string= file-name (virtual-dir-name file))
  +         do (progn
  +              (setf buffer (mezzano.fat32-file-system:read-file file (partition host)
  +                                                                (fat32-structure host))
  +                    read-buffer-size (virtual-dir-file-size file))
  +              (return))
  +         finally
  +           (ecase if-does-not-exist
  +             (:error (error 'simple-file-error
  +                            :pathname pathname
  +                            :format-control "File ~A does not exist. ~S"
  +                            :format-arguments (list pathname file-name)))
  +             (:create (error "Feature :create not implemented for :if-does-not-exist"))))
   
         (let ((stream (cond ((or (eql element-type :default)
                                  (subtypep element-type 'character))
  
positive.code:         instance))
  
  ;; Read some file
  (with-open-file (file #P"FOO:>dir1>log-1") ; put your file path
    (loop for line = (read-line file nil nil)
       while line do (print line)))
  |#
  
negative.code:      :finally (return res)))
  
  (defun decode-dir (list fat32)
    (let ((name ""))
      (dolist (file (nreverse list))
        (cond ((long-dir-p file)
               ;; Read long name
               (loop for octet across (concatenate 'vector
                                                   (long-dir-name-0 file)
                                                   (long-dir-name-1 file)
  