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)); } }
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)); } }