anchor.diff:  
   (defun create-irc-client ()
     "Open an IRC window."
  -  (sys.graphics::window-set-visibility (sys.graphics::make-window "Unconnected IRC" 640 400 'irc-client) t))
  +  (sys.graphics::window-set-visibility (sys.graphics::make-window "IRC" 640 400 'irc-client) t))
   
   (setf (gethash (name-char "F2") sys.graphics::*global-keybindings*) 'create-irc-client)
  
positive.code:            (values (second known) (third known)))
            (t (error "Unknown server ~S~%" name)))))
  
  (defclass irc-client (sys.graphics::text-window)
    ((command-process :reader irc-command-process)
     (receive-process :reader irc-receive-process)
     (connection :initform nil :accessor irc-connection)
     (display :accessor irc-display*)))
  
  (defmethod initialize-instance :after ((instance irc-client))
    (let ((cmd (sys.int::make-process "IRC command"))
          (rcv (sys.int::make-process "IRC receive")))
      (setf (slot-value instance 'command-process) cmd)
  
negative.code:     (sys.int::process-enable cmd)
      (sys.int::process-enable rcv)))
  
  ;;; The IRC-CLIENT stream is used to read/write from the input line, not from
  ;;; the display.
  ;;; Edit-stream expects the stream to be able to do input and output, so
  ;;; *STANDARD-INPUT* is bound to this stream (with line-editing) and
  ;;; *STANDARD-OUTPUT* is bound to the display text widget (no input).
  ;;; READ-CHAR is provided by Character-Input-Mixin.
  (defmethod sys.int::stream-write-char (character (stream irc-client))
    (sys.int::stream-write-char character (irc-input stream))
    (setf sys.graphics::*refresh-required* t))
  (defmethod sys.int::stream-start-line-p ((stream irc-client))
    (sys.int::stream-start-line-p (irc-input stream)))
  (defmethod sys.int::stream-cursor-pos ((stream irc-client))
    (sys.int::stream-cursor-pos (irc-input stream)))
  (defmethod sys.int::stream-move-to ((stream irc-client) x y)
    (sys.int::stream-move-to (irc-input stream) x y))
  (defmethod sys.int::stream-character-width ((stream irc-client) character)
    (sys.int::stream-character-width (irc-input stream) character))
  (defmethod sys.int::stream-compute-motion ((stream irc-client) string &optional (start 0) end initial-x initial-y)
    (sys.int::stream-compute-motion (irc-input stream) string start end initial-x initial-y))
  (defmethod sys.int::stream-clear-between ((stream irc-client) start-x start-y end-x end-y)
    (sys.int::stream-clear-between (irc-input stream) start-x start-y end-x end-y)
    (setf sys.graphics::*refresh-required* t))
  (defmethod sys.int::stream-element-type* ((stream irc-client))
    'character)
  
  (defmethod sys.graphics::window-close-event ((irc irc-client))
    (sys.int::process-disable (irc-command-process irc))
    (sys.int::process-disable (irc-receive-process irc))
    (when (irc-connection irc)
      (close (irc-connection irc)))
    (sys.graphics::close-window irc))
  
  (defun irc-receive (irc)
    (let ((*standard-input* irc)
          (*standard-output* (irc-display irc))
          (*error-output* (irc-display irc))
          (*query-io* (make-two-way-stream irc (irc-display irc)))
          (*debug-io* (make-two-way-stream irc (irc-display irc))))
      ;; Should close the connection here...
      (with-simple-restart (abort "Give up")
        (sys.int::process-wait "Awaiting connection" (lambda () (irc-connection irc)))
        (let ((connection (irc-connection irc)))
          (loop (let ((line (read-line connection)))
                  (multiple-value-bind (prefix command parameters)
                      (decode-command line)
                    (let ((fn (gethash command *command-table*)))
                      (cond (fn (funcall fn prefix parameters))
                            ((keywordp command)
                             (format t "[~A] -!- ~A~%" prefix (car (last parameters))))
                            ((integerp command)
                             (format t "[~A] ~D ~A~%" prefix command parameters))
                            (t (write-line line)))))))))))
  
  (defvar *top-level-commands* (make-hash-table :test 'equal))
  
  