function display(inp, n) local i if (type(inp) == "string") then inp = Input(inp) elseif (type(inp) ~= "table") then error("Display needs a string or an Input object") end i = 0 while(not inp:isclosed()) do i = i + 1 print(inp:read()) if ((n ~= nil) and (i >= n)) then return end end end function pchar(n) if (not ((n >= 32) and (n <= 127))) then n = 46 -- aka '.' or 0x2e end return hex(n, "%c") end function hexdump(inp, from, to, width) local size, nlines, remaining, data_array, line, byte, outstring if (type(inp) == "string") then inp = Input(inp) elseif (type(inp) ~= "table") then error("Hexdump needs a string or an Input object") end size = inp:getsize() if (from == nil) then from = 0 end if (to == nil) then to = size end if (to > size) then to = size end size = to - from if (width == nil) then width = 16 end nlines = math.floor(size / width) remaining = math.mod(size, width) inp:seek(from) data_array = inp:read(size) for line = 0, nlines - 1, 1 do outstring = hex(line * width + from, "%08x ") for byte = 0, width - 1, 1 do outstring = outstring .. hex(data_array[line * 16 + byte]) .. " " end outstring = outstring .. " " for byte = 0, width - 1, 1 do outstring = outstring .. pchar(data_array[line * 16 + byte]) end print(outstring) end if (remaining == 0) then return end outstring = hex(nlines * width + from, "%08x "); for byte = 0, remaining - 1, 1 do outstring = outstring .. hex(data_array[nlines * 16 + byte]) .. " " end for byte = remaining + 1, width - 1, 1 do outstring = outstring .. " " end outstring = outstring .. " " for byte = 0, remaining - 1, 1 do outstring = outstring .. pchar(data_array[nlines * 16 + byte]) end print(outstring) end