anchor.diff:                (event-gf event)
                 (cons window (loop repeat (event-arg-count event) collect t)))
           collect event))
  +
  +(defun enable-tick (window millis)
  +  (setf (tick-interval window) millis)
  +  (timer-func millis (callback tick-timer-cb) (id window)))
  +
  +(defun disable-tick (window)
  +  (setf (tick-interval window) nil))
   
   (defmethod display-window :around ((win base-window))
     (unless (slot-boundp win 'events)
  
positive.code:     (setq *id->window*
            (adjust-array *id->window* (1+ (id win)) :initial-element nil)))
    (setf (aref *id->window* (id win)) win)
    (call-next-method))
  
  (defmethod display-window ((win base-window))
    (values))
  
  (defmethod enable-event ((window base-window) event-name)
    (let ((event (find-event-or-lose event-name))) 
      (with-window window
        (register-callback event))
      (pushnew event (events window))
  
negative.code:   "Mapping of GLUT window IDs to instances of the BASE-WINDOW class.")
  
  (defvar *windows-with-idle-event* '())
  
  ;;;; Timers
  
  (defparameter *timer-functions* nil)
  
  (defcallback timer-cb :void ((id :int))
    (let ((function (cdr (assoc id *timer-functions*))))
      (when function
        (funcall function))))
  
  (defvar *timer-id-counter* 0)
  
  (defun schedule-timer (millis function)
    (setf *timer-id-counter* (logand (1+ *timer-id-counter*) #xFFFFFFFF))
    (push (cons *timer-id-counter* function) *timer-functions*)
    (timer-func millis (callback timer-cb) *timer-id-counter*))
  
  ;;;; Events
  
  