Port PFF to new printing

This commit is contained in:
Matt Nadareski
2023-09-15 01:03:48 -04:00
parent c322eebb98
commit de871fb8c1
2 changed files with 100 additions and 75 deletions

View File

@@ -0,0 +1,99 @@
using System.Text;
using SabreTools.Models.PFF;
namespace BinaryObjectScanner.Printing
{
public static class PFF
{
public static void Print(StringBuilder builder, Archive archive)
{
builder.AppendLine("PFF Information:");
builder.AppendLine("-------------------------");
builder.AppendLine();
Print(builder, archive.Header);
Print(builder, archive.Segments);
Print(builder, archive.Footer);
}
#if NET48
private static void Print(StringBuilder builder, Header header)
#else
private static void Print(StringBuilder builder, Header? header)
#endif
{
builder.AppendLine(" Header Information:");
builder.AppendLine(" -------------------------");
if (header == null)
{
builder.AppendLine(" No header");
builder.AppendLine();
return;
}
builder.AppendLine(header.HeaderSize, " Header size");
builder.AppendLine(header.Signature, " Signature");
builder.AppendLine(header.NumberOfFiles, " Number of files");
builder.AppendLine(header.FileSegmentSize, " File segment size");
builder.AppendLine(header.FileListOffset, " File list offset");
builder.AppendLine();
}
#if NET48
private static void Print(StringBuilder builder, Segment[] segments)
#else
private static void Print(StringBuilder builder, Segment?[]? segments)
#endif
{
builder.AppendLine(" Segments Information:");
builder.AppendLine(" -------------------------");
if (segments == null || segments.Length == 0)
{
builder.AppendLine(" No segments");
builder.AppendLine();
return;
}
for (int i = 0; i < segments.Length; i++)
{
var segment = segments[i];
builder.AppendLine($" Segment {i}");
if (segment == null)
{
builder.AppendLine(" [NULL]");
continue;
}
builder.AppendLine(segment.Deleted, " Deleted");
builder.AppendLine(segment.FileLocation, " File location");
builder.AppendLine(segment.FileSize, " File size");
builder.AppendLine(segment.PackedDate, " Packed date");
builder.AppendLine(segment.FileName, " File name");
builder.AppendLine(segment.ModifiedDate, " Modified date");
builder.AppendLine(segment.CompressionLevel, " Compression level");
}
builder.AppendLine();
}
#if NET48
private static void Print(StringBuilder builder, Footer footer)
#else
private static void Print(StringBuilder builder, Footer? footer)
#endif
{
builder.AppendLine(" Footer Information:");
builder.AppendLine(" -------------------------");
if (footer == null)
{
builder.AppendLine(" No footer");
builder.AppendLine();
return;
}
builder.AppendLine(footer.SystemIP, " System IP");
builder.AppendLine(footer.Reserved, " Reserved");
builder.AppendLine(footer.KingTag, " King tag");
builder.AppendLine();
}
}
}

View File

@@ -255,84 +255,10 @@ namespace BinaryObjectScanner.Wrappers
public override StringBuilder PrettyPrint()
{
StringBuilder builder = new StringBuilder();
builder.AppendLine("PFF Information:");
builder.AppendLine("-------------------------");
builder.AppendLine();
PrintHeader(builder);
PrintSegments(builder);
PrintFooter(builder);
Printing.PFF.Print(builder, _model);
return builder;
}
/// <summary>
/// Print header information
/// </summary>
/// <param name="builder">StringBuilder to append information to</param>
private void PrintHeader(StringBuilder builder)
{
builder.AppendLine(" Header Information:");
builder.AppendLine(" -------------------------");
builder.AppendLine($" Header size: {HeaderSize} (0x{HeaderSize:X})");
builder.AppendLine($" Signature: {Signature}");
builder.AppendLine($" Number of files: {NumberOfFiles} (0x{NumberOfFiles:X})");
builder.AppendLine($" File segment size: {FileSegmentSize} (0x{FileSegmentSize:X})");
builder.AppendLine($" File list offset: {FileListOffset} (0x{FileListOffset:X})");
builder.AppendLine();
}
/// <summary>
/// Print segmentsinformation
/// </summary>
/// <param name="builder">StringBuilder to append information to</param>
private void PrintSegments(StringBuilder builder)
{
builder.AppendLine(" Segments Information:");
builder.AppendLine(" -------------------------");
if (NumberOfFiles == 0 || Segments == null || Segments.Length == 0)
{
builder.AppendLine(" No segments");
}
else
{
for (int i = 0; i < Segments.Length; i++)
{
var segment = Segments[i];
builder.AppendLine($" Segment {i}");
if (segment == null)
{
builder.AppendLine(" [NULL]");
continue;
}
builder.AppendLine($" Deleted: {segment.Deleted} (0x{segment.Deleted:X})");
builder.AppendLine($" File location: {segment.FileLocation} (0x{segment.FileLocation:X})");
builder.AppendLine($" File size: {segment.FileSize} (0x{segment.FileSize:X})");
builder.AppendLine($" Packed date: {segment.PackedDate} (0x{segment.PackedDate:X})");
builder.AppendLine($" File name: {segment.FileName ?? "[NULL]"}");
builder.AppendLine($" Modified date: {segment.ModifiedDate} (0x{segment.ModifiedDate:X})");
builder.AppendLine($" Compression level: {segment.CompressionLevel} (0x{segment.CompressionLevel:X})");
}
}
builder.AppendLine();
}
/// <summary>
/// Print footer information
/// </summary>
/// <param name="builder">StringBuilder to append information to</param>
private void PrintFooter(StringBuilder builder)
{
builder.AppendLine(" Footer Information:");
builder.AppendLine(" -------------------------");
builder.AppendLine($" System IP: {SystemIP} (0x{SystemIP:X})");
builder.AppendLine($" Reserved: {Reserved} (0x{Reserved:X})");
builder.AppendLine($" King tag: {KingTag ?? "[NULL]"}");
builder.AppendLine();
}
#if NET6_0_OR_GREATER
/// <inheritdoc/>