anchor.diff:  ;;; conditions
   
   (define-condition connection-closed ()
  -  ((client :initarg :client))
  +  ((client :initarg :client :documentation "Client whose connection was closed"))
     (:report (lambda (condition stream)
   	     (with-slots (client) condition
   	       (format stream "Connection closed for ~a" client))))
  -  (:documentation "Signalled by `disconnect'.
  +  (:documentation "Signalled by the @c(disconnect) function.
   
   Disconnecting is the default action whenever an error occurs, so this
   signal can for example be handled to reconnect."))
   
   (define-condition connection-lost (error)
  -  ((client :initarg :client))
  +  ((client :initarg :client :documentation "Client whose connection was lost"))
     (:report (lambda (condition stream)
   	     (with-slots (client) condition
   	       (format stream "Connection lost for ~a" client))))
  
positive.code: message from the server."))
  
  (define-condition connection-failed (error)
    ((client :initarg :client)
     (error :initarg error))
    (:report (lambda (condition stream)
  	     (with-slots (client) condition
  	       (format stream "Connection failed for ~a" client))))
    (:documentation "Signalled by `connect'."))
  
  ;;; macros
  
  (defmacro define-handler ((command class-spec prefix-var arguments-var)
  			  &body body)
    "Define handling for /command/.
  
  This is currently a convenience for specializing on `handle'.  An
  example is the handler for PING messages (which by default is the only
  handler specialization).
  
  --
  ;; (define-handler (:ping client prefix arguments)
  ;;    (send-pong client (first arguments)))
  --
  
  If you wanted to use a different variable-name for the client
  variable, you could also have written it as
  
  --
  ;; (define-handler (:ping (client client) prefix arguments)
  ;;   (send-pong client (first arguments)))
  --
  "
    (let ((%command-var (gensym "g-command-var")))
      `(defmethod handle ((,%command-var (eql ,command))
  
negative.code: 
  (defun parse-raw-message (raw-message)
    "Return a list on the form (prefix command arguments).
  @begin(enum)
  @item(prefix) can be @c(nil), or servername / ( nickname [ [ \"!\" user ] \"@\" host ]
  See also the @c(parse-prefix) function.
  
  @item(command) is a keyword either made from the alpha-characters, or a
  keyword looked up with @c(find-reply-name).
  
  @item(arguments) is a list of the command arguments.
  @end(enum)"
    (multiple-value-bind (match-string match-vector)
        (cl-ppcre:scan-to-strings *message-scanner* raw-message)
      (declare (ignore match-string))
  