local magic = 0x5f7d local magic_rev = 0x7d5f local header = "I2I2I2I2I2I6I6" local function read_header(dat) local e = "<" local m = string.unpack(" 0) then self.seek(self.tbl[i].pos-self.seek(0)) return self.read(self.tbl[i].filesize), self.tbl[i] end end return nil, "file not found" end function arc:exists(path) for i=1, #self.tbl do if (self.tbl[i].name == path) then return true end end return false end function arc:list(path) if path:sub(#path) ~= "/" then path = path .. "/" end local ent = {} for i=1, #self.tbl do if (self.tbl[i].name:sub(1, #path) == path and not self.tbl[i].name:find("/", #path+1, false)) then ent[#ent+1] = self.tbl[i].name end end return ent end function arc:meta(path) for i=1, #self.tbl do if (self.tbl[i].name == path) then return self.tbl[i] end end return nil, "file not found" end function arc:close() self.close() end return { read = function(read, seek, close) local tbl = {} local lname = "" while lname ~= "TRAILER!!!" do local dat = read(22) local et = read_header(dat) et.name = read(et.namesize) et.pos = seek(et.namesize & 1) seek(et.filesize + (et.filesize & 1)) lname = et.name if lname ~= "TRAILER!!!" then tbl[#tbl+1] = et end end return setmetatable({tbl = tbl, read = read, seek = seek, close = close}, {__index=arc}) end }