anchor.diff:  
   ;;; 22.2 Extended Input Streams
   
  -(define-protocol-class extended-input-stream 
  +(define-protocol-class extended-input-stream
       (fundamental-character-input-stream)
     ())
   
  
positive.code: 
  (defmacro define-protocol-class (name super-classes &optional slots &rest options)
    (let* ((sym-name (symbol-name name))
  	 (protocol-predicate
  	  (intern (concatenate 'string
  			       sym-name
  			       (if (find #\- sym-name) "-" "")
  			       (symbol-name '#:p))))
  	 (predicate-docstring
  	  (concatenate 'string
  		       "Protocol predicate checking for class " sym-name)))
      `(progn
         (defclass ,name ,super-classes ,slots ,@options)
  
         (let ((the-class (find-class ',name)))
           (setf (documentation the-class 'type) "CLIM protocol class")
           (defmethod initialize-instance :after ((object ,name) &key &allow-other-keys)
             (when (eq (class-of object) the-class)
               (error "~S is a protocol class and thus can't be instantiated" ',name))))
  
         (defgeneric ,protocol-predicate (object)
  	 (:method ((object t))
  	   nil)
  	 (:method ((object ,name))
  	   t)
  	 (:documentation ,predicate-docstring))
  
         ',name)))
  
  
negative.code: ;;; C.1 Encapsulating Streams
  (define-protocol-class encapsulating-stream ()
    ())
  