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