From 98cd349133cc78327b51c08bf09e69d29a923e7d Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 6 Oct 2026 16:19:20 +0200 Subject: [PATCH] csys/environ:forward-create: with finding free location --- csys/environ.lisp | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/csys/environ.lisp b/csys/environ.lisp index b0b5eb1..225c679 100644 --- a/csys/environ.lisp +++ b/csys/environ.lisp @@ -88,17 +88,23 @@ nil)) (defun forward (msg scope) - (let ((addr (message:addr msg))) - (if addr - (let ((cell (find-cell scope (message:addr msg)))) - (actor:send cell msg)) - (let ((rcvr (actor:customer msg))) - (if rcvr - (actor:send rcvr msg) - (util:lgw "no addr and no customer in message" msg scope))))) + (let ((rcvr (or (actor:customer msg) + (find-cell scope (message:addr msg))))) + (actor:send rcvr msg)) nil) -(defun forward-create (msg scope)) +(defun forward-create (msg scope) + (let* ((addr (message:addr msg)) + (rcvr (or (actor:customer msg) (find-cell scope addr))) + (head (shape:head msg)) + (data (shape:data msg)) + (dom (car head)) + (spc (getf (spaces scope) dom))) + (unless addr + (setf addr (gethash rcvr (cells scope)))) + (util:plist-add data :loc (car (space:free-loc-at spc (caddr addr)))) + (csys:send-message rcvr head data)) + nil) (defun forward-connect (msg scope) (let* ((head (shape:head msg)) @@ -112,7 +118,8 @@ (forward (message:create head :data data :customer cust) scope) (let ((rcvrs (find-cells-near scope tgt))) (dolist (rcvr rcvrs) - (actor:send rcvr (message:create head :data data))))))) + (actor:send rcvr (message:create head :data data)))))) + nil) ;;;; public shortcuts @@ -123,9 +130,13 @@ (let ((head (cons domain (cons :value cat-loc)))) (send-message head `(:value ,val) :env env))) -(defun send-create (rcvr &key (domain "csys:*domain*") (env *env*) connect op) +(defun send-create (rcvr &key (domain "csys:*domain*") (env *env*) cat connect op) (let ((head (cons domain :create)) data) + (when (listp rcvr) + (setf head (append head (cdr rcvr))) + (setf rcvr nil)) + (when cat (util:plist-add data :cat cat)) (when connect (util:plist-add data :connect connect)) (when op (util:plist-add data :op op)) (send-message head data :customer rcvr :env env)))