Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --CC
- --Bundel by Admicos
- -- BASE64 Encoding
- -- Lua 5.1+ base64 v3.0 (c) 2009 by Alex Kloss <alexthkloss@web.de>
- -- licensed under the terms of the LGPL2
- -- character table string
- local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
- -- encoding
- function enc(data)
- return ((data:gsub('.', function(x)
- local r,b='',x:byte()
- for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end
- return r;
- end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
- if (#x < 6) then return '' end
- local c=0
- for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end
- return b:sub(c+1,c+1)
- end)..({ '', '==', '=' })[#data%3+1])
- end
- --ACTUAL PROGRAM STARTS NOW
- local args = { ... }
- local folder = args[1]
- local bundlefile = args[2]
- local exportedTable = {}
- local function bundle(bundlefolder)
- for id, file in pairs(fs.list(bundlefolder)) do
- if fs.isDir(bundlefolder .. "/" .. file) then
- print("[" .. id .. "] Bundling Directory " .. bundlefolder .. "/" .. file)
- bundle(bundlefolder .. "/" .. file)
- else
- print("[" .. id .. "] Bundling " .. bundlefolder .. "/" .. file)
- local handle = fs.open(bundlefolder .. "/" .. file, "r")
- if not handle then
- print("[" .. id .. "] Error occured bundling " .. bundlefolder .. "/" .. file)
- end
- exportedTable[bundlefolder .. "/" .. file] = enc(handle.readAll())
- handle.close()
- end
- end
- end
- local function main()
- local extractionScript = [[
- --Bundel Extraction Script version 1.0
- -- BASE64 Encoding
- -- Lua 5.1+ base64 v3.0 (c) 2009 by Alex Kloss <alexthkloss@web.de>
- -- licensed under the terms of the LGPL2
- -- character table string
- local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
- -- decoding
- function dec(data)
- data = string.gsub(data, '[^'..b..'=]', '')
- return (data:gsub('.', function(x)
- if (x == '=') then return '' end
- local r,f='',(b:find(x)-1)
- for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end
- return r;
- end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x)
- if (#x ~= 8) then return '' end
- local c=0
- for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end
- return string.char(c)
- end))
- end
- -- ACTUAL PROGRAM STARTS NOW
- print("Bundel by Admicos.")
- print("\nExtracting bundle here.")
- for name, file in pairs(textutils.unserialize(bundle)) do
- print("[#] Extracting " .. name)
- local handle = fs.open(shell.dir() .. "/" .. name, "w")
- handle.write(dec(file))
- handle.close()
- end
- ]]
- print("Bundel by Admicos.")
- print("\nFolder to get bundled: " .. folder)
- print("Resulting file: " .. bundlefile .. "\n")
- bundle(folder)
- print("\n[#] Saving bundle to file...")
- local handle = fs.open(bundlefile, "w")
- handle.write("local bundle = [[")
- handle.writeLine(textutils.serialize(exportedTable))
- handle.writeLine("]] --End of bundle \n\n")
- print("[#] Appending extraction scripts...")
- handle.write(extractionScript)
- handle.close()
- print("\nBundling done. You can extract the bundle at any point by executing \"" .. bundlefile .. "\".")
- end
- if #args < 2 then
- print("bundel <folder to bundle> <bundled file name>")
- else
- if not fs.isDir(args[1]) then
- print("Argument 1 must be a folder")
- else
- if fs.exists(args[2]) then
- print("Argument 2 already exists.")
- else
- main()
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement