anchor.diff:                        :output t
                         :auto-close t))
   
  +(defun connect (method &key
  +                         (device "/dev/rfcomm")
  +                         (host "localhost")
  +                         (port 8888))
  +  "Connects to a Gypsum server. Method must be one of :TCP or :RFCOMM. If
  +:RFCOMM is specified, then the client will connect via BlueZ's rfcomm mechanisms
  +as done via `connect-via-rfcomm'. If :TCP is specified, then the client will
  +connect via TCP, as per `connect-via-tcp'.
  +
  +Keyword flags defined are:
  +  :device
  +    The device to connect via RFCOMM with. Defaults to /dev/rfcomm0.
  +
  +  :host
  +    The hostname to connect to via TCP. Defaults to localhost.
  +
  +  :port
  +    The port to connect to via TCP. Defaults to 8888.
  +
  +Returns the newly opened command stream."
  +  (clrhash *cached-params-hash-table*)
  +  (setf *command-stream*
  +        (cond ((eq method :tcp) (connect-via-tcp :host host :port port))
  +              ((eq method :rfcomm) (connect-via-rfcomm :device device))
  +              (t (error "Expected either :TCP or :RFCOMM as a connect method.")))))
  +
   (defun disconnect ()
     "Closes and disconnects the Gypsum command stream and (if connected) TCP
   socket."
  
positive.code:   (when *tcp-socket*
      (socket-close *tcp-socket*)
      (setf *tcp-socket* nil)))
  
  (defun draw-it (stream &rest forms)
    "Sends a set of FORMS to the given Gypsum-connected STREAM for drawing."
    (format stream "~{~S~%~}" (deduplicate-params-in-body forms))
    (finish-output stream)
    (values))
  
  (defun deduplicate-params-in-form (form)
    "Iterates through the a Gypsum parameter list of the form (:field value
  
negative.code: 
  (defvar *write-lock* (make-mutex :name "Gypsum display write lock")
    "Write lock used to serialize calls to `with-gypsum-context'.")
  
  (defun connect-via-rfcomm (&key (device "/dev/rfcomm0"))
    "Connects to a Gypsum server via a BlueZ RFCOMM device. If DEVICE is
  