anchor.diff:                               (add 14 25)
                                (add 28 31))))))))
   
  +(defun (setf read-long-name) (long-name directory start-offset)
  +  (flet ((set (start end name-offset name-length)
  +           (loop :for disk-offset :from (+ start start-offset) :by 2 :to (+ start end start-offset)
  +                 :for name-offset :from name-offset :by 1
  +                 :do (setf (sys.int::ub16ref/le directory disk-offset)
  +                           (cond ((= name-offset name-length)
  +                                  #x0000)
  +                                 ((< name-offset name-length)
  +                                  (char-code (aref long-name name-offset)))
  +                                 (t #xFFFF))))))
  +    ;; Write long name part starting from last part
  +    (loop :with name-length := (length long-name)
  +          :with n := (ceiling (/ name-length 13))
  +          :with checksum := (checksum directory (+ (* 32 n) start-offset))
  +          :repeat n
  +          :for part-n :from n :by -1
  +          :for name-offset := (* (1- part-n) 13)
  +          :for order := (+ part-n #x40) :then part-n
  +          :do (progn (set 1 8 name-offset name-length)
  +                     (set 14 10 (+ 5 name-offset) name-length)
  +                     (set 28 2 (+ 11 name-offset) name-length)
  +                     (setf (aref directory start-offset) order
  +                           (aref directory (+ start-offset 11)) #x0F ;attributes
  +                           (aref directory (+ start-offset 12)) 0
  +                           (aref directory (+ start-offset 13)) checksum
  +                           (sys.int::ub16ref/le directory (+ start-offset 26)) 0
  +                           start-offset (next-space directory start-offset))))))
  +
   (defun read-file-name (directory file)
     (let ((long-name (read-long-name directory file)))
       (if (string= "" long-name)
  -        (let ((file-name (read-name directory file)))
  +        (let ((file-name (read-short-name directory file)))
             (with-output-to-string (name)
               (loop :for i :from 0 :to 7
                     :never (char= #\Space
  
positive.code: (defmethod close ((stream fat32-file-stream) &key abort)
    (cond ((not abort)
           (let* ((host (host stream))
                  (file-length (read-buffer-size stream)))
             (multiple-value-bind (directory cluster-n offset)
                 (find-file host (file-stream-pathname stream))
               (multiple-value-bind (time date) (get-fat32-time)
  
negative.code:   `(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 name."
    (unless (or (eql :wild (pathname-name pathname))
  