diff --git a/sim/gatedef.lua b/sim/gatedef.lua index c9ea4f9..fde6a85 100644 --- a/sim/gatedef.lua +++ b/sim/gatedef.lua @@ -1,6 +1,4 @@ -require "utility" - GateDefinition = { ports = {}, logic = function(gate) end, diff --git a/sim/iosafe.lua b/sim/iosafe.lua new file mode 100644 index 0000000..d767c10 --- /dev/null +++ b/sim/iosafe.lua @@ -0,0 +1,22 @@ + +assert(not io.safe, "re-execution of iosafe") + +local iosafe = io +_G.io = {safe = true} +local requiresafe = require +_G.require = nil + +local savedir = OPT_SAVE_DIR + +function io.open(fn, mode) + fn = fn:gsub("\\", "/") + assert(not fn:find("[^a-zA-Z0-9%._ ]"), "illegal character in file name \""..fn.."\"") + assert(not fn:find("%.%."), "illegal updir in file name \""..fn.."\"") + fn = fn:gsub("^/", "") + + fn = savedir.."/"..fn + + print("access file \""..fn.."\"") + + return iosafe.open(fn, mode) +end diff --git a/sim/main.lua b/sim/main.lua index 8f056d5..4910181 100644 --- a/sim/main.lua +++ b/sim/main.lua @@ -1,8 +1,14 @@ OPT_SAVE_DIR = arg[1] or error("must specify save location") -OPT_SAVE_DIR = OPT_SAVE_DIR:gsub("\\$", "").."\\" +OPT_SAVE_DIR = OPT_SAVE_DIR:gsub("\\", "/") +OPT_SAVE_DIR = OPT_SAVE_DIR:gsub("/$", "") print("Save location set to \""..OPT_SAVE_DIR.."\"") +local socket = require("socket") + +dofile("iosafe.lua") + +dofile("utility.lua") dofile("simulation.lua") dofile("group.lua") dofile("wire.lua") @@ -104,7 +110,6 @@ local function acceptclient() print("Connection from " .. ip .. ":" .. port) end -local socket = require("socket") server = assert(socket.bind("*", 25000)) client = nil @@ -245,10 +250,12 @@ while 1 do if obj.logictype == 0 then local numportsi = 0; for k, wire in pairs(obj.group.in_ports ) do numportsi = numportsi+1 end local numportso = 0; for k, wire in pairs(obj.group.out_ports) do numportso = numportso+1 end + local numwires = 0; for k, wire in pairs(obj.group.wires ) do numwires = numwires +1 end - info = "\\c5WIRE
" .. (obj.group.state and "\\c2ON" or "\\c0OFF") .. "\n" .. - "IN PORTS: " ..numportsi.."\n".. - "OUT PORTS: "..numportso + info = "\\c5Net " .. tostring(obj.group):match("table: 0x(.+)"):upper() .. "\n" .. (obj.group.state and "\\c2On" or "\\c0Off") .. "\n" .. + "Wires: "..numwires.."\n".. + "In Ports: " ..numportsi.."\n".. + "Out Ports: "..numportso ; else info = "\\c5" .. obj.definition.name .. "
" diff --git a/sim/simulation.lua b/sim/simulation.lua index 7dabfa3..79fbe11 100644 --- a/sim/simulation.lua +++ b/sim/simulation.lua @@ -1,6 +1,4 @@ -require "utility" - Simulation = {} function Simulation:new()