anchor.diff:            (t (error "can only handle characters and integers"))))
   
     (defmacro mk-mp4-atom-type (l1 l2 l3 l4)
  -    "Given 4 chars/ints, create a 32-bit word representing an atom 'type' (aka name)"
  -    `(let ((retval 0))
  -       (setf (ldb (byte 8 24) retval) ,(as-octet l1)
  -             (ldb (byte 8 16) retval) ,(as-octet l2)
  -             (ldb (byte 8 8) retval)  ,(as-octet l3)
  -             (ldb (byte 8 0) retval)  ,(as-octet l4))
  -       retval)))
  +    "Given 4 chars/ints, create a string for the name"
  +    `(with-output-to-string (s nil)
  +       (write-char (code-char ,(as-octet l1)) s)
  +       (write-char (code-char ,(as-octet l2)) s)
  +       (write-char (code-char ,(as-octet l3)) s)
  +       (write-char (code-char ,(as-octet l4)) s))))
   
   (defconstant +root+                  (mk-mp4-atom-type #\R #\O #\O #\T)  "fake root for tree")
   (defconstant +itunes-album+          (mk-mp4-atom-type #xa9 #\a #\l #\b) "text: album name")
  
positive.code:   "Helper function to extract text from ILST atom's data atom"
    (declare #.utils:*standard-optimize-settings*)
    (setf (nth 5 *ilst-data*) atom-type)
    (aif (tree:at-path atoms *ilst-data* (lambda (x y)
                                           (= (mp4-atom:atom-type (tree:data x)) y)))
         (atom-value (tree:data it))
         nil))
  
  (defun mp4-show-raw-tag-atoms (mp4-file-stream out-stream)
    "Show all the iTunes data atoms"
    (declare #.utils:*standard-optimize-settings*)
    (let ((top-node (tree:at-path (mp4-atoms mp4-file-stream)
                                  (list +root+ +mp4-atom-moov+ +mp4-atom-udta+ +mp4-atom-meta+ +mp4-atom-ilst+)
                                  (lambda (x y) (= (mp4-atom:atom-type (tree:data x)) y)))))
      (loop for node = (tree:first-child top-node)
              then (tree:next-sibling node) until (null node) do
              (format out-stream "~2t~a~%" (vpprint (tree:data node) nil)))))
  
  (defun get-audio-properties-atoms (mp4-file)
    "Get the audio property atoms from MP4-FILE.
  
negative.code:                    (list a b)))
  
                  ((member (atom-type parent)
                           (list +itunes-tempo+ +itunes-genre+)
                           :test #'string=)
                   (stream-read-u16 mp4-file))
  
                  ((string= (atom-type parent) +itunes-compilation+)
                   (stream-read-u8 mp4-file))
  
                  ((string= (atom-type parent) +itunes-cover-art+)
                   (stream-read-sequence mp4-file (- (atom-size me) 16)))
  
                  (t
                   (error "fell through all cases of ilst data atoms: parent-type = ~a"
                          (atom-type parent)))))))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AUDIO PROPERTY ATOMS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (defclass atom-trak (mp4-container-atom) ())
  