mirror of
https://github.com/ShadowKatStudios/OC-Minitel.git
synced 2024-11-23 10:38:05 +11:00
added a self-extracting program compressor
This commit is contained in:
parent
6d1d972e9b
commit
ec681811d4
59
Embedded/compress.lua
Normal file
59
Embedded/compress.lua
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
local tArgs = {...}
|
||||||
|
local input = tArgs[1]
|
||||||
|
local output = tArgs[2]
|
||||||
|
|
||||||
|
local tKeywords = {"%[%[","]]","function","local","return","end","elseif","then","true","false"}
|
||||||
|
local tAvoid = {}
|
||||||
|
local tCodes = {}
|
||||||
|
local tReplace = {}
|
||||||
|
tAvoid[10] = true
|
||||||
|
tAvoid[27] = true
|
||||||
|
|
||||||
|
for i = 1, 31 do
|
||||||
|
if not tAvoid[i] then
|
||||||
|
tCodes[#tCodes+1] = i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for k,v in pairs(tKeywords) do
|
||||||
|
local newchar = table.remove(tCodes,1)
|
||||||
|
tReplace[#tReplace+1] = {v,string.char(newchar)}
|
||||||
|
end
|
||||||
|
|
||||||
|
local f = io.open(input,"rb")
|
||||||
|
if not f then return false end
|
||||||
|
local c = f:read("*a")
|
||||||
|
f:close()
|
||||||
|
local origSize = c:len()
|
||||||
|
for k,v in pairs(tReplace) do
|
||||||
|
v[3] = c:find(v[1])
|
||||||
|
c=c:gsub(v[1],v[2])
|
||||||
|
end
|
||||||
|
local mSize = c:len()
|
||||||
|
c="c=[["..c.."]]for k,v in pairs({"
|
||||||
|
for k,v in pairs(tReplace) do
|
||||||
|
if v[3] then
|
||||||
|
c=c.."{'"..v[2].."','"..v[1].."'}"
|
||||||
|
if k < #tReplace then
|
||||||
|
c=c..","
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
c=c.."})do c=c:gsub(v[1],v[2])end load(c)()"
|
||||||
|
--c=c.."})do c=c:gsub(v[1],v[2])end print(c)"
|
||||||
|
local fullSize = c:len()
|
||||||
|
if output then
|
||||||
|
f=io.open(output,"wb")
|
||||||
|
f:write(c)
|
||||||
|
f:close()
|
||||||
|
end
|
||||||
|
io.write("Original size: ")
|
||||||
|
print(origSize)
|
||||||
|
io.write("Minified size: ")
|
||||||
|
io.write(mSize)
|
||||||
|
io.write("; delta: ")
|
||||||
|
print(origSize - mSize)
|
||||||
|
io.write("RtR size: ")
|
||||||
|
io.write(fullSize)
|
||||||
|
io.write("; delta: ")
|
||||||
|
print(origSize - fullSize)
|
Loading…
Reference in New Issue
Block a user