public override ArcFile TryOpen(ArcView file) { if (file.View.ReadUInt16(4) != '7') { return(null); } string base_name = Path.GetFileNameWithoutExtension(file.Name); uint offset = 0xC; var dir = new List <Entry>(); uint size = file.View.ReadUInt32(offset); offset += 4; var entry = new Entry { Name = string.Format("{0}#0.dat", base_name), Offset = offset, Size = size, }; if (!entry.CheckPlacement(file.MaxOffset)) { return(null); } dir.Add(entry); offset += size; int n = 1; while (offset < file.MaxOffset) { size = file.View.ReadUInt32(offset); if (0 == size) { break; } offset += 4; entry = new Entry { Name = string.Format("{0}#{1}", base_name, n++), Type = "image", Offset = offset, Size = size, }; if (!entry.CheckPlacement(file.MaxOffset)) { break; } AbmpReader.DetectFileType(file, entry); dir.Add(entry); offset += size; } return(new ArcFile(file, this, dir)); }
public override ArcFile TryOpen(ArcView file) { int version = file.View.ReadByte(4) * 10 + file.View.ReadByte(5) - '0' * 11; if (file.View.ReadByte(6) != 0 || version < 10 || version > 12) { return(null); } using (var reader = new AbmpReader(file, version)) { var dir = reader.ReadIndex(); if (null == dir || 0 == dir.Count) { return(null); } return(new ArcFile(file, this, dir)); } }