diff --git a/lib/csys/environ.ex b/lib/csys/environ.ex index 00451b5..5e9954d 100644 --- a/lib/csys/environ.ex +++ b/lib/csys/environ.ex @@ -21,10 +21,6 @@ defmodule Scopes.CSys.Environ do [:csys, :created | _rest] -> process_creation(msg, scope) send(env, msg) - [dom, :for, cat, item] -> - #IO.inspect(CSys.state(scope).cells) - cell = get_in(state.cells, [{dom, cat}, item]) - CSys.send_message(cell, [dom, :data], Shape.data(msg)) _ -> send(env, msg) # forward message to application end end @@ -50,11 +46,22 @@ defmodule Scopes.CSys.Environ do end end - def send_message(state, [dom, cat, item], head, data) do - cell = get_in(state.cells, [{dom, cat}, item]) + # accessing cell registry via state.cells + + def get_cell(state, [dom, cat, item]) do + get_in(state.cells, [{dom, cat}, item]) + end + + def send_message(state, addr, head, data) do + cell = get_cell(state, addr) CSys.send_message(cell, head, data) end + def connect(state, addr, target, op) do + send_message(state, addr, ~w(csys connect)a, + %{target: get_cell(state, target), op: op}) + end + # delegating tasks to env def delegate(env, func) do @@ -63,6 +70,5 @@ defmodule Scopes.CSys.Environ do def forward_value(env, addr, value) do delegate(env, &send_message(&1, addr, ~w(csys data)a, %{value: value})) - #CSys.send_message(env, [dom, :for, cat, item], %{value: value}) end end diff --git a/lib/csys/program.ex b/lib/csys/program.ex index 3aced4a..ea83c4b 100644 --- a/lib/csys/program.ex +++ b/lib/csys/program.ex @@ -153,11 +153,15 @@ defmodule Scopes.CSys.Program do end def init_recursive_1() do [ - fn %Environ.State{neurons: [zero]} -> - #zero = [:csys, :c00, {0, 0}] - CSys.send_message(zero, ~w(csys connect)a, %{target: zero, op: negate()}) + fn state -> + zero = [:csys, :c00, {0, 0}] + #%Environ.State{neurons: [zero]} = state + #CSys.send_message(zero, ~w(csys connect)a, %{target: zero, op: negate()}) #Environ.send_message(state, zero, ~w(csys connect)a, %{target: zero, op: negate()}) - CSys.send_message(zero, ~w(csys create succ)a, %{addr: [:csys, :e01, {1, 1}]}) + Environ.connect(state, zero, zero, negate()) + Environ.send_message(state, zero, ~w(csys create succ)a, + %{addr: [:csys, :e01, {1, 1}]}) + #CSys.send_message(zero, ~w(csys create succ)a, %{addr: [:csys, :e01, {1, 1}]}) end ] end