Exemplo n.º 1
0
        public override Stream OpenEntry(ArcFile arc, Entry entry)
        {
            var entry_offset = entry.Offset;
            var input        = arc.File.CreateStream(entry_offset, entry.Size);
            var pent         = entry as PackedEntry;

            if (null == pent)
            {
                return(input);
            }
            if (!pent.IsPacked)
            {
                if (pent.Size <= 0x220 || !arc.File.View.AsciiEqual(entry_offset, "DSC FORMAT 1.00\0"))
                {
                    return(input);
                }
                pent.IsPacked     = true;
                pent.UnpackedSize = arc.File.View.ReadUInt32(entry_offset + 0x14);
            }
            try
            {
                using (var decoder = new DscDecoder(input))
                {
                    decoder.Unpack();
                    return(new BinMemoryStream(decoder.Output, entry.Name));
                }
            }
            catch (Exception X)
            {
                System.Diagnostics.Trace.WriteLine(X.Message, "BgiOpener");
                return(arc.File.CreateStream(entry_offset, entry.Size));
            }
        }
Exemplo n.º 2
0
        public override Stream OpenEntry(ArcFile arc, Entry entry)
        {
            var entry_offset = entry.Offset;
            var input        = new ArcView.Frame(arc.File, entry_offset, entry.Size);

            try
            {
                if (entry.Size > 0x220 && input.AsciiEqual(entry_offset, "DSC FORMAT 1.00\0"))
                {
                    using (var decoder = new DscDecoder(input))
                    {
                        decoder.Unpack();
                        return(new BinMemoryStream(decoder.Output, entry.Name));
                    }
                }
                return(new ArcViewStream(input, entry_offset, entry.Size));
            }
            catch (Exception X)
            {
                System.Diagnostics.Trace.WriteLine(X.Message, "BgiOpener");
                return(arc.File.CreateStream(entry.Offset, entry.Size));
            }
        }