気分転換がてらgxpが何をやっているか考えてみた

#!/usr/bin/env gosh
;; -*- coding: utf-8 -*-

(use srfi-1)  ;; List library
(use srfi-13) ;; String library
(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)