Mercurial > hg > jslab
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) ) |