samer@0
|
1 (display "loading shell.silk\n")
|
samer@0
|
2
|
samer@0
|
3 (import "samer.core.*")
|
samer@0
|
4 (import "samer.core.types.*")
|
samer@0
|
5 (import "samer.silk.*")
|
samer@0
|
6
|
samer@0
|
7 (define true #t)
|
samer@0
|
8 (define false #f)
|
samer@0
|
9
|
samer@0
|
10
|
samer@0
|
11 (define (for-it proc it)
|
samer@0
|
12 (if (.hasNext it)
|
samer@0
|
13 (begin
|
samer@0
|
14 (proc (.next it))
|
samer@0
|
15 (for-it proc it))))
|
samer@0
|
16
|
samer@0
|
17
|
samer@0
|
18 ;;; directory handling
|
samer@0
|
19
|
samer@0
|
20 (define (abs-path path) (.getCanonicalPath (java.io.File. path)))
|
samer@0
|
21 (define (pwd) (abs-path "."))
|
samer@0
|
22 ;(define .. "..")
|
samer@0
|
23 (define (cd dir)
|
samer@0
|
24 (System.setProperty "user.dir" (abs-path dir))
|
samer@0
|
25 (System.getProperty "user.dir"))
|
samer@0
|
26 (define (ls . paths)
|
samer@0
|
27 (array->list (.listFiles (java.io.File.
|
samer@0
|
28 (if (null? paths) "." (first paths))
|
samer@0
|
29 ))))
|
samer@0
|
30
|
samer@0
|
31 (define (filter p? l) (reverse (filter-rev p? l ())))
|
samer@0
|
32 (define (filter-rev p? l a)
|
samer@0
|
33 (if (null? l) a
|
samer@0
|
34 (let ((h (car l)) (t (cdr l)))
|
samer@0
|
35 (if (p? h)
|
samer@0
|
36 (filter-rev p? t (cons h a))
|
samer@0
|
37 (filter-rev p? t a)))))
|
samer@0
|
38
|
samer@0
|
39 (define push Shell.push)
|
samer@0
|
40 (define pop Shell.pop)
|
samer@0
|
41 (define env Shell.env)
|
samer@0
|
42 (define cat string-append)
|
samer@0
|
43
|
samer@0
|
44 (define (pr-env)
|
samer@0
|
45 (for-it
|
samer@0
|
46 (lambda (b)
|
samer@0
|
47 (display (.name b))
|
samer@0
|
48 (display "=")
|
samer@0
|
49 (write (.get b X.ObjectCodec$ null))
|
samer@0
|
50 (display "\n"))
|
samer@0
|
51 (.data (Shell.env))))
|
samer@0
|
52
|
samer@0
|
53
|
samer@0
|
54 (define (vbls) (.getViewables (get "ViewableManager")))
|
samer@0
|
55 (define (pr-vbls)
|
samer@0
|
56 (for-it
|
samer@0
|
57 (lambda (v)
|
samer@0
|
58 (display (.toString (.getNode v)))
|
samer@0
|
59 (newline))
|
samer@0
|
60 (vbls)))
|
samer@0
|
61
|
samer@0
|
62 (define (it->list it)
|
samer@0
|
63 (define (accum it list)
|
samer@0
|
64 (if (not (.hasNext it))
|
samer@0
|
65 list
|
samer@0
|
66 (accum it (cons (.next it) list))))
|
samer@0
|
67 (reverse (accum it ())))
|
samer@0
|
68
|
samer@0
|
69 (define (view-vector L name)
|
samer@0
|
70 (Shell.expose (javax.swing.JScrollPane. (javax.swing.JList. L)) name)
|
samer@0
|
71 null)
|
samer@0
|
72
|
samer@0
|
73 (define (view-list L name) (view-vector (list->vector L) name))
|
samer@0
|
74
|
samer@0
|
75 (define (print l)
|
samer@0
|
76 (define (print-list l n)
|
samer@0
|
77 (if (null? l)
|
samer@0
|
78 (newline)
|
samer@0
|
79 (begin
|
samer@0
|
80 (display (cat (number->string n) ": " (first l)))
|
samer@0
|
81 (newline)
|
samer@0
|
82 (print-list (rest l) (+ n 1)))))
|
samer@0
|
83 (if (list? l)
|
samer@0
|
84 (print-list l 0)
|
samer@0
|
85 (if (vector? l)
|
samer@0
|
86 (print (vector->list l))
|
samer@0
|
87 (begin (display l) (newline))
|
samer@0
|
88 )
|
samer@0
|
89 )
|
samer@0
|
90 )
|
samer@0
|
91
|
samer@0
|
92 ;;; ------------ some macros ------------
|
samer@0
|
93
|
samer@0
|
94 (define node (macro (name . body)
|
samer@0
|
95 `(begin
|
samer@0
|
96 (Shell.push ,name)
|
samer@0
|
97 (let ((a
|
samer@0
|
98 (tryCatch
|
samer@0
|
99 (begin . ,body)
|
samer@0
|
100 (lambda (ex) (Shell.pop) (throw ex)))))
|
samer@0
|
101 (Shell.pop)
|
samer@0
|
102 a))))
|
samer@0
|
103
|
samer@0
|
104 ; ; (define node (macro (name . body)
|
samer@0
|
105 ; ; `(let* ( (a (Shell.push ,name))
|
samer@0
|
106 ; ; (b (begin . ,body)) )
|
samer@0
|
107 ; ; (Shell.pop) b
|
samer@0
|
108 ; ; ))
|
samer@0
|
109 ; ; )
|
samer@0
|
110
|
samer@0
|
111 ;;; this creates a named node as a child of (.getNode parent)
|
samer@0
|
112 (define (child parent name) (Node. name (.getNode parent)))
|
samer@0
|
113
|
samer@0
|
114 ;;; alternative version
|
samer@0
|
115 ;(define node (macro (name . body)
|
samer@0
|
116 ; `(Shell.push ,name)
|
samer@0
|
117 ; `(let ((b (begin . ,body)))
|
samer@0
|
118 ; (Shell.pop) b)
|
samer@0
|
119 ;))
|
samer@0
|
120
|
samer@0
|
121 (define observer (macro body `(samer.silk.SilkObserver. (lambda (o a) ,@body))))
|
samer@0
|
122 (define on-change (macro (o . body)
|
samer@0
|
123 `(.addObserver ,o (samer.silk.SilkObserver. (lambda (o a) ,@body)))
|
samer@0
|
124 ))
|
samer@0
|
125
|
samer@0
|
126 ;;; ---------------------------------------
|
samer@0
|
127
|
samer@0
|
128 (define-method (exec (agent Agent) cmd) (.execute agent cmd (Shell.env)))
|
samer@0
|
129 (define-method (exec (vbl Viewable) cmd) (.execute (.getAgent vbl) cmd (Shell.env)))
|
samer@0
|
130 (define-method (exec (mat samer.maths.Matrix) cmd) (.execute (.getAgent mat) cmd (Shell.env)))
|
samer@0
|
131 (define (matexec matrix cmd) (exec (samer.maths.MatrixAgent. matrix) cmd))
|
samer@0
|
132
|
samer@0
|
133 (define (viewable name) (.getViewable (get "ViewableManager") (.abs (Shell.env) name)))
|
samer@0
|
134 (define (edit-vbl vbl)
|
samer@0
|
135 (Shell.showDialogFor
|
samer@0
|
136 (.getComponent (.getViewer vbl))
|
samer@0
|
137 (.getLabel vbl)))
|
samer@0
|
138
|
samer@0
|
139 (define (cur-node) (.node (env)))
|
samer@0
|
140 (define (set nm vl) (X.store nm vl))
|
samer@0
|
141 (define (put nm vl) (Shell.put nm vl))
|
samer@0
|
142 (define (get nm) (Shell.get nm))
|
samer@0
|
143 (define (interp cmd) (display "**** deprecated ****\n")
|
samer@0
|
144 (.dispatch (get "AgentManager") cmd (Shell.env)))
|
samer@0
|
145 (define (pr-viewables) (.listViewables (get "ViewableManager")))
|
samer@0
|
146 (define (exit) (.dispatch (get "AgentManager") "exit" (Shell.env)))
|
samer@0
|
147 (define-method (expose) (.dispatch (get "AgentManager") "expose" (Shell.env)))
|
samer@0
|
148 (define-method (expose (name String)) (Shell.expose (viewable name)))
|
samer@0
|
149 (define-method (expose (vbl Viewable)) (Shell.expose (.getViewer vbl) (.fullName (.getNode vbl))))
|
samer@0
|
150 (define-method (expose (vwr Viewer) (name String)) (Shell.expose vwr name))
|
samer@0
|
151
|
samer@0
|
152 ; another kind of store
|
samer@0
|
153 ;(define (store nm obj) (.store (Shell.env) nm obj X.StringCodec$))
|
samer@0
|
154
|
samer@0
|
155 (define (hclicker canvas_name rcname)
|
samer@0
|
156 (define rc (viewable rcname))
|
samer@0
|
157 (define cl (Clicker. (get canvas_name) (+ (.getMax rc) 1) 1))
|
samer@0
|
158 (.setXReceiver cl rc))
|
samer@0
|
159
|
samer@0
|
160 (define (vclicker canvas_name rcname)
|
samer@0
|
161 (define rc (viewable rcname))
|
samer@0
|
162 (define cl (Clicker. (get canvas_name) 1 (+ (.getMax rc) 1)))
|
samer@0
|
163 (.setYReceiver cl rc))
|
samer@0
|
164
|
samer@0
|
165
|
samer@0
|
166 ;; buffering input. Always using this so put here
|
samer@0
|
167 (define-method (linein size step) (linein (samer.audio.LineSource.) size step))
|
samer@0
|
168 (define-method (linein (source samer.audio.AudioSource) size step)
|
samer@0
|
169 (define line (LineIn. source size step))
|
samer@0
|
170 (put "LineIn" line)
|
samer@0
|
171 (addtask line)
|
samer@0
|
172 (.output line) )
|