start adding c structs for gates and ports

This commit is contained in:
Redo0
2021-05-25 14:54:26 -05:00
parent be2df1ef33
commit 8561940777
7 changed files with 86 additions and 43 deletions

View File

@@ -14,15 +14,15 @@ local ffi = require("ffi")
dofile("iosafe.lua")
FFI = ffi
dofile("utility.lua")
dofile("simulation.lua")
dofile("group.lua")
dofile("wire.lua")
dofile("gatedef.lua")
dofile("gate.lua")
dofile("port.lua")
dofile("gate.lua")
dofile("save.lua")
FFI = ffi
dofile("compile.lua")
FFI = nil
@@ -49,6 +49,7 @@ local avgticks = {}
local totalticks = 0
local sim = Simulation.new(Simulation)
GSim = sim
local units = {
"uHz",
@@ -164,8 +165,8 @@ while 1 do
Simulation.addgate(sim, gate)
--print(gate.objref)
gate.definition.init(gate)
gate.definition.logic(gate)
Gate.init(gate)
Gate.logic(gate)
i = i + 4
elseif data[i] == "RW" then
@@ -254,33 +255,34 @@ while 1 do
local userid = data[i+1]
local objref = tonumber(data[i+2])
local obj = Simulation.getwirebyref(sim, objref) or Simulation.getgatebyref(sim, objref)
local info = ""
if obj ~= nil then
local info = ""
local wire = Simulation.getwirebyref(sim, objref)
if wire then
local numportsi = 0; for k, wire2 in pairs(Wire.getgroup(wire).in_ports ) do numportsi = numportsi+1 end
local numportso = 0; for k, wire2 in pairs(Wire.getgroup(wire).out_ports) do numportso = numportso+1 end
local numwires = 0; for k, wire2 in pairs(Wire.getgroup(wire).wires ) do numwires = numwires +1 end
if obj.logictype == 0 then
local numportsi = 0; for k, wire in pairs(Wire.getgroup(obj).in_ports ) do numportsi = numportsi+1 end
local numportso = 0; for k, wire in pairs(Wire.getgroup(obj).out_ports) do numportso = numportso+1 end
local numwires = 0; for k, wire in pairs(Wire.getgroup(obj).wires ) do numwires = numwires +1 end
info = "\\c5Net " .. tostring(obj.group):match("table: 0x(.+)"):upper() .. "\n" .. (Wire.getgroup(obj).state and "\\c2On" or "\\c0Off") .. "\n" ..
"Wires: "..numwires.."\n"..
"In Ports: " ..numportsi.."\n"..
"Out Ports: "..numportso
;
else
info = "\\c5" .. obj.definition.name .. "<br>"
for i = 1, #obj.ports do
info = info .. (obj.ports[i].state and "\\c2" or "\\c0") .. obj.definition.ports[i].name .. (i ~= #obj.ports and " " or "")
end
end
if info ~= "" then
client:send("GINFO\t" .. userid .. "\t" .. expandescape(info) .. "\n")
info = "\\c5Net " .. tostring(wire.group):match("table: 0x(.+)"):upper() .. "\n" .. (Wire.getgroup(wire).state and "\\c2On" or "\\c0Off") .. "\n" ..
"Wires: "..numwires.."\n"..
"In Ports: " ..numportsi.."\n"..
"Out Ports: "..numportso
;
end
local gate = Simulation.getgatebyref(sim, objref)
if gate then
local def = Gate.getdefinition(gate)
info = "\\c5" .. def.name .. "<br>"
for i = 1, #gate.ports do
info = info .. (gate.ports[i].state and "\\c2" or "\\c0") .. def.ports[i].name .. (i ~= #gate.ports and " " or "")
end
end
if info ~= "" then
client:send("GINFO\t" .. userid .. "\t" .. expandescape(info) .. "\n")
end
i = i + 2
elseif data[i] == "SINFO" then
client:send("SINFO\t" .. data[i+1] .. "\t" .. sim.nwires .. "\t" .. sim.ngates .. "\t" .. sim.ninports .. "\t" .. sim.noutports .. "\n")