z_axis | 21 Apr 2012 03:44
Favicon

[STUMP] Why doesnot mpd module support CCL ?

The mpd module works great with SBCL. But it seems that the mpd module  
doesnot support CCL.

Would anyone knowing CCL like to hack it to support CCL ?

Sincerely!
Lucas Pandolfo | 21 Apr 2012 05:12
Picon
Gravatar

Re: [STUMP] Why doesnot mpd module support CCL ?

On 20 April 2012 22:44, z_axis <z_axis <at> 163.com> wrote:
The mpd module works great with SBCL. But it seems that the mpd module doesnot support CCL.

Would anyone knowing CCL like to hack it to support CCL ?


Sincerely!

If you look at the source code you can see

 #-(or sbcl clisp) (error "unimplemented")

So it won't work with ccl. Mainly because it relies on socket support in these implementations. To make it more portable you should remove the conditional code like this one:

#+clisp
(handler-case (socket:socket-connect *mpd-port* *mpd-server*
                                     :element-type 'character)
               ((or system::simple-os-error error)
                (err)
                  (format t  "Error connecting to mpd: ~a~%" err)))
#+sbcl
(handler-case (let ((s (make-instance 'sb-bsd-sockets:inet-socket
                                      :type :stream :protocol :tcp)))
                (sb-bsd-sockets:socket-connect s *mpd-server*
                                               *mpd-port*)
                (sb-bsd-sockets:socket-make-stream s
                                                   :input t
                                                   :output t
                                                   :buffering :none))
              ((or simple-error error)
               (err)
                 (format t  "Error connecting to mpd: ~a~%" err)))

and reimplement it using usocket.
_______________________________________________
Stumpwm-devel mailing list
Stumpwm-devel <at> nongnu.org
https://lists.nongnu.org/mailman/listinfo/stumpwm-devel
Vitaly Mayatskikh | 22 Apr 2012 07:31
Picon
Gravatar

Re: [STUMP] Why doesnot mpd module support CCL ?

At Sat, 21 Apr 2012 09:44:15 +0800, z_axis wrote:

> The mpd module works great with SBCL. But it seems that the mpd module  
> doesnot support CCL.
> 
> Would anyone knowing CCL like to hack it to support CCL ?

From my local git repo:

===File /tmp/123============================================
commit 1e206af2f3dd40060c8ef3f169af081d5fd646a6
Author: Vitaly Mayatskikh <v.mayatskih <at> gmail.com>
Date:   Sun Aug 7 20:16:20 2011 -0400

    contrib/mpd.lisp: added support for Clozure CL.

diff --git a/contrib/mpd.lisp b/contrib/mpd.lisp
index 954fe01..1013e33 100644
--- a/contrib/mpd.lisp
+++ b/contrib/mpd.lisp
 <at>  <at>  -48,7 +48,7  <at>  <at> 

 ;;; CODE:

-#-(or sbcl clisp) (error "unimplemented")
+#-(or sbcl clisp ccl) (error "unimplemented")

 (in-package :stumpwm)

 <at>  <at>  -108,7 +108,7  <at>  <at> 
 ;;mpd client
 (defparameter *mpd-socket* nil)
 (defparameter *mpd-server*
-  #+clisp
+  #+(or clisp ccl)
   "localhost"
   #+sbcl
   #(127 0 0 1)
 <at>  <at>  -138,10 +138,11  <at>  <at> 
   (with-mpd-connection
    (#+clisp
     ext:write-char-sequence
-    #+sbcl
+    #+(or sbcl ccl)
     write-sequence
     (concatenate  'string command (string #\Newline))
-    *mpd-socket*)))
+    *mpd-socket*)
+    (force-output *mpd-socket*)))

 (defun mpd-send-command (cmd)
   (mpd-send cmd)
 <at>  <at>  -183,24 +184,26  <at>  <at> 
 (defun init-mpd-connection ()
   "Connect to mpd server"
     (setf *mpd-socket*
+        (handler-case
           #+clisp
-        (handler-case (socket:socket-connect *mpd-port* *mpd-server*
-                                             :element-type 'character)
-                      ((or system::simple-os-error error)
-                       (err)
-                         (format t  "Error connecting to mpd: ~a~%" err)))
+          (socket:socket-connect *mpd-port* *mpd-server*
+            :element-type 'character)
           #+sbcl
-          (handler-case (let ((s (make-instance 'sb-bsd-sockets:inet-socket
-                                                :type :stream :protocol :tcp)))
-                          (sb-bsd-sockets:socket-connect s *mpd-server*
-                                                         *mpd-port*)
-                          (sb-bsd-sockets:socket-make-stream s
-                                                             :input t
-                                                             :output t
-                                                             :buffering :none))
-                        ((or simple-error error)
-                         (err)
-                       (format t  "Error connecting to mpd: ~a~%" err))))
+          (let ((s (make-instance 'sb-bsd-sockets:inet-socket
+                                  :type :stream :protocol :tcp)))
+            (sb-bsd-sockets:socket-connect s *mpd-server* *mpd-port*)
+            (sb-bsd-sockets:socket-make-stream s
+                                               :input t
+                                               :output t
+                                               :buffering :none))
+          #+ccl
+          (let ((s (ccl:make-socket :connect :active :format :text
+                                    :remote-host *mpd-server*
+                                    :remote-port *mpd-port*)))
+            (setf (stream-external-format s) :utf-8)
+            s)
+          (error (err)
+            (format t "Error connecting to mpd: ~a~%" err))))
   (when *mpd-socket*
     (when *mpd-timeout*
       (setf *mpd-timer*
============================================================

--

-- 
wbr, Vitaly

Gmane