Example #1
0
        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;
        }
Example #2
0
        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.");
            }
        }
Example #3
0
        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);
            }
        }