private void StartRecord(Stream aOut, short aRecordType) { LittleEndianHelper.WriteShortU(aOut, aRecordType); int aVal = m_recordSize[m_count++] - 4; LittleEndianHelper.WriteShortU(aOut, aVal); }
internal void WriteHeaderData(Stream aOut, bool aCompressed) { if (aCompressed) { m_grbit &= 254; } else { m_grbit |= 1; } LittleEndianHelper.WriteShortU(aOut, m_rgb.Length); aOut.WriteByte(m_grbit); if (m_runsList != null) { if ((m_grbit & 8) != 0) { LittleEndianHelper.WriteShortU(aOut, m_runsList.Count); } } else if ((m_grbit & 8) != 0) { LittleEndianHelper.WriteShortU(aOut, 0); } }
internal void Write(Stream aOut) { CalcSize(); m_count = 0; int num = 8228; int num2 = 12; StartRecord(aOut, 252); LittleEndianHelper.WriteIntU(aOut, m_totalStrings); LittleEndianHelper.WriteIntU(aOut, UniqueStrings); int num3 = num - num2; StringChunkInfo stringChunkInfo = new StringChunkInfo(); foreach (StringWrapperBIFF8 item in m_stringOrder) { stringChunkInfo.CharsTotal = item.Cch; int headerSize = item.HeaderSize; int num4 = num3 - headerSize; if (num4 < 0 || (num4 == 0 && item.Cch != 0)) { StartRecord(aOut, 60); num2 = 4; num3 = num - num2; } int aBytesAvailable = num3 - headerSize; num2 += headerSize; item.PrepareWriteCharacterData(stringChunkInfo, aBytesAvailable); item.WriteHeaderData(aOut, stringChunkInfo.Compressed); num2 += item.WriteCharacterData(aOut, stringChunkInfo, aBytesAvailable); num3 = ((!stringChunkInfo.HasMore) ? (num - num2) : 0); while (stringChunkInfo.HasMore) { aBytesAvailable = num3; int charPos = stringChunkInfo.CharPos; int characterDataSize = item.GetCharacterDataSize(stringChunkInfo, aBytesAvailable); stringChunkInfo.CharPos = charPos; if (characterDataSize == 0) { StartRecord(aOut, 60); num2 = 5; aBytesAvailable = 8223; item.PrepareWriteCharacterData(stringChunkInfo, aBytesAvailable); aOut.WriteByte((byte)((!stringChunkInfo.Compressed) ? 1 : 0)); } else { item.PrepareWriteCharacterData(stringChunkInfo, aBytesAvailable); } num2 += item.WriteCharacterData(aOut, stringChunkInfo, aBytesAvailable); num3 = ((!stringChunkInfo.HasMore) ? (num - num2) : 0); } int num5 = item.FormatRunsDataSize; if (num5 <= 0) { continue; } byte[] formatRunsData = item.FormatRunsData; while (num5 > 0) { if (num3 == 0) { StartRecord(aOut, 60); num2 = 4; num3 = num - num2; } int num6 = (num3 < num5) ? num3 : num5; num6 -= num6 % 4; if (num6 > 0) { aOut.Write(formatRunsData, formatRunsData.Length - num5, num6); num3 -= num6; num5 -= num6; num2 += num6; } else { num3 = 0; } } } }
private void WriteMaskedValue(int offset, short mask, short value) { LittleEndianHelper.WriteShort(BitField16.PutValue(LittleEndianHelper.ReadShort(m_data, offset), mask, value), m_data, offset); }
private void SetValue32(int offset, int mask, int value) { LittleEndianHelper.WriteInt(BitField32.PutValue(LittleEndianHelper.ReadInt(m_xfData, offset), mask, value), m_xfData, offset); }
private void SetValue16(int offset, short mask, int value) { LittleEndianHelper.WriteShort(BitField16.PutValue(LittleEndianHelper.ReadShort(m_xfData, offset), mask, (short)value), m_xfData, offset); }