#| -*-Scheme-*-
-$Id: usrint.scm,v 1.23 2006/10/25 05:05:24 cph Exp $
+$Id: usrint.scm,v 1.24 2006/10/25 05:40:21 cph Exp $
Copyright 1991,1992,1993,1994,1995,2001 Massachusetts Institute of Technology
Copyright 2003,2005,2006 Massachusetts Institute of Technology
(define (with-notification message thunk)
(let ((port (notification-output-port)))
- (let ((prefix
- (lambda ()
- (fresh-line port)
- (write-string ";" port)
- (do ((i 0 (+ i 1)))
- ((not (< i *notification-depth*)))
- (write-string " " port))
- (message port)
- (write-string "... " port))))
- (prefix)
- (let ((n (output-port/bytes-written port)))
- (let ((p
- (call-with-current-continuation
- (lambda (k)
- (bind-condition-handler (list condition-type:error)
- (lambda (condition)
- (k (cons #f condition)))
- (lambda ()
- (fluid-let ((*notification-depth*
- (+ *notification-depth* 1)))
- (cons #t (thunk)))))))))
- (if (if n
- (> (output-port/bytes-written port) n)
- (output-port/line-start? port))
- (prefix))
- (write-string (if (car p) "done" "ERROR") port)
- (newline port)
- (if (car p)
- (cdr p)
- (signal-condition (cdr p))))))))
+ (start-notification-line)
+ (message port)
+ (write-string "... " port)
+ (let ((n (output-port/bytes-written port)))
+ (let ((p
+ (call-with-current-continuation
+ (lambda (k)
+ (bind-condition-handler (list condition-type:error)
+ (lambda (condition)
+ (k (cons #f condition)))
+ (lambda ()
+ (fluid-let ((*notification-depth*
+ (+ *notification-depth* 1)))
+ (cons #t (thunk)))))))))
+ (if (if n
+ (> (output-port/bytes-written port) n)
+ (output-port/line-start? port))
+ (begin
+ (start-notification-line)
+ (write-string "... " port)))
+ (write-string (if (car p) "done" "ERROR") port)
+ (newline port)
+ (if (car p)
+ (cdr p)
+ (signal-condition (cdr p)))))))
(define (write-notification-line message)
+ (start-notification-line)
+ (message (notification-output-port)))
+
+(define (start-notification-line)
(let ((port (notification-output-port)))
(fresh-line port)
(write-string ";" port)
(do ((i 0 (+ i 1)))
((not (< i *notification-depth*)))
- (write-string " " port))
- (message port)))
\ No newline at end of file
+ (write-string " " port))))
\ No newline at end of file