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()