diff --git a/csys/environ.lisp b/csys/environ.lisp index 4b341e0..e0e42f5 100644 --- a/csys/environ.lisp +++ b/csys/environ.lisp @@ -95,17 +95,29 @@ (defun forward-connect (msg scope) (let* ((data (shape:data msg)) - (tgt (car (find-cells (cells scope) (getf data :target))))) - (setf (getf data :target) tgt) + (tgt (getf data :target))) + (when (listp tgt) + (setf (getf data :target) (find-cell (cells scope) tgt))) (forward (message:create (shape:head msg) :data data) scope))) ;;;; public shortcuts -(defun send-value (cat-loc val &key (domain csys:*domain*) (env *env*)) +(defun send-value (cat-loc val &key (domain csys:*domain*) (env *env*) delay) (let ((head (cons domain (cons :value cat-loc)))) (actor:send env (message:create head :data `(:value ,val))))) -(defun send-connect (env &rest args &key (domain csys:*domain*) addr to target op) +(defun send-connect (rcvr target &key (domain csys:*domain*) (env *env*) op) + (let* ((cat-loc (when (listp rcvr) rcvr)) + (head (cons domain (cons :connect cat-loc))) + (data (unless cat-loc (list :to rcvr)))) + (when op (util:plist-add data :op op)) + (when (and (listp target) (< (length target) 3)) + (setf target (cons domain target))) + (util:plist-add data :target target) + (util:lgi rcvr target cat-loc head data) + (actor:send env (message:create head :data data)))) + +(defun x-send-connect (env &rest args &key (domain csys:*domain*) to target op) (let ((head (list domain :connect))) (actor:send env (message:create head :data args)))) diff --git a/csys/program/basic.lisp b/csys/program/basic.lisp index a824d95..1648714 100644 --- a/csys/program/basic.lisp +++ b/csys/program/basic.lisp @@ -54,10 +54,13 @@ (defun b1-next-one () (lambda (msg scope) (let ((self actor:*self*) + (environ:*env* (csys:environ scope)) (env (csys:environ scope))) - (environ:send-connect env :to self :target '(:csys :e01 "1-0") - :op (csys:multiply -1)) - (environ:send-connect env :to self :target '(:csys :e01 "1-1")) + (environ:send-connect self '(:e01 "1-0") :op (csys:multiply -1)) + ;(environ:send-connect env :to self :target '(:csys :e01 "1-0") + ; :op (csys:multiply -1)) + ;(environ:send-connect env :to self :target '(:csys :e01 "1-1")) + (environ:send-connect self '(:e01 "1-1")) ;; switch :active nil))) @@ -77,26 +80,23 @@ (defun b2-next-zero () (lambda (msg scope) - (let ((self actor:*self*) - (env (csys:environ scope))) + (let ((self actor:*self*)) (csys:send-create self :cat :c02 :loc "0-1" :value 2 :stage :basic) (csys:send-create self :cat :s02 :loc "1-0" :connect :pred) (csys:send-create self :cat :e02 :loc "2-0" :connect :succ) - ;(environ:send-connect env :to self :target '(:csys :c02 "0-1") :op (csys:multiply -1)) ;; switch :active nil))) (defun b2-next-one () (lambda (msg scope) (let ((self actor:*self*) - (env (csys:environ scope))) + (env (csys:environ scope)) + (environ:*env* (csys:environ scope)) + (zero '(:csys :c02 "0-0"))) (csys:send-create self :cat :s02 :loc "1-1" :connect :pred) (csys:send-create self :cat :e02 :loc "2-1" :connect :succ) - (environ:send-connect env :to self :target '(:csys :c02 "0-0") - :op (csys:multiply -1)) - (actor:send env - (message:create '(:csys :connect :c02 "0-0") - :data (list :target '(:csys :c02 "0-1") :op (csys:multiply -1)))) + (environ:send-connect self '(:c02 "0-0") :op (csys:multiply -1)) + (environ:send-connect '(:c02 "0-0") self :op (csys:multiply -1)) ;; switch :active nil)))