anchor.diff:  
   (defmethod lock-port ((p person) (voice-out voice-out-port)
   		      (vo voice))
  -  (setf (lock-of voice-out) t)
     (list (make-instance 'event
   		       :owner p
   		       :time (+ (clock-of p)
  
positive.code:     :type voice-in-port)
     (voice-out
      :accessor voice-out-of
      :type voice-out-port)))
  
  
  (defclass can (simulator)
  
negative.code: 				 phrases))))
  
  
  (defmethod output ((p person) (voice-out voice-out-port) (vo voice))
    (let ((timeout-event (make-instance 'event
  				      :owner p
  				      :time (+ 100
  					       (clock-of p))
  				      :fn #'reply-timeout)))
      (setf (reply-timeout-of p)
  	  timeout-event)
      (handler-bind ((port-not-connected #'abort)
  		   (out-port-busy #'wait)
  		   (in-port-busy #'abort))
        (cons timeout-event (call-next-method)))))
  
  
  (defmethod reply-timeout ((p person))
    (error "NO REPLY! AAAAAAARGH!"))
  
  
  (defmethod start-talking ((p person))
    "When a person starts talking, expects a reply in a given time.
     If he/she gets no reply in that time, bad things will happen!"
    (list (make-instance 'event
  		       :owner p
  		       :time (clock-of p)
  		       :fn #'output
  		       :args (list (voice-out-of p)
  				   (random-phrase)))))
  
  
  (defmethod handle-input ((p person) (in voice-in-port)
  			 (vo voice))
    (call-next-method)
    (remove-child p vo)
    (when (slot-boundp p 'reply-timeout)
      (de-sim::cancel-event (reply-timeout-of p)))
    nil)
  
  
  