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

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