their behavior is implementation dependent." (call-with-input-file file (lambda (p) (with-input-from-port p thunk)) #:binary binary #:encoding encoding #:guess-encoding guess-encoding)) (define* (with-output-to-file file thunk #:key (binary #f) (encoding #f)) "THUNK must be a procedure of no arguments, and FILE must be a string naming a file. The effect is unspecified if the file already exists. The file is opened for output, an output port connected to it is made the default value returned by `current-output-port', and the THUNK is called with no arguments. When the THUNK returns, the port is closed and the previous default is restored. Returns the values yielded by THUNK. If an escape procedure is used to escape from the continuation of these procedures, their behavior is implementation dependent." (call-with-output-file file (lambda (p) (with-output-to-port p thunk)) #:binary binary #:encoding encoding)) (define* (with-error-to-file file thunk #:key (binary #f) (encoding #f)) "THUNK must be a procedure of no arguments, and FILE must be a string naming a file. The effect is unspecified if the file already exists. The file is opened for output, an output port connected to it is made the default value returned by `current-error-port', and the THUNK is called with no arguments. When the THUNK returns, the port is closed and the previous default is restored. Returns the values yielded by THUNK. If an escape procedure is used to escape from the continuation of these procedures, their behavior is implementation dependent." (call-with-output-file file (lambda (p) (with-error-to-port p thunk)) #:binary binary #:encoding encoding)) (define (call-with-input-string string proc) "Call the one-argument procedure @var{proc} with a newly created input port from which @var{string}'s contents may be read. All values yielded by the @var{proc} are returned." (proc (open-input-string string))) (define (with-input-from-string string thunk) "THUNK must be a procedure of no arguments. The test of STRING is opened for input, an input port connected to it is made, and the THUNK is called with no arguments. When the THUNK returns, the port is closed. Returns the values yielded by THUNK. If an escape procedure is used to escape from the continuation of these procedures, their behavior is implementation dependent." (call-with-input-string string (lambda (p) (with-input-from-port p thunk)))) (define (call-with-output-string proc) "Call the one-argument procedure @var{proc} with a newly created output port. When the function returns, port is closed and the string composed of the characters written into the port is returned." (let ((port (open-output-string))) (proc port) (let ((res (get-output-string port))) (close-port port) res))) (define (with-output-to-string thunk) "Calls THUNK and returns its output as a string." (call-with-output-string (lambda (p) (with-output-to-port p thunk)))) (define (with-error-to-string thunk) "Calls THUNK and returns its error output as a string." (call-with-output-string (lambda (p) (with-error-to-port p thunk)))) (define (inherit-print-state old-port new-port) (if (get-print-state old-port) (port-with-print-state new-port (get-print-state old-port)) new-port))