diff src/scheme/old/shell.scm @ 0:bf79fb79ee13

Initial Mercurial check in.
author samer
date Tue, 17 Jan 2012 17:50:20 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/scheme/old/shell.scm	Tue Jan 17 17:50:20 2012 +0000
@@ -0,0 +1,172 @@
+(display "loading shell.silk\n")
+
+(import "samer.core.*")
+(import "samer.core.types.*")
+(import "samer.silk.*")
+
+(define true #t)
+(define false #f)
+
+
+(define (for-it proc it)
+	(if (.hasNext it)
+		(begin
+			(proc (.next it))
+			(for-it proc it))))
+
+
+;;; directory handling
+
+(define (abs-path path) (.getCanonicalPath (java.io.File. path)))
+(define (pwd) (abs-path "."))
+;(define .. "..")
+(define (cd dir)
+	(System.setProperty "user.dir" (abs-path dir))
+	(System.getProperty "user.dir"))
+(define (ls . paths)
+	(array->list (.listFiles (java.io.File.
+		(if (null? paths) "." (first paths))
+	))))
+
+(define (filter p? l) (reverse (filter-rev p? l ())))
+(define (filter-rev p? l a)
+	(if (null? l) a
+		(let ((h (car l)) (t (cdr l)))
+			(if (p? h)
+				(filter-rev p? t (cons h a))
+				(filter-rev p? t a)))))
+
+(define push Shell.push)
+(define pop Shell.pop)
+(define env Shell.env)
+(define cat string-append)
+
+(define (pr-env)
+	(for-it
+		(lambda (b)
+			(display (.name b))
+			(display "=")
+			(write (.get b X.ObjectCodec$ null))
+			(display "\n"))
+		(.data (Shell.env))))
+
+
+(define (vbls) (.getViewables (get "ViewableManager")))
+(define (pr-vbls)
+	(for-it
+		(lambda (v)
+			(display (.toString (.getNode v)))
+			(newline))
+		(vbls)))
+
+(define (it->list it)
+	(define (accum it list)
+		(if (not (.hasNext it))
+			list
+			(accum it (cons (.next it) list))))
+	(reverse (accum it ())))
+
+(define (view-vector L name)
+	(Shell.expose (javax.swing.JScrollPane. (javax.swing.JList. L)) name)
+	null)
+
+(define (view-list L name) (view-vector (list->vector L) name))
+
+(define (print l)
+	(define (print-list l n)
+		(if (null? l)
+			(newline)
+			(begin
+				(display (cat (number->string n) ": " (first l)))
+				(newline)
+				(print-list (rest l) (+ n 1)))))
+	(if (list? l)
+		(print-list l 0)
+		(if (vector? l)
+			(print (vector->list l))
+			(begin (display l) (newline))
+		)
+	)
+)
+
+;;; ------------ some macros ------------
+
+(define node (macro (name . body)
+	`(begin
+		(Shell.push ,name)
+		(let ((a
+			(tryCatch
+				(begin . ,body)
+				(lambda (ex) (Shell.pop) (throw ex)))))
+			(Shell.pop)
+			a))))
+
+; ; (define node (macro (name . body)
+; ; 	`(let*	(	(a (Shell.push ,name))
+; ; 					(b (begin . ,body))		)
+; ; 		(Shell.pop) b
+; ; 	))
+; ; )
+
+;;; this creates a named node as a child of (.getNode parent)
+(define (child parent name) (Node. name (.getNode parent)))
+
+;;; alternative version
+;(define node (macro (name . body)
+;	`(Shell.push ,name)
+;	`(let ((b (begin . ,body)))
+;		(Shell.pop) b)
+;))
+
+(define observer (macro body `(samer.silk.SilkObserver. (lambda (o a) ,@body))))
+(define on-change (macro (o . body)
+	`(.addObserver ,o (samer.silk.SilkObserver. (lambda (o a) ,@body)))
+))
+
+;;; ---------------------------------------
+
+(define-method (exec (agent Agent) cmd) (.execute agent cmd (Shell.env)))
+(define-method (exec (vbl Viewable) cmd) (.execute (.getAgent vbl) cmd (Shell.env)))
+(define-method (exec (mat samer.maths.Matrix) cmd) (.execute (.getAgent mat) cmd (Shell.env)))
+(define (matexec matrix cmd) (exec (samer.maths.MatrixAgent. matrix) cmd))
+
+(define (viewable name) (.getViewable (get "ViewableManager") (.abs (Shell.env) name)))
+(define (edit-vbl vbl)
+	(Shell.showDialogFor
+		(.getComponent (.getViewer vbl))
+		(.getLabel vbl)))
+
+(define (cur-node) (.node (env)))
+(define (set nm vl) (X.store nm vl))
+(define (put nm vl) (Shell.put nm vl))
+(define (get nm) (Shell.get nm))
+(define (interp cmd) (display "**** deprecated ****\n") 
+	(.dispatch (get "AgentManager") cmd (Shell.env)))
+(define (pr-viewables)	(.listViewables (get "ViewableManager")))
+(define (exit) 		(.dispatch (get "AgentManager") "exit" (Shell.env)))
+(define-method (expose) (.dispatch (get "AgentManager") "expose" (Shell.env)))
+(define-method (expose (name String)) (Shell.expose (viewable name)))
+(define-method (expose (vbl Viewable)) (Shell.expose (.getViewer vbl) (.fullName (.getNode vbl))))
+(define-method (expose (vwr Viewer) (name String)) (Shell.expose vwr name))
+
+; another kind of store
+;(define (store nm obj) (.store (Shell.env) nm obj X.StringCodec$))
+
+(define (hclicker canvas_name rcname)
+	(define rc (viewable rcname))
+	(define cl (Clicker. (get canvas_name) (+ (.getMax rc) 1) 1))
+	(.setXReceiver cl rc))
+
+(define (vclicker canvas_name rcname)
+	(define rc (viewable rcname))
+	(define cl (Clicker. (get canvas_name) 1 (+ (.getMax rc) 1)))
+	(.setYReceiver cl rc))
+
+
+;; buffering input. Always using this so put here
+(define-method (linein size step) (linein (samer.audio.LineSource.) size step))
+(define-method (linein (source samer.audio.AudioSource) size step)
+	(define line (LineIn. source size step))
+	(put "LineIn" line)
+	(addtask line)
+	(.output line) )