private void UpdateDefaultRecordLength() { uint len = 2; for (int i = 0; i < base.Columns.Count; ++i) { ShnColumn col = (ShnColumn)base.Columns[i]; len += (uint)col.Length; } this.DefaultRecordLength = len; }
public void GenerateColumns(SHNReader reader) { int unkcolumns = 0; int Length = 2; for (int i = 0; i < ColumnCount; ++i) { ShnColumn col = new ShnColumn(); col.Load(reader, ref unkcolumns); Length += col.Length; base.Columns.Add(col); } if (Length != DefaultRecordLength) { throw new Exception("Default record Length does not fit."); } }
private void WriteRows(SHNWriter writer) { foreach (DataRow row in base.Rows) { int CurPos = (int)writer.BaseStream.Position; short unkLength = 0; writer.Write((short)0); // Row Length for (int colIndex = 0; colIndex < base.Columns.Count; ++colIndex) { ShnColumn column = (ShnColumn)base.Columns[colIndex]; switch (column.TypeByte) { case 1: case 12: case 16: writer.Write((byte)row[colIndex]); break; case 2: writer.Write((ushort)row[colIndex]); break; case 3: case 11: case 18: case 27: writer.Write((uint)row[colIndex]); break; case 5: writer.Write((Single)row[colIndex]); break; case 9: case 24: writer.WritePaddedString((string)row[colIndex], column.Length); break; case 13: case 21: writer.Write((short)row[colIndex]); break; case 20: writer.Write((sbyte)row[colIndex]); break; case 22: writer.Write((int)row[colIndex]); break; case 26: string tmp = (string)row[colIndex]; unkLength += (short)tmp.Length; writer.WritePaddedString(tmp, tmp.Length + 1); break; } } int LastPos = (int)writer.BaseStream.Position; writer.Seek(CurPos, SeekOrigin.Begin); writer.Write((short)(DefaultRecordLength + unkLength)); // Update Row Length writer.Seek(LastPos, SeekOrigin.Begin); } }