anchor.diff:               (let ((gval (gensym)))
                  `(let ((,gval val))
                     ,@(mapcar (lambda (slot)
  -                              (destructuring-bind (slot-name slot-type) slot
  -                                (declare (ignore slot-name))
  +                              (destructuring-bind (slot-name slot-type &rest slot-options) slot
  +                                (declare (ignore slot-name slot-options))
                                   `(progn
                                      (,(generate-encoder-name slot-type) blk (car ,gval))
                                      (setf ,gval (cdr ,gval)))))
  
positive.code: (defmacro defxstruct (name options &rest slots)
    "Define a struct and associated XDR encoder and decoder.
  NAME ::= symbol naming the structure.
  OPTIONS ::= {OPTION-SPEC}*
  OPTION-SPEC ::= (:MODE :STRUCT|:LIST|:PLIST)
  SLOTS :: list of forms (slot-name slot-type)* defining each slot.
  
  If the :MODE is :STRUCT (the default) a DEFSTRUCT form will be define the 
  type structure to be used as input/output values.
  If the :MODE is :LIST, the values are expected to be an ordered list containing 
  each of the structure slots.
  If the :MODE is :PLIST, the values are expected to be property lists containing
  values defined by the slot names."
    (let ((mode (or (cadr (assoc :mode options)) :struct)))
      `(progn
         ,@(when (eq mode :struct)
             `((defstruct ,name
                 ,@(mapcar (lambda (slot)
                             (destructuring-bind (slot-name slot-type &rest slot-args) slot
                               (declare (ignore slot-type))
                               `(,slot-name ,@slot-args)))
                           slots))))
       
         (defxdecoder ,name (blk)
           ,(ecase mode
  
negative.code:                 ret))
              (:list
               `(list ,@(mapcar (lambda (slot)
                                  (destructuring-bind (slot-name slot-type &rest slot-options) slot
                                    (declare (ignore slot-name slot-options))
                                    `(,(generate-decoder-name slot-type) blk)))
                                slots)))
              (:plist
               `(list ,@(mapcan (lambda (slot)
                                  (destructuring-bind (slot-name slot-type &rest slot-options) slot
  				  (declare (ignore slot-options))
                                    (list `',slot-name `(,(generate-decoder-name slot-type) blk))))
                                slots)))))
  
  