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