public override void Serialize(LittleEndianOutput out1) { out1.WriteShort(sid); out1.WriteShort(_cbFContinued); // note - this is *not* the size if (_linkPtg == null) { out1.WriteShort(0); } else { int formulaSize = _linkPtg.Size; int linkSize = formulaSize + 6; if (_unknownPostFormulaByte != null) { linkSize++; } out1.WriteShort(linkSize); out1.WriteShort(formulaSize); out1.WriteInt(_unknownPreFormulaInt); _linkPtg.Write(out1); if (_unknownPostFormulaByte != null) { out1.WriteByte(Convert.ToByte(_unknownPostFormulaByte)); } } out1.WriteShort(_cLines); out1.WriteShort(_iSel); out1.WriteShort(_flags); out1.WriteShort(_idEdit); if (_dropData != null) { _dropData.Serialize(out1); } if (_rgLines != null) { foreach (String str in _rgLines) { StringUtil.WriteUnicodeString(out1, str); } } if (_bsels != null) { foreach (bool val in _bsels) { out1.WriteByte(val ? 1 : 0); } } }
public override void Serialize(LittleEndianOutput out1) { int formulaSize = field_2_refPtg == null ? field_2_unknownFormulaData.Length : field_2_refPtg.Size; int idOffset = GetStreamIDOffset(formulaSize); int dataSize = GetDataSize(idOffset); out1.WriteShort(sid); out1.WriteShort(dataSize); out1.WriteShort(idOffset); out1.WriteShort(formulaSize); out1.WriteInt(field_1_unknown_int); int pos = 12; if (field_2_refPtg == null) { out1.Write(field_2_unknownFormulaData); } else { field_2_refPtg.Write(out1); } pos += formulaSize; int stringLen; if (field_4_ole_classname == null) { // don't write 0x03, stringLen, flag, text stringLen = 0; } else { out1.WriteByte(0x03); pos += 1; stringLen = field_4_ole_classname.Length; out1.WriteShort(stringLen); pos += 2; if (stringLen > 0) { out1.WriteByte(field_3_unicode_flag ? 0x01 : 0x00); pos += 1; if (field_3_unicode_flag) { StringUtil.PutUnicodeLE(field_4_ole_classname, out1); pos += stringLen * 2; } else { StringUtil.PutCompressedUnicode(field_4_ole_classname, out1); pos += stringLen; } } } // pad to next 2-byte boundary (requires 0 or 1 bytes) switch (idOffset - (pos - 6)) { // 6 for 3 shorts: sid, dataSize, idOffset case 1: out1.WriteByte(field_4_unknownByte == null ? 0x00 : (int)Convert.ToByte(field_4_unknownByte)); pos++; break; case 0: break; default: throw new InvalidOperationException("Bad padding calculation (" + idOffset + ", " + pos + ")"); } if (field_5_stream_id != null) { out1.WriteInt(Convert.ToInt32(field_5_stream_id)); pos += 4; } out1.Write(field_6_unknown); }