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