diff --git a/BinaryObjectScanner.Printing/PAK.cs b/BinaryObjectScanner.Printing/PAK.cs new file mode 100644 index 00000000..4cb8871b --- /dev/null +++ b/BinaryObjectScanner.Printing/PAK.cs @@ -0,0 +1,71 @@ +using System.Text; +using SabreTools.Models.PAK; + +namespace BinaryObjectScanner.Printing +{ + public static class PAK + { + public static void Print(StringBuilder builder, File file) + { + builder.AppendLine("PAK Information:"); + builder.AppendLine("-------------------------"); + builder.AppendLine(); + + Print(builder, file.Header); + Print(builder, file.DirectoryItems); + } + +#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.Signature, " Signature"); + builder.AppendLine(header.DirectoryOffset, " Directory offset"); + builder.AppendLine(header.DirectoryLength, " Directory length"); + builder.AppendLine(); + } + +#if NET48 + private static void Print(StringBuilder builder, DirectoryItem[] entries) +#else + private static void Print(StringBuilder builder, DirectoryItem?[]? entries) +#endif + { + builder.AppendLine(" Directory Items Information:"); + builder.AppendLine(" -------------------------"); + if (entries == null || entries.Length == 0) + { + builder.AppendLine(" No directory items"); + builder.AppendLine(); + return; + } + + for (int i = 0; i < entries.Length; i++) + { + var entry = entries[i]; + builder.AppendLine($" Directory Item {i}"); + if (entry == null) + { + builder.AppendLine(" [NULL]"); + continue; + } + + builder.AppendLine(entry.ItemName, " Item name"); + builder.AppendLine(entry.ItemOffset, " Item offset"); + builder.AppendLine(entry.ItemLength, " Item length"); + } + builder.AppendLine(); + } + } +} \ No newline at end of file diff --git a/BinaryObjectScanner.Wrappers/PAK.cs b/BinaryObjectScanner.Wrappers/PAK.cs index 23e6f833..76bf9029 100644 --- a/BinaryObjectScanner.Wrappers/PAK.cs +++ b/BinaryObjectScanner.Wrappers/PAK.cs @@ -144,63 +144,10 @@ namespace BinaryObjectScanner.Wrappers public override StringBuilder PrettyPrint() { StringBuilder builder = new StringBuilder(); - - builder.AppendLine("PAK Information:"); - builder.AppendLine("-------------------------"); - builder.AppendLine(); - - PrintHeader(builder); - PrintDirectoryItems(builder); - + Printing.PAK.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($" Signature: {Signature}"); - builder.AppendLine($" Directory offset: {DirectoryOffset} (0x{DirectoryOffset:X})"); - builder.AppendLine($" Directory length: {DirectoryLength} (0x{DirectoryLength:X})"); - builder.AppendLine(); - } - - /// - /// Print directory items information - /// - /// StringBuilder to append information to - private void PrintDirectoryItems(StringBuilder builder) - { - builder.AppendLine(" Directory Items Information:"); - builder.AppendLine(" -------------------------"); - if (DirectoryItems == null || DirectoryItems.Length == 0) - { - builder.AppendLine(" No directory items"); - } - else - { - for (int i = 0; i < DirectoryItems.Length; i++) - { - var directoryItem = DirectoryItems[i]; - builder.AppendLine($" Directory Item {i}"); - if (directoryItem == null) - { - builder.AppendLine(" [NULL]"); - continue; - } - - builder.AppendLine($" Item name: {directoryItem.ItemName}"); - builder.AppendLine($" Item offset: {directoryItem.ItemOffset} (0x{directoryItem.ItemOffset:X})"); - builder.AppendLine($" Item length: {directoryItem.ItemLength} (0x{directoryItem.ItemLength:X})"); - } - } - builder.AppendLine(); - } - #if NET6_0_OR_GREATER ///