... |
... |
@@ -604,7 +604,7 @@ |
604
|
604
|
:skipped-char-form ()
|
605
|
605
|
:eof-detected-form (eof-or-lose stream eof-errorp eof-value))))))
|
606
|
606
|
|
607
|
|
-(defun listen (&optional (stream *standard-input* stream-p) (width 1 width-p))
|
|
607
|
+(defun listen (&optional (stream *standard-input*) (width 1 width-p))
|
608
|
608
|
"Returns T if a character is available on the given Stream."
|
609
|
609
|
(declare (type streamlike stream))
|
610
|
610
|
(let ((stream (in-synonym-of stream)))
|
... |
... |
@@ -612,26 +612,14 @@ |
612
|
612
|
;; simple-stream
|
613
|
613
|
(stream::%listen stream width)
|
614
|
614
|
;; lisp-stream
|
615
|
|
- (let ((error-type 'simple-program-error)
|
616
|
|
- (function-name 'listen)
|
617
|
|
- (format-control ())
|
618
|
|
- (format-arguments ()))
|
619
|
|
- (if width-p
|
620
|
|
- ;; since width provided, two possible cases:
|
621
|
|
- (progn
|
622
|
|
- (if stream-p
|
623
|
|
- ;; stream also provided, so too many arguments
|
624
|
|
- (setf format-control (intl:gettext "Invalid number of arguments: ~S")
|
625
|
|
- format-arguments (list 3))
|
626
|
|
- ;; stream init-form used, so invalid argument
|
627
|
|
- (setf format-control (intl:gettext "Invalid argument: ~D")
|
628
|
|
- format-arguments (list 'width)))
|
629
|
|
- (error error-type :function-name function-name
|
630
|
|
- :format-control format-control :format-arguments format-arguments))
|
631
|
|
- ;; width not provided, so return expected value
|
632
|
|
- (or (/= (the fixnum (lisp-stream-in-index stream)) in-buffer-length)
|
633
|
|
- ;; Test for t explicitly since misc methods return :eof sometimes.
|
634
|
|
- (eq (funcall (lisp-stream-misc stream) stream :listen) t))))
|
|
615
|
+ (when width-p
|
|
616
|
+ (error 'kernel:simple-program-error
|
|
617
|
+ :function-name 'listen
|
|
618
|
+ :format-control (intl:gettext "Invalid number of arguments: ~S")
|
|
619
|
+ :format-arguments (list 3)))
|
|
620
|
+ (or (/= (the fixnum (lisp-stream-in-index stream)) in-buffer-length)
|
|
621
|
+ ;; Test for t explicitly since misc methods return :eof sometimes.
|
|
622
|
+ (eq (funcall (lisp-stream-misc stream) stream :listen) t))
|
635
|
623
|
;; fundamental-stream
|
636
|
624
|
(stream-listen stream))))
|
637
|
625
|
|