#!/usr/local/bin/csi -quiet
; -*- scheme -*-

(require 'multiplex)

(define plex (multiplexor:setup 'plt-net))

(define ##sys#read-prompt-hook
  (let ((display display))
    (lambda () (display ">>> ")) ) )

(define ##sys#repl-eval-hook
  (lambda (exp)
    (call-with-current-continuation
     (lambda (return)
       (with-exception-handler
	(lambda (exn)
	  (print exn)
	  (let loop ((l (##sys#slot exn 2)))
	    (unless (null? l)
		    (print (car l) ": " (cadr l))
		    (loop (cddr l))))
	  (return (begin)))
	(lambda ()
	  (eval exp)))))))

(define (server)
  (call-with-current-continuation
   (lambda (escape)
     (with-exception-handler
      escape
      read-eval-print-loop))))

(let ((listener (tcp-listen 9090 4 #t)))
  (let loop ()
    (let-values (((in out) (tcp-accept listener)))
      (print "Got connection.")
      (with-input-from-port in
	(lambda ()
	  (with-output-to-port out
	    (lambda ()
	      (thread-start! (make-thread server))))))
      (loop))))
