From: Timothy H. <tim...@ma...> - 2002-05-31 13:09:20
|
Hi, I've been playing with SISC and here is a little GUI that provides Jscheme access to the SISC interpreter. You need to put sisc.jar (available from sisc.sourceforge.net) onto your classpath. (You can download it directly as http://sisc.sourceforge.net/sisc.jar) Note that SISC is GPL'd which places some restrictions on its use. ;; SISC Gui ... (import "java.util.zip.*") (import "java.io.*") (import "sisc.*") (import "sisc.data.*") (import "sisc.contrib.applet.*") ;; initialize SISC (define in (GZIPInputStream. (BufferedInputStream. (FileInputStream. (File. "sisc.heap"))))) (define ctx (AppContext.)) (Context.register "main" ctx) (define r (Context.enter "main")) (REPL.initializeInterpreter r (list->array String.class '()) in) (Context.exit) ;; create a SISC REPL with a stream based interface ;; scheme terms sent using interpin ;; scheme results received using interpout (define interpout (PipedOutputStream.)) (define results (BufferedReader. (InputStreamReader. (PipedInputStream. interpout)))) (define interpin (PipedOutputStream.)) (define schemein (PrintWriter. interpin)) (define iis (PipedInputStream. interpin)) (define dynenv (DynamicEnv. (SourceInputPort. (BufferedReader. (InputStreamReader. iis)) "console") (OutputPort. (PrintWriter. interpout) #t))) (define repl (REPL. "main" dynenv)) ;; create a GUI (jlib.Swing.load) (define results-ta (textarea 10 60)) (define userin (textarea 10 60)) (define evalbutton (button "eval" (action (lambda(e) (.append results-ta {\n\n---------------------------------\n[(readstring userin)] -->\n-----------------------------------\n}) (.println schemein (readstring userin)) (.flush schemein))))) (define (listener) (let loop () (let ((x (.readLine results))) (.append results-ta {[x]\n}) (loop)))) (define w (window "test" (border (west (col 'none 'north evalbutton (button "clear" (action(lambda(e) (.setText userin "")(.setText results-ta "")))) )) (center (vsplit 0.5 (scrollpane userin) (scrollpane results-ta)))))) (.pack w) (.show w) ;; start up the REPL and the listener (.start (Thread. listener)) (.start repl) |