private void lstResults_DoubleClick(object sender, EventArgs e) { if (lstResults.Items.Count > 0 && lstResults.SelectedIndex >= 0) { Return = (Entry)lstResults.SelectedItem; this.Hide(); } }
private void frmSearch_Load(object sender, EventArgs e) { Return = null; chkMatchCase.Checked = Settings.Default.MatchCase; }
private void ReadTXT2(BinaryReaderX br) { TXT2.Identifier = br.ReadBytes(4); TXT2.SectionSize = br.ReadUInt32(); TXT2.Unknown1 = br.ReadBytes(8); long startOfStrings = br.BaseStream.Position; TXT2.NumberOfStrings = br.ReadUInt32(); List<UInt32> offsets = new List<UInt32>(); for (int i = 0; i < TXT2.NumberOfStrings; i++) offsets.Add(br.ReadUInt32()); for (int i = 0; i < TXT2.NumberOfStrings; i++) { Entry entry = new Entry(); bool eos = false; UInt32 nextOffset = (i + 1 < offsets.Count) ? ((UInt32)startOfStrings + offsets[i + 1]) : ((UInt32)startOfStrings + TXT2.SectionSize); br.BaseStream.Seek(startOfStrings + offsets[i], SeekOrigin.Begin); List<byte> result = new List<byte>(); while (!eos) { if (br.BaseStream.Position == nextOffset || br.BaseStream.Position == Header.FileSize) eos = true; else { byte[] unichar = br.ReadBytes(2); if (Header.ByteOrderMark[0] == 0xFE) Array.Reverse(unichar); if (unichar[0] != 0x0 || unichar[1] != 0x0) result.AddRange(unichar); else { Value val = new Value(); val.Data = result.ToArray(); if (result.Count == 0) val.Editable = false; entry.Values.Add(val); result.Clear(); } } } // Strange extended string without null termination if (result.Count > 1) { Value finalVal = new Value(); finalVal.Data = result.ToArray(); finalVal.Editable = false; finalVal.NullTerminated = false; entry.Values.Add(finalVal); } entry.Index = i; TXT2.OriginalEntries.Add(entry); // Duplicate entries for editing Entry entryEdited = new Entry(); foreach (Value value in entry.Values) { Value val = new Value(); val.Data = value.Data; val.Editable = value.Editable; val.NullTerminated = value.NullTerminated; entryEdited.Values.Add(val); } entryEdited.Value = entry.Value; entryEdited.Index = entry.Index; TXT2.Entries.Add(entryEdited); } PaddingSeek(br); }
private void lstStrings_SelectedIndexChanged(object sender, EventArgs e) { Entry entry = (Entry)lstStrings.SelectedItem; lstSubStrings.Items.Clear(); for (int i = 0; i < _msbt.TXT2.Entries[entry.Index].Values.Count; i++) { Entry subEntry = new Entry(); subEntry.Index = i; lstSubStrings.Items.Add(subEntry); if (lstSubStrings.Items.Count > 0) lstSubStrings.SelectedIndex = 0; } }
private void ReadLBL1(BinaryReaderX br) { // TODO: Continue reverse engineering the LBL1 section because the magic value below shouldn't be the end game long offset = br.BaseStream.Position; LBL1.Identifier = br.ReadBytes(4); LBL1.SectionSize = br.ReadUInt32(); LBL1.Unknown1 = br.ReadBytes(8); LBL1.Unknown2 = br.ReadBytes(8); uint startOfLabels = 0x35C; // Magic LBL1 label start position LBL1.Unknown3 = br.ReadBytes((int)(startOfLabels - br.BaseStream.Position)); while (br.BaseStream.Position < (offset + LBL1.Identifier.Length + sizeof(UInt32) + LBL1.Unknown1.Length + LBL1.SectionSize)) { Entry lbl = new Entry(); lbl.Length = Convert.ToUInt32(br.ReadByte()); lbl.Value = br.ReadBytes((int)lbl.Length); lbl.Index = br.ReadInt32(); LBL1.Labels.Add(lbl); } HasLabels = LBL1.Labels.Count > 0; PaddingSeek(br); }