On 1/29/07, Marc Feeley feeley@iro.umontreal.ca wrote:
...
For completeness, could you send the correct code?
Marc
Sure thing.
The flow diagram I sent previously was wrong. The "input-splitter" procedure should send input from stdin to "repl-input-port" and "transcript_port", not to "repl-input-port" and "output-splitter-port"
;========================================== Start
; Works fine as a standalone executable. Just tried it from the Gambit REPL ; and it doesn't seem to work there.
(define transcript-port (open-output-file (list path: "transcript-test-output" create: 'maybe buffering: #f append: #f)))
(define (my-repl) (define stdout (current-output-port)) ; just take the current input and (define stdin (current-input-port)) ; output ports. (define repl-input-port (open-string '(buffering: #f))) (define output-splitter-port (open-string '(buffering: #f)))
(define (input-splitter) ; Sends stdin to the repl and the output splitter. (define (loop s) (display s repl-input-port) (newline repl-input-port) (force-output repl-input-port) (display s transcript-port) (newline transcript-port) (force-output transcript-port) (loop (read-line stdin))) (loop (read-line stdin)))
(define (output-splitter) ; Sends output to the transcript and stdout. (define (loop s) ; Print semicolon so results show up as comments and I can (load ...) ; the transcript file directly. (display "; " transcript-port) (display s transcript-port) (newline transcript-port) (force-output transcript-port) (display "; " stdout) (display s stdout) (newline stdout) (force-output stdout) (loop (read-line output-splitter-port))) (loop (read-line output-splitter-port)))
; Start splitter procs. (thread-start! (make-thread input-splitter 'programmer-interface-input-splitter)) (thread-start! (make-thread output-splitter 'programmer-interface-output-splitter))
; Start real repl. (set! ##stdio/console-repl-channel (##make-repl-channel-ports repl-input-port output-splitter-port)) (##repl)
(close-port repl-input-port) (close-port output-splitter-port))
(my-repl)
;============================================ End
Cheers,
TJ