anchor.diff:  
   (in-package :lisp-chat-server)
   
  +;; time related
  +(defparameter *uptime* (multiple-value-list (get-decoded-time)))
  +(defparameter *day-names*
  +  '("Monday" "Tuesday" "Wednesday"
  +    "Thursday" "Friday" "Saturday"
  +    "Sunday"))
   
   ;; global vars
   (defparameter *clients* nil)
   (defparameter *messages-stack* nil)
   (defparameter *messages-log* nil)
  -(defparameter *commands-names* '("/users" "/help" "/log" "/quit"))
  +(defparameter *commands-names* '("/users" "/help" "/log" "/quit" "/uptime"))
  +
   
   ;; thread control
   (defvar *message-semaphore* (sb-thread:make-semaphore :name "message semaphore" :count 0))
  -(defvar *message-mutex* (sb-thread:make-mutex :name "message mutex"))
   (defvar *client-mutex* (sb-thread:make-mutex :name "client list mutex"))
  -
   
   
   (defstruct message from content time)
  
positive.code: 
  (defun main ()
    (let ((socket-server (socket-listen *host* *port*)))
      (handler-case (server-loop socket-server)
        (usocket:address-in-use-error () (format t "Address ~a\@~a already busy."
                                                 *host*
                                                 *port*))
        (sb-sys:interactive-interrupt () (format t "Closing the server...")))
      (socket-close socket-server))
    (sb-ext:exit))
  
negative.code:          (message (make-message :from from :content content :time time)))
      (formated-message message)))
  
  (defun call-command-by-name (string)
    (funcall (find-symbol (string-upcase string) :lisp-chat-server)))
  
  ;; user commands prefixed with /
  (defun /users ()
    (command-message (format nil "~{~a~^, ~}" (mapcar #'client-name *clients*))))
  