anchor.diff:  NAME ::= type name
   OPTIONS ::= list of options
   VALS ::= list of forms (symbol integer)*."
  -  (declare (ignore options))
     `(progn
        (defxdecoder ,name (blk)
          (let ((val (decode-int32 blk)))
  
positive.code:                                     (destructuring-bind (vname vval) v
                                        `((eq sym ',vname) ,vval)))
                                    vals)
                          (t (error "Unexpected enum value ~A expexted one of ~A"
                                    sym
                                    ',(mapcar #'car vals))))))))
  
negative.code:                        (destructuring-bind (vname vval) v
                           `((= val ,vval) ',vname)))
                       vals)
             ,(if (cadr (assoc :exclusive options))
  		`(t (error "Unexpected enum value ~A expected one of ~A"
  			 val
  			 ',(mapcar #'cadr vals)))
  		`(t val)))))
       (defxencoder ,name (blk sym)
         (encode-uint32 blk
                        (cond
  