@comment -*- Mode:CommonLISP; Package:USER -*- @lisp (defun big-endian-bytes (array &rest bytes) "Combine bytes into an integer, most significant come first" (do ((number 0 (+ (* number 256) (aref array (car l)))) (l bytes (cdr l))) ((null l) number))) (defvar *last-bogus-buffer* nil) (defun get-imagen-status (&optional (printer si:*default-printer*) &aux address) (assert (setq address (ip:parse-internet-address printer)) (printer) "~A is not a valid Internet host name or address" printer) (with-open-file (stream (format nil "UDP-HOST:~A.IMAGEN" address)) (let ((buff (udp:get-udp-buffer))) (fillarray buff '(0.)) (funcall stream :write-packet buff) (send stream :force-output) (dotimes (j 12.) (if (and (funcall stream :listen) (funcall stream :read-packet buff) (not (zerop (array-active-length buff)))) (return) (process-sleep 60. "Waiting for Imagen"))) (cond ((null buff) (format t "Imagen status not available")) ((zerop (array-active-length buff)) (warn "Null UDP packet received") ;;Help for debugging: (setq *last-bogus-buffer* buff) nil) (:else (format t "~&~A" (substring buff (big-endian-bytes buff 16 1) (+ (big-endian-bytes buff 16 1) (big-endian-bytes buff 18 19))))))))) @end(lisp)