(define with-input-from-port
(let ((values values))
(lambda (port thunk)
(let ((old ##sys#standard-input))
(##sys#dynamic-wind
(lambda () (set! ##sys#standard-input port))
thunk
(lambda () (set! ##sys#standard-input old))) ) ) ) )
Perhaps this would be better capturing standard-input on each
transition, rather than just the first?
(Untested code follows)
(define with-input-from-port
(let ((values values))
(lambda (inner thunk)
(let ((outer '*))
(##sys#dynamic-wind
(lambda ()
(set! outer ##sys#standard-input)
(set! ##sys#standard-input inner))
thunk
(lambda ()
(set! inner ##sys#standard-input)
(set! ##sys#standard-input outer)))))))
Does this make sense, or is it too paranoid?