Example #1
0
        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));
        }
Example #2
0
        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));
            }
        }