public void Read(PsoDataReader reader) { var blockIndexAndOffset = reader.ReadUInt32(); var BlockIndex = (int)(blockIndexAndOffset & 0x00000FFF); var Offset = (int)((blockIndexAndOffset & 0xFFFFF000) >> 12); var zero_4h = reader.ReadUInt32(); if (zero_4h != 0) { throw new Exception("zero_4h should be 0"); } var size1 = reader.ReadUInt16(); var size2 = reader.ReadUInt16(); if (size1 != size2) { throw new Exception("size1 should be size2"); } var NumberOfEntries = size1; var zero_Ch = reader.ReadUInt32(); if (zero_Ch != 0) { throw new Exception("zero_Ch should be 0"); } if (BlockIndex > 0) { // read reference data... var backupOfSection = reader.CurrentSectionIndex; var backupOfPosition = reader.Position; reader.SetSectionIndex(BlockIndex - 1); reader.Position = Offset; Entries = new List <IPsoValue>(); for (int i = 0; i < NumberOfEntries; i++) { var entry = PsoTypeBuilder.Make(pso, structureInfo, entryInfo); entry.Read(reader); Entries.Add(entry); } reader.SetSectionIndex(backupOfSection); reader.Position = backupOfPosition; } else { Entries = null; } }
public void Read(PsoDataReader reader) { var blockIndexAndOffset = reader.ReadUInt32(); var BlockIndex = (int)(blockIndexAndOffset & 0x00000FFF); var Offset = (int)((blockIndexAndOffset & 0xFFFFF000) >> 12); var zero_4h = reader.ReadUInt32(); if (zero_4h != 0) { throw new Exception("zero_4h should be 0"); } var size1 = reader.ReadUInt16() & 0x0FFF; var size2 = reader.ReadUInt16() & 0x0FFF; //if (size1 != size2 - 1) //{ // throw new Exception("size1 should be size2"); //} var NumberOfEntries = size2; var zero_Ch = reader.ReadUInt32(); if (zero_Ch != 0) { throw new Exception("zero_Ch should be 0"); } // read reference data... if (BlockIndex > 0) { var backupOfSection = reader.CurrentSectionIndex; var backupOfPosition = reader.Position; reader.SetSectionIndex(BlockIndex - 1); reader.Position = Offset; string s = ""; for (int k = 0; k < NumberOfEntries; k++) { s += (char)reader.ReadByte(); } Value = s; reader.SetSectionIndex(backupOfSection); reader.Position = backupOfPosition; } else { Value = null; } }
public void Read(PsoDataReader reader) { this.Value = reader.ReadUInt32(); }