anchor.diff:  
   ;;; Surfaces
   
  +(defmethod make-proxy-instance :around ((class surface-class) location 
  +					&rest initargs)
  +  (let ((class (find-class (%surface-get-type location))))
  +    (apply #'call-next-method class location initargs)))
  +
  +(defbinding %surface-get-type () surface-type
  +  (location pointer))
  +
   (defbinding %surface-reference () pointer
     (location pointer))
   
   (defbinding %surface-destroy () nil
     (location pointer))
  +
  +(defmethod reference-function ((class surface-class))
  +  (declare (ignore class))
  +  #'%surface-reference)
  +
  +(defmethod unreference-function ((class surface-class))
  +  (declare (ignore class))
  +  #'%surface-destroy)
  +
  +(defbinding %surface-set-user-data (surface key data-id) status
  +  (surface pointer)
  +  ((quark-intern key) pointer-data)
  +  (data-id pointer-data)
  +  (user-data-destroy-callback callback))
  +
  +(defmethod (setf user-data) (data (surface surface) key)
  +  (%surface-set-user-data (foreign-location surface) key (register-user-data data))
  +  data)
  +
  +(defbinding %surface-get-user-data () pointer-data
  +  (surface surface)
  +  (key pointer-data))
  +
  +(defmethod user-data ((surface surface) key)
  +  (find-user-data (%surface-get-user-data surface (quark-intern key))))
   
   (defbinding surface-create-similar () surface
     (other surface)
  
positive.code:       (multiple-value-call #'scale cr (device-to-user-distance cr 1.0))
      (multiple-value-bind (x y) 
  	(multiple-value-call #'user-to-device cr (get-current-point cr))
        (identity-matrix cr)
        (translate cr x y))))
  
  (defbinding rotate () nil
  
negative.code:   (xy double-float) (yy double-float) 
    (x0 double-float) (y0 double-float))
  
  (defbinding matrix-init-identity (&optional (matrix (make-instance 'matrix))) nil
    (matrix matrix :in/return))
  
  (defbinding matrix-init-translate () nil
  