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