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) { Value = ""; bool isok = true; for (int i = 0; i < length; i++) { char c = (char)reader.ReadByte(); if (c == 0) { isok = false; } else { if (!isok) { throw new Exception("Unexpected char."); } Value += c; } } }
public void Read(PsoDataReader reader) { Value = reader.ReadByte(); }