/// <summary> /// Constructor. /// </summary> /// <param name="owner">Parent window.</param> /// <param name="omfFile">OMF file object.</param> /// <param name="omfSeg">Segment to view. Must be part of omfFile.</param> /// <param name="formatter">Text formatter.</param> public OmfSegmentViewer(Window owner, OmfFile omfFile, OmfSegment omfSeg, Formatter formatter) { InitializeComponent(); Owner = owner; DataContext = this; //mOmfFile = omfFile; mOmfSeg = omfSeg; mFormatter = formatter; string fmt = (string)FindResource("str_FileOffsetLenFmt"); FileOffsetLenStr = string.Format(fmt, mFormatter.FormatOffset24(omfSeg.FileOffset), omfSeg.FileLength, mFormatter.FormatHexValue(omfSeg.FileLength, 4)); GenerateHeaderItems(); RecordItems = omfSeg.Records; RelocItems = new List <RelocItem>(omfSeg.Relocs.Count); foreach (OmfReloc omfRel in omfSeg.Relocs) { RelocItems.Add(new RelocItem(omfRel, formatter)); } RelocItems.Sort(delegate(RelocItem a, RelocItem b) { return(a.RelocRef.Offset - b.RelocRef.Offset); }); fmt = (string)FindResource("str_RecordHeaderFmt"); RecordHeaderStr = string.Format(fmt, RecordItems.Count); fmt = (string)FindResource("str_RelocHeaderFmt"); RelocHeaderStr = string.Format(fmt, RelocItems.Count); }
/// <summary> /// Constructor. /// </summary> /// <param name="owner">Parent window.</param> /// <param name="pathName">Path to file on disk. Only used for display.</param> /// <param name="data">File contents.</param> /// <param name="formatter">Text formatter.</param> public OmfViewer(Window owner, string pathName, byte[] data, Formatter formatter) { InitializeComponent(); Owner = owner; DataContext = this; PathName = pathName; mFormatter = formatter; mOmfFile = new OmfFile(data); mOmfFile.Analyze(mFormatter); string summary; if (mOmfFile.OmfFileKind == OmfFile.FileKind.Foreign) { summary = (string)FindResource("str_OmfFileNot"); } else { string fileStr; switch (mOmfFile.OmfFileKind) { case OmfFile.FileKind.Indeterminate: fileStr = (string)FindResource("str_OmfFileIndeterminateStr"); break; case OmfFile.FileKind.Load: fileStr = (string)FindResource("str_OmfFileLoadStr"); break; case OmfFile.FileKind.Object: fileStr = (string)FindResource("str_OmfFileObjectStr"); break; case OmfFile.FileKind.Library: fileStr = (string)FindResource("str_OmfFileLibraryStr"); break; default: fileStr = (string)FindResource("str_OmfFileUnknownStr"); break; } string fmt; if (mOmfFile.SegmentList.Count == 1) { fmt = (string)FindResource("str_OmfFileSummaryFmt"); } else { fmt = (string)FindResource("str_OmfFileSummaryPlFmt"); } summary = string.Format(fmt, fileStr, mOmfFile.SegmentList.Count); } FileSummaryStr = summary; foreach (OmfSegment omfSeg in mOmfFile.SegmentList) { SegmentListItems.Add(new SegmentListItem(omfSeg)); } MessageStrings = string.Join("\r\n", mOmfFile.MessageList.ToArray()); }