anchor.diff:      (move win (car pos) (+ (cadr pos) inptr))
       (refresh win)))
   
  -;; is this better than a form-specific method?
  +;; TODO: delete, replaced by (draw win form)
   (defun draw-form (win form)
     "Draw the form by drawing the fields, then moving the cursor to the current field."
     ;; TODO: "current" field or "active" field??
  
positive.code:   (with-accessors ((pos .position) (width .width) (inbuf .buffer) (inptr .fill-pointer)) field
      (clear-field window field)
      (add-string window (coerce (reverse inbuf) 'string) :attributes '(:underline))
      (move window (car pos) (+ (cadr pos) inptr)) ))
  
  ;; we have to make window a parameter because fields do not have a window slot
  (defmethod draw (window (form form))
    "Draw the form by drawing the fields, then moving the cursor to the current field."
    (declare (ignore window))
    ;; TODO: "current" field or "active" field??
    (with-accessors ((fields .fields) (current-field-number .current-field-number) (win .window)) form
      (loop for field in fields do
        ;; TODO: do we refresh in draw-field AND here?
        (draw-field win field))
      ;; after drawing the fields, reposition the cursor to the current field
      ;; ugly, we have to find a better way to do this
      (let* ((current-field (nth current-field-number fields))
             (pos (.position current-field)))
        (move win
              (car pos)
              (+ (cadr pos)
                 (.fill-pointer current-field))))
      (refresh win)))
  
  (defun draw-field (win field)
  
negative.code:     ;; this is the only place we set the attribute for the whole field
      (change-attributes win width '(:underline))))
  
  ;; TODO: do we need to refresh here?
  (defun update-cursor-position (win object)
    "Update the cursor position of object, which can be a form or a single field."
    (typecase object
      (field
       (with-accessors ((pos .position) (inptr .fill-pointer)) object
         (move win
               (car pos)
               (+ (cadr pos) inptr))))
      (form
       (with-accessors ((current-field .current-field)) object
         (update-cursor-position win current-field)))))
  
  (defgeneric draw (window object)
    (:documentation "Draw forms and their elements like fields and buttons."))
  