From 634bdee3f2193c51c8131694915414ef98b0861a Mon Sep 17 00:00:00 2001 From: "kepler155c@gmail.com" Date: Sat, 22 Apr 2017 02:30:41 -0400 Subject: [PATCH] bug fixes storage mgr --- apps/base64dl.lua | 35 ++++++++++++ sys/apis/base64.lua | 135 ++++++++++++++++++++++++++++++++++++++++++++ sys/apis/ui.lua | 14 +++-- 3 files changed, 180 insertions(+), 4 deletions(-) create mode 100644 apps/base64dl.lua create mode 100644 sys/apis/base64.lua diff --git a/apps/base64dl.lua b/apps/base64dl.lua new file mode 100644 index 0000000..33b0351 --- /dev/null +++ b/apps/base64dl.lua @@ -0,0 +1,35 @@ +require = requireInjector(getfenv(1)) +Base64 = require('base64') + +local args = { ... } + +if not args[2] then + error('Syntax: base64dl ') +end + +local c = http.get(args[2]) + +if not c then + error('unable to open url') +end + +local data = c.readAll() +c.close() + +print('size: ' .. #data) +local decoded = Base64.decode(data) +print('decoded: ' .. #decoded) + +local file = io.open(shell.resolve(args[1]), "wb") +if not file then + error('Unable to open ' .. args[1], 2) +end +for k,b in ipairs(decoded) do + if (k % 1000) == 0 then + os.sleep(0) + end + file:write(b) +end + +file:close() +print('done') diff --git a/sys/apis/base64.lua b/sys/apis/base64.lua new file mode 100644 index 0000000..767b86d --- /dev/null +++ b/sys/apis/base64.lua @@ -0,0 +1,135 @@ +-- Base64 Encoder / Decoder +-- By KillaVanilla +-- see: http://www.computercraft.info/forums2/index.php?/topic/12450-killavanillas-various-apis/ + +Base64 = { } + +local alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + +local function sixBitToBase64(input) + return string.sub(alphabet, input+1, input+1) +end + +local function base64ToSixBit(input) + for i=1, 64 do + if input == string.sub(alphabet, i, i) then + return i-1 + end + end +end + +local function octetToBase64(o1, o2, o3) + local i1 = sixBitToBase64(bit.brshift(bit.band(o1, 0xFC), 2)) + local i2 = "A" + local i3 = "=" + local i4 = "=" + if o2 then + i2 = sixBitToBase64(bit.bor( bit.blshift(bit.band(o1, 3), 4), bit.brshift(bit.band(o2, 0xF0), 4) )) + if not o3 then + i3 = sixBitToBase64(bit.blshift(bit.band(o2, 0x0F), 2)) + else + i3 = sixBitToBase64(bit.bor( bit.blshift(bit.band(o2, 0x0F), 2), bit.brshift(bit.band(o3, 0xC0), 6) )) + end + else + i2 = sixBitToBase64(bit.blshift(bit.band(o1, 3), 4)) + end + if o3 then + i4 = sixBitToBase64(bit.band(o3, 0x3F)) + end + + return i1..i2..i3..i4 +end + +-- octet 1 needs characters 1/2 +-- octet 2 needs characters 2/3 +-- octet 3 needs characters 3/4 + +local function base64ToThreeOctet(s1) + local c1 = base64ToSixBit(string.sub(s1, 1, 1)) + local c2 = base64ToSixBit(string.sub(s1, 2, 2)) + local c3 = 0 + local c4 = 0 + local o1 = 0 + local o2 = 0 + local o3 = 0 + if string.sub(s1, 3, 3) == "=" then + c3 = nil + c4 = nil + elseif string.sub(s1, 4, 4) == "=" then + c3 = base64ToSixBit(string.sub(s1, 3, 3)) + c4 = nil + else + c3 = base64ToSixBit(string.sub(s1, 3, 3)) + c4 = base64ToSixBit(string.sub(s1, 4, 4)) + end + o1 = bit.bor( bit.blshift(c1, 2), bit.brshift(bit.band( c2, 0x30 ), 4) ) + if c3 then + o2 = bit.bor( bit.blshift(bit.band(c2, 0x0F), 4), bit.brshift(bit.band( c3, 0x3C ), 2) ) + else + o2 = nil + end + if c4 then + o3 = bit.bor( bit.blshift(bit.band(c3, 3), 6), c4 ) + else + o3 = nil + end + return o1, o2, o3 +end + +local function splitIntoBlocks(bytes) + local blockNum = 1 + local blocks = {} + for i=1, #bytes, 3 do + blocks[blockNum] = {bytes[i], bytes[i+1], bytes[i+2]} + --[[ + if #blocks[blockNum] < 3 then + for j=#blocks[blockNum]+1, 3 do + table.insert(blocks[blockNum], 0) + end + end + ]] + blockNum = blockNum+1 + end + return blocks +end + +function Base64.encode(bytes) + local blocks = splitIntoBlocks(bytes) + local output = "" + for i=1, #blocks do + output = output..octetToBase64( unpack(blocks[i]) ) + end + return output +end + +function Base64.decode(str) + local bytes = {} + local blocks = {} + local blockNum = 1 + for i=1, #str, 4 do + blocks[blockNum] = string.sub(str, i, i+3) + blockNum = blockNum+1 + end + for i=1, #blocks do + local o1, o2, o3 = base64ToThreeOctet(blocks[i]) + table.insert(bytes, o1) + table.insert(bytes, o2) + table.insert(bytes, o3) +if (i % 1000) == 0 then + os.sleep(0) +end + end + -- Remove padding: + --[[ + for i=#bytes, 1, -1 do + if bytes[i] ~= 0 then + break + else + bytes[i] = nil + end + end + ]] + return bytes +end + +return Base64 diff --git a/sys/apis/ui.lua b/sys/apis/ui.lua index 18f86ed..24317a3 100644 --- a/sys/apis/ui.lua +++ b/sys/apis/ui.lua @@ -1464,10 +1464,6 @@ end function UI.Grid:setParent() UI.Window.setParent(self) self:update() -end - -function UI.Grid:resize() - UI.Window.resize(self) if not self.pageSize then if self.disableHeader then @@ -1478,6 +1474,16 @@ function UI.Grid:resize() end end +function UI.Grid:resize() + UI.Window.resize(self) + + if self.disableHeader then + self.pageSize = self.height + else + self.pageSize = self.height - 1 + end +end + function UI.Grid:adjustWidth() if self.autospace then for _,col in pairs(self.columns) do