#!/usr/bin/env gosh
(use srfi-1)
(use srfi-13)
(use gauche.process)
(use gauche.selector)
(use gauche.threads)
(define (main args)
(let/cc cc
(let ((ssh-process
(run-process '("ssh" "starfish")
:wait #f :input :pipe :output :pipe :error :pipe))
(selector (make <selector>)))
(selector-add! selector (process-output ssh-process)
(lambda (input flag)
(print "--stdout--\n")
(print (read-block 4096 input)))
'(r))
(selector-add! selector (process-error ssh-process)
(lambda (input flag)
(print "--stderr--\n")
(print (read-block 4096 input)))
'(r))
(let1 output (process-input ssh-process)
(thread-start!
(make-thread
(lambda ()
(do () (#f)
(display "> ")(flush)
(let1 command (read-line)
(when (equal? command "exit")
(close-input-port (process-output ssh-process))
(close-input-port (process-error ssh-process))
(close-output-port (process-input ssh-process))
(process-kill ssh-process)
(cc #t))
(display command output)
(newline output)))))))
(do () (#f) (selector-select selector))))
0)