From: James A. <amu...@us...> - 2005-03-09 16:07:19
|
Update of /cvsroot/maxima/maxima/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26179 Modified Files: mdebug.lisp commac.lisp Log Message: Display prompts if and only if input is expected. Index: mdebug.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/mdebug.lisp,v retrieving revision 1.24 retrieving revision 1.25 diff -u -d -r1.24 -r1.25 --- mdebug.lisp 18 Nov 2004 15:20:30 -0000 1.24 +++ mdebug.lisp 9 Mar 2005 16:07:08 -0000 1.25 @@ -281,16 +281,19 @@ ;; indicates that dbm-read is never called with more than 3 args. Can ;; we just flush it? Can probably get rid of the &aux stuff too. +(defvar *need-prompt* t) (defun dbm-read (&optional (stream *standard-input*) (eof-error-p t) (eof-value nil) repeat-if-newline &aux tem ch (mprompt *mread-prompt*) (*mread-prompt* "")) - - (when (> (length mprompt) 0) - (fresh-line *standard-output*) - (princ mprompt *standard-output*) - (force-output *standard-output*) - ;;(format t "~&~a" mprompt) - ) + (if (and *need-prompt* (> (length mprompt) 0)) + (progn + (fresh-line *standard-output*) + (princ mprompt *standard-output*) + (force-output *standard-output*) + (setf *prompt-on-read-hang* nil)) + (progn + (setf *prompt-on-read-hang* t) + (setf *read-hang-prompt* mprompt))) ;; Read a character to see what we should do. (tagbody @@ -335,8 +338,10 @@ (let ((next (peek-char nil stream nil))) (cond ((member next '(#\space #\tab)) ;; Got "? <stuff>". This means describe. - (let* ((line (string-trim '(#\space #\tab #\; #\$) - (subseq (read-line stream eof-error-p eof-value) 1)))) + (let* ((line (string-trim + '(#\space #\tab #\; #\$) + (subseq + (read-line stream eof-error-p eof-value) 1)))) `((displayinput) nil (($describe) ,line)))) (t ;; Got "?<stuff>" This means a call to a Lisp @@ -346,11 +351,22 @@ ;; Note: There appears to be a bug in Allegro 6.2 ;; where concatenated streams don't wait for input ;; on *standard-input*. - (mread (make-concatenated-stream (make-string-input-stream "?") stream) + (mread (make-concatenated-stream + (make-string-input-stream "?") stream) eof-value))))) (t (setq *last-dbm-command* nil) - (mread stream eof-value)))) + (let ((result (mread stream eof-value)) + (next-char (read-char-no-hang stream eof-error-p eof-value))) + (cond + ((or (eql next-char nil) (equal next-char '(nil))) + (setf *need-prompt* t)) + ((member next-char '(#\newline #\return)) + (setf *need-prompt* t)) + (t + (setf *need-prompt* nil) + (unread-char next-char stream))) + result)))) (defun grab-line-number (li stream) (declare (type (vector #.(array-element-type "ab")) li)) Index: commac.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/commac.lisp,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- commac.lisp 30 Nov 2004 04:18:14 -0000 1.23 +++ commac.lisp 9 Mar 2005 16:07:09 -0000 1.24 @@ -665,11 +665,17 @@ (defun tyo (char &optional(stream *standard-output*)) (write-char char stream)) +(defvar *prompt-on-read-hang* nil) +(defvar *read-hang-prompt* "") (defun tyi (&optional (stream *standard-input*) eof-option) - (if eof-option - (read-char stream nil eof-option) - (read-char stream nil nil))) - + (let ((ch (read-char-no-hang stream nil eof-option))) + (if ch + ch + (progn + (when (and *prompt-on-read-hang* *read-hang-prompt*) + (princ *read-hang-prompt*) + (force-output *standard-output*)) + (read-char stream nil eof-option))))) (defun tyipeek (&optional peek-type &rest read-args) (if read-args |