load "iupe-hexview.lua" load "iupe-hexview-toolbox.lua" dalosp.hexview = { activate = function (self) self.extra.hvdlg:show() end, input_change = function (self, ind) local extra = self.extra local hv = extra.hv local h = self:get_linked_input(ind) if not h then self.color = cd.YELLOW hv:updatehandle(nil) self.dcanvas:draw() return end if not h:canread() or not h:canseek() then self.color = cd.RED hv:updatehandle(nil) self.dcanvas:draw() return end self.color = cd.GREEN for i = 1, 12 do self:set_houtput(nil, i) self.oldcursors[i] = -1 end hv:updatehandle(h) self.dcanvas:draw() end, configure = function (self) end, get_settings = function (self) local hv = extra.hv local r = { mcursor = hv.mcursor + 0, kcursor = hv.kcursor + 0, markers = {}, filecursor = hv.filecursor + 0, nbbytes = hv.nbbytes + 0, nblines = hv.nblines + 0, } for i = 1, 10 do rmarkers[i] = hv.markers[i] + 0 end return r end, output_change = function (self, ind) self.watchees[ind] = self.outputs[ind] and true or false end, update_houtput = function (self, ind, cursor) local h = self:get_linked_input(1) local maxsixe = h and h:getsize() or -1 if h and self.watchees[ind] then if cursor < maxsize then self:set_houtput(nil, ind) end local obj = { h = h, hvo = self, ind = ind, origin = cursor, size = maxsize - cursor, getname = function (self) return self.hvo.name .. ":" .. self.ind end, getmodif = function (self) return self.hvo:getmodif() end, do_seek = function (self) self.h:seek(self.offset + self.origin) end, do_read = function (self, userdata, count) return self.h:read(count, userdata) end, } self:set_houtput(dalos.luahandle(obj), ind) end end, dalos_hv_cb = function (self, hv, reset) local m for i = 1, 10 do m = hv.markers[i] if self.oldcursors[i] ~= m then self:update_houtput(i, m) self.oldcursors[i] = m end end m = hv.kcursor if self.oldcursors[11] ~= m then self:update_houtput(11, m) self.oldcursors[11] = m end m = hv.mcursor if self.oldcursors[12] ~= m then self:update_houtput(12, m) self.oldcursors[12] = m end end, create = function (d, tab, settings) tab.otype = dalos.objtype.LUA_FILTER tab.activate = dalosp.hexview.activate tab.input_change = dalosp.hexview.input_change tab.output_change = dalosp.hexview.output_change tab.configure = dalosp.hexview.configure tab.get_settings = dalosp.get_settings tab.ninputs = 1 tab.noutputs = 12 tab.default_name = "Hexview" tab.ntype = "Hexview" local extra = { } local obj = dalos.object(d, tab, extra) local hv = iupe.hexview { } local hvtb = iupe.hexview_toolbox { hexview = hv } local hvdlg = iup.dialog { iup.hbox { iup.frame { hv }, iup.sbox { direction = "WEST", hvtb } }, title = obj.name } extra.hv = hv extra.hvtb = hvtb extra.hvdlg = hvdlg obj.oldcursors = { } obj.watchees = { } obj.update_houtput = dalosp.hexview.update_houtput for i = 1, 12 do obj.oldcursors[i] = -1 end if settings then if settings.markers then for i = 1, 10 do hv.markers[i] = settings.markers[i] end end hv.mcursor = settings.mcursor hv.kcursor = settings.kcursor hv.filecursor = settings.filecursor hv.nbbytes = settings.nbbytes hv.nblines = settings.nblines end hv:registercb(dalosp.hexview.dalos_hv_cb, obj) return obj end, } dalos.hexview = dalosp.hexview.create dalos:register_obj("Hexview", dalos.hexview)