diff --git a/BinaryObjectScanner.Printing/PFF.cs b/BinaryObjectScanner.Printing/PFF.cs new file mode 100644 index 00000000..a8d24981 --- /dev/null +++ b/BinaryObjectScanner.Printing/PFF.cs @@ -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(); + } + } +} \ No newline at end of file diff --git a/BinaryObjectScanner.Wrappers/PFF.cs b/BinaryObjectScanner.Wrappers/PFF.cs index ce3beafd..0846ba89 100644 --- a/BinaryObjectScanner.Wrappers/PFF.cs +++ b/BinaryObjectScanner.Wrappers/PFF.cs @@ -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; } - /// - /// Print header information - /// - /// StringBuilder to append information to - 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(); - } - - /// - /// Print segmentsinformation - /// - /// StringBuilder to append information to - 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(); - } - - /// - /// Print footer information - /// - /// StringBuilder to append information to - 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 ///