anchor.diff:  
   ;;; IO
   
  -(define (read-line)
  -  (defmacro buffer-size 1000)
  -  (define str (make-string buffer-size))
  -  (substring str 0 (syscall-read 0 str 0 buffer-size)))
  -
  -(define (write-substring stream str pos len)
  -  (stream str pos len))
  -
  -(define (write-string stream str)
  -  (stream str 0 (string-length str)))
  +(define (write-substring writer str pos len)
  +  (writer str pos len))
  +
  +(define (write-string writer str)
  +  (writer str 0 (string-length str)))
   
   ;;; String buffers
   
  
positive.code:          (set! pos (1- pos))
           (string-set! buf pos #\-))
          
          (write-substring stream buf pos (- buf-size pos)))))
  
  (define (print-string stream str)
    (if *print-readably*
        (begin
          (print-double-quote stream)
          (write-string stream str)
          (print-double-quote stream))
        (write-string stream str)))
  
  
  (define character-names '((#\Space . "Space")
                            (#\Newline . "Newline")))
  
  (define (print-char stream ch)
    (if *print-readably*
        (begin
         (write-string stream "#\\")
         (define name (assoc ch character-names))
         (write-string stream (if name
                                  (character-string ch)
                                  (cdr name))))
        (write-string stream (character-string ch))))
  
  (define (print-symbol stream sym)
    (define str (symbol-name sym))
    (write-substring stream str 0 (string-length str)))
  
  (define special-printed-forms
    '((false . "false")
  
negative.code:   (string-set! (cdr strbuf) buf-pos ch)
    (rplaca strbuf (1+ buf-pos)))
  
  (define (string-buffer-writer strbuf)
    (lambda (str pos len) (string-buffer-write strbuf str pos len)))
  
  (define (string-buffer-to-string strbuf)
  