function process_arcgfx(fname, h, size, ext) log("Processing " .. fname .. "." .. ext) if dump_mode then o = Output(fname .. "." .. ext) o:copyfrom(h, size) o:destroy() h:seek(-size, SEEK_CUR) end log("Extracting " .. fname .. " - format 'arcgfx'") dump_mkdir(fname) local nfiles = h:readU32() local extra = h:readU32() local ret if dump_mode then o = Output(fname .. "/--extra.bin") o:writeU32(extra) o:destroy() o = Output(fname .. string.format("/0000-%08X", extra)) o:writeU32(extra) o:destroy() else ret = Buffer(true) ret:writeU32(nfiles) ret:writeU32(extra) end index = {} for i = 1, nfiles do index[i] = {} index[i].extra = h:readU32() index[i].size = h:readU32() end local tell local outfile = {} for i = 1, nfiles do tell = h:tell() outfile[i] = process_single_file(fname .. string.format("/%04i-%08X", i, index[i].extra), h, index[i].size, ext) h:seek(tell + index[i].size) end if not dump_mode then for i = 1, nfiles do local alignment_bytes = alignment(outfile[i]:getsize(), 4) for j = 1, alignment_bytes do outfile[i]:writeU8(0) end ret:writeU32(index[i].extra) ret:writeU32(outfile[i]:getsize()) end for i = 1, nfiles do ret:copyfrom(outfile[i]) outfile[i]:destroy() end end -- return ret end