public override void Encode() { MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); NumStrings = StringList.Count; writer.Write(TotalOccurance); writer.Write(NumStrings); this.ContinuedRecords.Clear(); Record currentRecord = this; foreach (String stringVar in StringList) { int stringlength = Record.GetStringDataLength(stringVar); if (stream.Length + stringlength > Record.MaxContentLength) { currentRecord.Data = stream.ToArray(); currentRecord.Size = (UInt16)currentRecord.Data.Length; stream = new MemoryStream(); writer = new BinaryWriter(stream); CONTINUE continuedRecord = new CONTINUE(); this.ContinuedRecords.Add(continuedRecord); currentRecord = continuedRecord; } Record.WriteString(writer, stringVar, 16); } currentRecord.Data = stream.ToArray(); currentRecord.Size = (UInt16)currentRecord.Data.Length; }
private static EXTSST CreateEXTSST(SST sst, int sstOffset) { EXTSST extSST = new EXTSST(); extSST.NumStrings = 8; int counter = 0; int totalLength = sstOffset + 0x0C; int relativeLength = 0x0C; foreach (string text in sst.StringList) { int stringLength = Record.GetStringDataLength(text); if (relativeLength + stringLength > Record.MaxContentLength + 4) { totalLength += 4; relativeLength = 4; } if (counter == 0) { StringOffset stringOffset = new StringOffset(); stringOffset.AbsolutePosition = (uint)totalLength; stringOffset.RelativePosition = (ushort)relativeLength; extSST.Offsets.Add(stringOffset); } counter++; if (counter == extSST.NumStrings) { counter = 0; } totalLength += stringLength; relativeLength += stringLength; } return(extSST); }