Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local serialization = require('serialization')
- local c = require("computer")
- local cmp = require('component')
- local fs = require("filesystem")
- local bit32 = require("bit32")
- local data = cmp.data
- local term = require("term")
- local unicode = require('unicode')
- local shell = require("shell")
- local WinRar = {}
- function Integer_to_Byte(integer, byte)
- local str = ""
- for i = 1, byte do
- str = string.char(integer % 256)..str
- integer = bit32.rshift(integer, 8)
- end
- return str
- end
- function Byte_to_Integer(str)
- local integer = 0
- for i=1, string.len(str) do
- integer = bit32.lshift(integer, 8) + string.byte(str, i)
- end
- return integer
- end
- function WinRar.deflate(arr, limit)
- local lsegment = math.floor(#arr / limit)
- local out = ""
- local bgn = 1
- local tmp
- for i = 1, lsegment do
- str = string.sub(arr, bgn, bgn+limit-1)
- tmp = data.deflate(str)
- while tmp == nil do tmp = data.deflate(str) end
- out = out..Integer_to_Byte(#tmp, 2)..tmp
- bgn = bgn + limit
- end
- if bgn <= #arr then
- str = string.sub(arr, bgn, #arr)
- tmp = data.deflate(str)
- while tmp == nil do tmp = data.deflate(str) end
- out = out..Integer_to_Byte(#tmp, 2)..tmp
- end
- return out
- end
- function WinRar.inflate(arr)
- local left = 1
- local right = 1
- local str = ""
- local tmp
- local lenght
- local out
- while true do
- lenght = Byte_to_Integer(string.sub(arr, right, right+1))
- left = right + 2
- right = left + lenght
- out = string.sub(arr, left, right-1)
- tmp = data.inflate(out)
- while tmp == nil do tmp = data.inflate(out) end
- str = str..tmp
- if right > #arr then break end
- end
- return str
- end
- function WinRar.compress(filename, newfilename, limit)
- f2 = io.open(newfilename, "wb")
- f1 = io.open(filename, "rb")
- f2:write(WinRar.deflate(f1:read("*a") ,limit))
- f1:close()
- f2:close()
- end
- function WinRar.decompress(filename, newfilename)
- f2 = io.open(newfilename, "wb")
- f1 = io.open(filename, "rb")
- f2:write(WinRar.inflate(f1:read("*a")))
- f1:close()
- f2:close()
- end
- return WinRar
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement