Ejemplo n.º 1
0
        public void Read(BinaryReader br)
        {
            FieldCount        = br.ReadInt32();
            FieldCountUnfixed = FieldCount;
            SizeFields        = br.ReadInt32();
            SizeLookup        = br.ReadInt32();
            Unknown           = br.ReadByte();

            if (FieldCount > 0 && SizeFields <= 0)
            {
                br.BaseStream.Position -= 13;
                FieldCount              = (int)br.ReadInt64();
                FieldCountUnfixed       = FieldCount;
                SizeFields              = br.ReadInt32();
                SizeLookup              = br.ReadInt32();
                Unknown = br.ReadByte();
                Is64    = true;
            }

            long offsetCurrent  = 0;
            long offsetStart    = br.BaseStream.Position;
            long offsetExpected = offsetStart + SizeFields;


            Fields = new BDAT_FIELDTABLE[FieldCount];
            for (int i = 0; i < FieldCount; i++)
            {
                offsetCurrent = br.BaseStream.Position;

                if (offsetCurrent >= offsetExpected)
                {
                    FieldCount = i;
                    br.BaseStream.Seek(offsetExpected - offsetCurrent, SeekOrigin.Current);
                    break;
                }
                Fields[i] = new BDAT_FIELDTABLE();
                Fields[i].Read(br);
            }

            //Console.WriteLine("//FieldCountUnfixed: " + FieldCountUnfixed + "|FieldCount: " + FieldCount + "|SizeFields: " + SizeFields + "|SizeLookup: " + SizeLookup + "|offsetExpected: " + offsetExpected);

            offsetCurrent = br.BaseStream.Position;
            SizePadding   = (int)(offsetExpected - offsetCurrent);
            if (SizePadding < 0)
            {
                return;
            }

            if (SizePadding > 0)
            {
                Padding = br.ReadBytes(SizePadding);
            }
            Lookup      = new BDAT_LOOKUPTABLE();
            Lookup.Size = SizeLookup;
            Lookup.Read(br);
        }