anchor.diff:    (values strings)
     (nil (or null gerror) :out))
   
  -(defun pixbuf-save (pixbuf filename type &rest options)
  +(defun %pixbuf-save-options (options)
     (let ((keys (make-array 0 :adjustable t :fill-pointer t))
   	(values (make-array 0 :adjustable t :fill-pointer t)))
       (loop 
  -     as (key value . rest) = options then rest
  -     while key
  +     for (key value) on options by #'cddr
        do (vector-push-extend (string-downcase key) keys)
           (vector-push-extend 
   	 (etypecase value 
  
positive.code: 	   (symbol (string-downcase value))
  	   (number (format nil "~A" value)))
  	 values))
      (multiple-value-bind (ok-p gerror)
  	(%pixbuf-savev pixbuf filename (string-downcase type) keys values)
        (unless ok-p
  	(signal-gerror gerror)))))
  
  (defbinding pixbuf-new-from-xpm-data () (referenced pixbuf)
    (data (vector string)))
  
  (defbinding %pixbuf-new-subpixbuf () pixbuf ;; or (referenced pixbuf)?
    (pixbuf pixbuf)
  
negative.code:   (red (unsigned 8))
    (green (unsigned 8))
    (blue (unsigned 8)))
  
  ;; The purpose of this function is to be able to share pixel data
  ;; between GdkPixbufs and Cairo image surfaces.
  #+nil
  (defun pixbuf-swap-rgb (pixbuf)
    (assert (= (pixbuf-bits-per-sample pixbuf) 8))
    (assert (= (pixbuf-n-channels pixbuf) 4))
    (assert (pixbuf-has-alpha-p pixbuf))
    (let ((pixels (pixbuf-pixels pixbuf))
  	(stride (pixbuf-rowstride pixbuf))
  	(n-channels (pixbuf-n-channels pixbuf)))
      (loop for y from 0 below (pixbuf-height pixbuf) do
       (let ((row-offset (* y stride)))
         (loop for x from 0 below (pixbuf-width pixbuf) do
          (let* ((offset (+ row-offset (* n-channels x)))
  	       (p0 (ref-uint-8 pixels offset))
  	       (p2 (ref-uint-8 pixels (+ offset 2))))
  	  (setf (ref-uint-8 pixels offset) p2)
  	  (setf (ref-uint-8 pixels (+ offset 2)) p0)))))))
  
  (defbinding (pixbuf-swap-rgb "clg_gdk_pixbuf_swap_rgb") () nil
    pixbuf)
  