internal static ConsoleDataBlock Parse(BinaryReader reader, ref StringBuilder sb) { var r = new ConsoleDataBlock(); r.Fill = (FillAttributes)reader.ReadInt16(); r.PopupFill = (FillAttributes)reader.ReadInt16(); r.ScreenBufferSizeX = reader.ReadInt16(); r.ScreenBufferSizeY = reader.ReadInt16(); r.WindowSizeX = reader.ReadInt16(); r.WindowSizeY = reader.ReadInt16(); r.WindowOriginX = reader.ReadInt16(); r.WindowOriginY = reader.ReadInt16(); reader.ReadInt32(); reader.ReadInt32(); r.FontSize = reader.ReadUInt32(); r.FontFamily = (FontFamily)reader.ReadInt32(); r.FontWeight = reader.ReadUInt32(); r.FaceName = reader.ReadUnicodeString(ref sb, 32); r.CursorSize = reader.ReadUInt32(); r.IsFullScreen = reader.ReadUInt32() > 0; r.IsQuickEdit = reader.ReadUInt32() > 0; r.IsInsertMode = reader.ReadUInt32() > 0; r.IsAutoPosition = reader.ReadUInt32() > 0; r.HistoryBufferSize = reader.ReadUInt32(); r.NumberOfHistoryBuffers = reader.ReadUInt32(); r.IsHistoryNoDup = reader.ReadUInt32() == 0; var ct = new int[16]; for (var i = 0; i < 16; i++) { ct[i] = reader.ReadInt32(); } r.ColorTable = ct; return(r); }
internal static IEnumerable <DataBlock> Parse(BinaryReader reader, ref byte[] bytes, ref StringBuilder sb) { var l = new List <DataBlock>(1); for (var bs = reader.ReadInt32(); bs > 4; bs = reader.ReadInt32()) { var sig = reader.ReadUInt32(); DataBlock db; switch (sig) { case EnvironmentVariableDataBlock.SIGNATURE: db = EnvironmentVariableDataBlock.Parse(reader, ref bytes, ref sb); break; case ConsoleDataBlock.SIGNATURE: db = ConsoleDataBlock.Parse(reader, ref sb); break; case ConsoleFEDataBlock.SIGNATURE: db = ConsoleFEDataBlock.Parse(reader); break; case DarwinDataBlock.SIGNATURE: db = DarwinDataBlock.Parse(reader, ref bytes, ref sb); break; case IconEnvironmentDataBlock.SIGNATURE: db = IconEnvironmentDataBlock.Parse(reader, ref bytes, ref sb); break; case KnownFolderDataBlock.SIGNATURE: db = KnownFolderDataBlock.Parse(reader); break; case PropertyStoreDataBlock.SIGNATURE: db = PropertyStoreDataBlock.Parse(reader, ref bytes, ref sb); break; case ShimDataBlock.SIGNATURE: db = ShimDataBlock.Parse(reader, bs, ref sb); break; case SpecialFolderDataBlock.SIGNATURE: db = SpecialFolderDataBlock.Parse(reader); break; case TrackerDataBlock.SIGNATURE: db = TrackerDataBlock.Parse(reader, bs, ref bytes); break; case VistaAndAboveIDListDataBlock.SIGNATURE: db = VistaAndAboveIDListDataBlock.Parse(reader); break; default: db = new UnknownDataBlock() { Signature = sig, Data = reader.ReadBytes(bs - 8) }; break; } l.Add(db); } return(l); }