anchor.diff:    (declare (type string string)
   	   (type (array (unsigned-byte 8) *) bytes)	   
   	   (type fixnum start1 end1 start2 end2))
  -  (with-writing-function (put-byte current)
  +  (with-buffer-accessor (:writer put-byte :current current)
         (bytes start2 end2 :element-type (unsigned-byte 8))
       (loop for i of-type fixnum from start1 below end1
          as c of-type character = (char string i)
  
positive.code: 
  (defun decode-unit* (state read-func)
    (declare (type read-func-type read-func))
    ;; TODO: handle errors
    ;; TODO: restore state if error??
    ;; -- bind state to dynamic variables? bind locally? use internal slot? (BAD)
    (let ((code-point 
  	 (ecase (scsu-state-mode state)
  	   (:single-byte-mode (decode-unit*/single-byte-mode state read-func))
  	   (:unicode-mode (decode-unit*/unicode-mode state read-func)))))
      (declare (type (unsigned-byte 16) code-point))
      (cond ((<= #xD800 code-point #xDBFF) ; high surrogate
  	   (let ((low (decode-unit* state read-func))) ; TODO: catch error.
  	     (declare (type (unsigned-byte 16) low))
  	     (unless (<= #xDC00 low #xDFFF)
  	       (error 'scsu-decode-error
  
negative.code: 	 (ret-string (first ret-list)))
      (declare (type list ret-list)
  	     (type string ret-string))	     
      (apply #'values (char ret-string 0) (rest ret-list)))) ; TODO: use a error handler, if no char decoded.
  
  
  ;;; Encode
  