From d2a648f7d9b3ea4c8c775c52a6f650253b8e91ea Mon Sep 17 00:00:00 2001 From: Redo Date: Fri, 10 May 2019 21:07:35 -0500 Subject: [PATCH] revised callback system to use multiple arguments; added tobitstring function in utility --- sim/gate.lua | 4 ++-- sim/simulation.lua | 4 +--- sim/utility.lua | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/sim/gate.lua b/sim/gate.lua index e6f9acf..66a5f77 100644 --- a/sim/gate.lua +++ b/sim/gate.lua @@ -32,8 +32,8 @@ end -- sim:queuecallback(self, str) -- end -function Gate:cb(str) - sim:queuecallback(self, str) +function Gate:cb(...) + sim:queuecallback(self, ...) end function Gate:queue(delay) diff --git a/sim/simulation.lua b/sim/simulation.lua index 3afadb2..9b1593a 100644 --- a/sim/simulation.lua +++ b/sim/simulation.lua @@ -328,13 +328,11 @@ function Simulation:sendcallbacks() local data = "CB" for objref, args in pairs(self.callbacks) do - local argc = 0 local escargs = {} for argidx, argv in ipairs(args) do table.insert(escargs, expandescape(tostring(argv))) - argc = argc+1 end - data = data .. "\t" .. objref .. "\t"..argc..(#escargs>0 and ("\t"..table.concat(escargs, "\t")) or "") + data = data .. "\t" .. objref .. "\t"..(#escargs)..(#escargs>0 and ("\t"..table.concat(escargs, "\t")) or "") end client:send(data .. "\n") diff --git a/sim/utility.lua b/sim/utility.lua index 039fd84..f57ce49 100644 --- a/sim/utility.lua +++ b/sim/utility.lua @@ -51,3 +51,17 @@ function collapseescape(str) return table.concat(ostrt) end + +function tobitstring(num, len) + local maxval = bit.lshift(1, len) + if num>=maxval then error("bitstring value too big") end + + num = num%maxval + + local bitstring = "" + for i = len, 1, -1 do + bitstring = bitstring..bit.rshift(bit.band(num, bit.lshift(1, i-1)), i-1) + end + + return bitstring +end