annotate src/scheme/old/shell.scm @ 8:5e3cbbf173aa tip

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