diff --git a/examples/repl-server.scm b/examples/repl-server.scm new file mode 100644 index 00000000..eaa9ab44 --- /dev/null +++ b/examples/repl-server.scm @@ -0,0 +1,26 @@ +#!/usr/bin/env chibi-scheme + +(import (scheme base) (scheme read) (scheme write) (scheme eval) + (chibi net) (chibi net server)) + +(define (repl-handler in out sock addr) + (let ((env (environment '(scheme base) + '(only (chibi) import)))) + (let lp () + (let ((expr (read in))) + (cond + ((not (eof-object? expr)) + (let ((result (guard (exn (else + (display "ERROR: " out) + (write exn out) + (newline out) + (if #f #f))) + (eval expr env)))) + (cond + ((not (eq? result (if #f #f))) + (write result out) + (newline out))) + (flush-output-port out) + (lp)))))))) + +(run-net-server 5556 repl-handler)