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