added an archiving program

This commit is contained in:
Izaya 2019-07-22 09:42:37 +10:00
parent b867628bdf
commit f674efaa28
1 changed files with 44 additions and 0 deletions

44
exec/mkarchive.lua Normal file
View File

@ -0,0 +1,44 @@
local tArgs = {...}
local output = tArgs[2]
local of = io.open(output,"wb")
local files, dirs = {}, {tArgs[1]}
local function cint(n,l)
local t={}
for i = 0, 7 do
t[i+1] = (n >> (i * 8)) & 0xFF
end
return string.reverse(string.char(table.unpack(t)):sub(1,l))
end
local function genHeader(fname,len)
return string.format("%s%s%s",cint(fname:len(),2),fname,cint(len,2))
end
for k,v in pairs(dirs) do
local dir = fs.list(v)
for _,file in ipairs(dir) do
if fs.isDirectory(file) then
dirs[#dirs+1] = v.."/"..file
else
files[#files+1] = v.."/"..file
end
end
end
for k,v in ipairs(files) do
io.write(v)
local f = io.open(v,"rb")
if f then
of:write(genHeader(v,fs.size(v)))
while true do
local c = f:read(1024)
if not c or c == "" then break end
of:write(c)
end
f:close()
end
print("... done")
end
of:write(string.char(0):rep(2))
of:close()