anchor.diff:    (alexandria:when-let ((line (read-line stream NIL)))
       (string-trim '(#\Return #\Newline #\Space) line)))
   
  +(defun split (char string)
  +  (let ((parts ())
  +        (output (make-string-output-stream)))
  +    (flet ((commit ()
  +             (push (get-output-stream-string output) parts)
  +             (setf output (make-string-output-stream))))
  +      (loop for current across string
  +            do (if (char= char current)
  +                   (commit)
  +                   (write-char current output))
  +            finally (commit)))
  +    (nreverse parts)))
  +
   (defun read-vicon-header (stream &key (file (ignore-errors (pathname stream))))
     (destructuring-bind (description resolution markers fields metrics)
         (loop repeat 5
  
positive.code:         do (unless (string= line "")
               (with-simple-restart (skip "Skip processing the line ~s" line)
                 (let ((frame (with-retry-restart (retry "Retry parsing the line ~s" line)
                                (parse-frame (cl-ppcre:split "," line) vicon-file))))
                   (with-retry-restart (retry "Retry calling the frame mapping function.")
                     (funcall function frame)))))))
  
  
negative.code:      :description description
       :resolution (parse-integer resolution)
       :markers (parse-marker-list
                 (cddr (split #\, markers))
                 (cddr (split #\, fields))
                 (cddr (split #\, metrics))))))
  
  (defun map-read-vicon-frames (stream vicon-file function)
    (loop for line = (read-clean-line stream)
  