1 ;; This newlisp module implements dbus socket send-receive together
2 ;; with signal receive.
4 ; This should be included into the Dbus contect
8 (define 'RECV:RECV nil) ; Table of objects that receive calls/signals
10 (define (set-object PATH HANDLER) (RECV PATH HANDLER))
12 (define (process-signal DATA)
13 (let ((MSG (unpack-message "uuuuyya(yv)" DATA)))
14 ;; Determine object concerned
15 ;; Determine that object's handler for this signal
16 ;; Call the handler with signal data
19 (define (send-recv--message MSG)
20 ;; Pack the message into a data block
21 (:send-message SYSTEM-SOCKET)
22 (while (unrelated (setf MSEG (:read-message SYSTEM-BUS )))
23 (push MSG pending -1))
26 ;; The main-loop is intended as a prompt-handler so as to deal with
29 (let ((FDS (list 0 (:%socket SYSTEM-BUS))))
30 (while (and (empty? pending) (not (member 0 (net-select FDS "r" -1))))
31 (if (pop pending) (process-signal $it)
32 (if (:read-message SYSTEM-BUS) (push $it pending -1)))