;;; -*- Mode:LISP; Base:10 -*-

(defun find-all-unix-devices()
  (remove-duplicates
    (loop for dev in SI:ALL-SHARED-DEVICES
	  when (typep dev 'UNIX:UNIX-STREAM-SHARED-DEVICE)
	  collect dev)
    :test #'string-equal
    :key #'(lambda(x) (send x :name))))

(defun display-unix-devices()
  (loop for dev in (find-all-unix-devices)
	do (format t "~&~A owned by ~S"
		   (send dev :name)
		   (send dev :owner))))

(defun find-free-unix-devices()
  (loop for dev in (find-all-unix-shared-devices)
	when (null(send dev :owner))
	collect dev))

(defun unix-stream-example()
  (let((dev (car (find-free-unix-devices))))
    (if (null dev)
	(ferror nil "No Unix streams are free at this time")
      (progn
	(with-open-stream (s (open dev :direction :output))
	  (send s :line-out "test pattern"))
	(print (with-open-stream (s (open dev))
		 (send s :line-in)))))))