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
///