commit ba99919d4db33b4eca1d91e047308b4063788eb7
parent c903f730270fb685368df4281738320bc1b7b7e9
Author: Tomas Hlavaty <tom@logand.com>
Date: Sat, 3 Oct 2015 11:49:17 +0200
try cmucl port
but still rather broken
Diffstat:
5 files changed, 58 insertions(+), 22 deletions(-)
diff --git a/concurrency.lisp b/concurrency.lisp
@@ -34,21 +34,23 @@
(in-package :rw.concurrency)
(defmacro with-lock ((lock) &body body)
- #-(or allegro ccl ecl mkcl sbcl)
+ #-(or allegro ccl ecl mkcl cmucl sbcl)
(error "RW.CONCURRENCY:WITH-LOCK not ported")
#+allegro `(mp:with-process-lock (,lock) ,@body)
#+ccl `(ccl:with-lock-grabbed (,lock) ,@body)
#+ecl `(mp:with-lock (,lock) ,@body)
#+mkcl `(mt:with-lock (,lock) ,@body)
+ #+cmucl `(mp:with-lock-held (,lock) ,@body)
#+sbcl `(sb-concurrency::with-mutex (,lock) ,@body))
(defun make-lock (name)
- #-(or allegro ccl ecl mkcl sbcl)
+ #-(or allegro ccl ecl mkcl cmucl sbcl)
(error "RW.CONCURRENCY:MAKE-LOCK not ported")
#+allegro (mp:make-process-lock :name name)
#+ccl (ccl:make-lock name)
#+ecl (mp:make-lock :name name)
#+mkcl (mt:make-lock :name name)
+ #+cmucl (mp:make-lock name :kind :error-check)
#+sbcl (sb-concurrency::make-mutex :name (string name)))
(defun make-semaphore ()
@@ -107,12 +109,13 @@
;; (funcall q)
(defun make-thread (name fn)
- #-(or allegro ccl ecl mkcl sbcl)
+ #-(or allegro ccl ecl mkcl cmucl sbcl)
(error "RW.CONCURRENCY:MAKE-THREAD not ported")
#+allegro (mp:process-run-function name fn)
#+ccl (ccl:process-run-function name fn)
#+ecl (mp:process-run-function name fn)
#+mkcl (mt:thread-run-function name fn)
+ #+cmucl (mp:make-process fn :name name)
#+sbcl (sb-concurrency::make-thread fn :name (string name)))
(defun make-program-server (command args writer reader)
diff --git a/demo-zappel.lisp b/demo-zappel.lisp
@@ -193,7 +193,7 @@
;;(start)
(defun save-image ()
- #-(or ccl sbcl)
+ #-(or ccl cmucl sbcl)
(error "TODO RW.DEMO.ZAPPEL::SAVE-IMAGE")
#+ccl ;; TODO no debug on ^C
(ccl:save-application "cl-rw-demo-zappel"
@@ -206,6 +206,20 @@
(loop (sleep 1)))
(condition ()
(ccl:quit 1)))))
+ #+cmu
+ (ext:save-lisp "cl-rw-demo-zappel"
+ :executable t
+ :batch-mode t
+ :print-herald nil
+ :process-command-line nil
+ :load-init-file nil
+ :init-function (lambda ()
+ (handler-case
+ (progn
+ (start)
+ (loop (sleep 1)))
+ (condition ()
+ (ext:quit)))))
#+sbcl
(sb-ext:save-lisp-and-die "cl-rw-demo-zappel"
:executable t
diff --git a/os.lisp b/os.lisp
@@ -42,7 +42,7 @@
(when error-plist
(or (cdr (assoc code error-plist)) ""))
args)))))
- #-(or allegro ccl ecl mkcl sbcl cmu clisp)
+ #-(or allegro ccl ecl mkcl sbcl cmucl clisp)
(error "RW.OS:MAKE-PROGRAM not ported")
#+allegro
(multiple-value-bind (stream b p)
@@ -158,24 +158,24 @@
(sb-ext:process-output p)))
(:wait (sb-ext:process-wait p))
(:close (sb-ext:process-close p)))))
- #+cmu
+ #+cmucl
(let ((p (ext:run-program cmd
args
:input input
:output output
:error nil
:wait nil)))
- (let ((status (sb-ext:process-status p)))
+ (let ((status (ext:process-status p)))
(if input
(assert (eq :running status))
(assert (member status '(:running :exited)))))
(lambda (msg)
(ecase msg
- (:fail (fail (nth-value 2 (sb-ext:process-status p))))
- (:status-and-code (sb-ext:process-status p))
- (:streams (values (sb-ext:process-input p)
- (sb-ext:process-output p)))
- (:wait (sb-ext:process-wait p))
+ (:fail (fail (nth-value 2 (ext:process-status p))))
+ (:status-and-code (ext:process-status p))
+ (:streams (values (ext:process-input p)
+ (ext:process-output p)))
+ (:wait (ext:process-wait p))
(:close (ext:process-close p)))))
#+clisp ;; TODO how to binary io? how to get exit code?
(cond
diff --git a/socket.lisp b/socket.lisp
@@ -43,9 +43,9 @@
(defstruct (ipv6-address (:constructor %make-ipv6-address)) native string)
(defun next-ipv4-address (r)
- (#-(or allegro ccl)
+ (#-(or allegro ccl cmucl)
ipv4-integer-to-vector
- #+(or allegro ccl)
+ #+(or allegro ccl cmucl)
progn
(flet ((one ()
(cond
@@ -142,9 +142,9 @@
;;(make-ipv4-address 0)
(defun next-ipv6-address (r)
- (#-(or allegro ccl)
+ (#-(or allegro ccl cmucl)
ipv6-integer-to-vector
- #+(or allegro ccl)
+ #+(or allegro ccl cmucl)
progn
(flet ((chain (n)
(loop
@@ -258,11 +258,13 @@
(ipv6-address (ipv6-address-native x)))))
(defun close-socket (socket)
- #-(or allegro ccl ecl mkcl sbcl)
+ #-(or allegro ccl ecl mkcl cmucl sbcl)
(error "RW.SOCKET::CLOSE-SOCKET not ported")
;; clisp socket:socket-server-close?
#+(or allegro ccl)
(close socket)
+ #+cmucl
+ (ext:close-socket socket)
#+(or ecl sbcl mkcl)
(sb-bsd-sockets:socket-close socket))
@@ -274,7 +276,7 @@
`(call-with-socket ,socket (lambda (,var) ,@body)))
(defun make-tcp-server-socket (local-host local-port &key backlog)
- #-(or allegro clisp sbcl ecl mkcl ccl)
+ #-(or allegro clisp sbcl ecl mkcl cmucl ccl)
(error "RW.SOCKET:MAKE-TCP-SERVER-SOCKET not ported")
#+allegro
(socket:make-socket :connect :passive
@@ -298,6 +300,9 @@
local-port)
(sb-bsd-sockets:socket-listen x (or backlog 5))
x)
+ #+cmucl
+ (ext:create-inet-listener local-port :stream
+ :host (ipv4-address-native local-host))
#+ccl
(ccl:make-socket :connect :passive
:address-family :internet
@@ -308,7 +313,7 @@
:reuse-address t))
(defun make-tcp-client-socket (remote-host remote-port)
- #-(or allegro clisp sbcl ecl mkcl ccl)
+ #-(or allegro clisp sbcl ecl mkcl cmucl ccl)
(error "RW.SOCKET:MAKE-TCP-CLIENT-SOCKET not ported")
#+allegro
(socket:make-socket :connect :active
@@ -330,6 +335,9 @@
remote-port)
(sb-bsd-sockets:socket-make-stream x :input t :output t ;;:buffering :none
:element-type :default))
+ #+cmucl
+ (let ((x (ext:connect-to-inet-socket remote-host remote-port)))
+ (sys:make-fd-stream x :input x :output x :element-type '(unsigned-byte 8)))
#+ccl
(ccl:make-socket :connect :active
:address-family :internet
@@ -381,7 +389,7 @@
;; fd
(defun accept (socket)
- #-(or allegro clisp sbcl ecl mkcl ccl)
+ #-(or allegro clisp sbcl ecl mkcl cmucl ccl)
(error "RW.SOCKET:ACCEPT not ported")
#+allegro
(socket:accept-connection socket)
@@ -392,6 +400,13 @@
:input t
:output t
:auto-close t)
+ #+cmucl
+ (ext:accept-network-stream socket)
+ #+nil
+ (let ((x (ext:accept-tcp-connection socket)))
+ (ext:accept-network-stream socket)
+ #+nil
+ (sys:make-fd-stream x :input x :output x:element-type '(unsigned-byte 8)))
#+ccl
(ccl:accept-connection socket))
diff --git a/string.lisp b/string.lisp
@@ -28,7 +28,7 @@
(in-package :rw.string)
(defun octets-to-string (x encoding)
- #-(or mkcl allegro clisp ecl ccl sbcl allegro)
+ #-(or mkcl allegro clisp ecl ccl sbcl cmucl allegro)
(error "RW.STRING:OCTETS-TO-STRING not ported")
#+mkcl
(progn
@@ -44,11 +44,13 @@
(ccl:decode-string-from-octets x :external-format encoding)
#+sbcl
(sb-ext:octets-to-string x :external-format encoding)
+ #+cmucl
+ (ext:octets-to-string x :external-format encoding)
#+allegro
(excl:octets-to-string x :external-format encoding))
(defun string-to-octets (x encoding)
- #-(or mkcl allegro clisp ecl ccl sbcl allegro)
+ #-(or mkcl allegro clisp ecl ccl sbcl cmucl allegro)
(error "RW.STRING:STRING-TO-OCTETS not ported")
#+mkcl
(progn
@@ -70,5 +72,7 @@
(ccl:encode-string-to-octets x :external-format encoding)
#+sbcl
(sb-ext:string-to-octets x :external-format encoding)
+ #+cmucl
+ (ext:string-to-octets x :external-format encoding)
#+allegro
(excl:string-to-octets x :external-format encoding :null-terminate nil))