anchor.diff:  		      `(,(structure-slot-form field name fn))))))
   	     (get ',name 'setf-foreign-object-components)
   	     (lambda (value object &optional (index 0))
  -	       (declare (ignore index))
   	       (setf
   		,@(iterate-foreign-structure
   		   fields
  
positive.code: 	       ptr)
  	     (get ',name 'foreign-object-components)
  	     (lambda (object &optional (index 0))
  	       (declare (ignore index))
  	       (,(option-from-name-and-options name-and-options :constructor 'list)
  		 ,@(iterate-foreign-structure
  		    fields
  
negative.code: 	    (funcall form field fn gn)
  	  (incf gn)))))
  
  (defun structure-slot-form (field structure-name fn)
    "A form for getting or setting the foreign slot value.
     The variables 'object and 'index are captured."
    (let ((form
  	 `(cffi:foreign-slot-value
  	   (cffi:mem-aref object ',structure-name index)
  	   ',structure-name ',(first field))))
      (if (field-count field nil)		; aggregate slot
  	`(object ,form ,(second field) ,fn)
  	;; simple slot
  	form)))
  
  (defmacro defcstruct (name-and-options &body fields)
    "A macro to define the struct to CFFI and to libffi simultaneously.
  