diff --git a/BinaryObjectScanner.Printing/Quantum.cs b/BinaryObjectScanner.Printing/Quantum.cs new file mode 100644 index 00000000..11ce3dfb --- /dev/null +++ b/BinaryObjectScanner.Printing/Quantum.cs @@ -0,0 +1,82 @@ +using System.Text; +using SabreTools.Models.Quantum; + +namespace BinaryObjectScanner.Printing +{ + public static class Quantum + { + public static void Print(StringBuilder builder, Archive archive) + { + builder.AppendLine("Quantum Information:"); + builder.AppendLine("-------------------------"); + builder.AppendLine(); + + Print(builder, archive.Header); + Print(builder, archive.FileList); + builder.AppendLine(archive.CompressedDataOffset, " Compressed data offset"); + builder.AppendLine(); + } + +#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.MajorVersion, " Major version"); + builder.AppendLine(header.MinorVersion, " Minor version"); + builder.AppendLine(header.FileCount, " File count"); + builder.AppendLine(header.TableSize, " Table size"); + builder.AppendLine(header.CompressionFlags, " Compression flags"); + builder.AppendLine(); + } + +#if NET48 + private static void Print(StringBuilder builder, FileDescriptor[] entries) +#else + private static void Print(StringBuilder builder, FileDescriptor?[]? entries) +#endif + { + builder.AppendLine(" File List Information:"); + builder.AppendLine(" -------------------------"); + if (entries == null || entries.Length == 0) + { + builder.AppendLine(" No file list items"); + builder.AppendLine(); + return; + } + + for (int i = 0; i < entries.Length; i++) + { + var fileDescriptor = entries[i]; + builder.AppendLine($" File Descriptor {i}"); + if (fileDescriptor == null) + { + builder.AppendLine(" [NULL]"); + continue; + } + + builder.AppendLine(fileDescriptor.FileNameSize, " File name size"); + builder.AppendLine(fileDescriptor.FileName, " File name"); + builder.AppendLine(fileDescriptor.CommentFieldSize, " Comment field size"); + builder.AppendLine(fileDescriptor.CommentField, " Comment field"); + builder.AppendLine(fileDescriptor.ExpandedFileSize, " Expanded file size"); + builder.AppendLine(fileDescriptor.FileTime, " File time"); + builder.AppendLine(fileDescriptor.FileDate, " File date"); + if (fileDescriptor.Unknown != null) + builder.AppendLine(fileDescriptor.Unknown.Value, " Unknown (Checksum?)"); + } + builder.AppendLine(); + } + } +} \ No newline at end of file diff --git a/BinaryObjectScanner.Wrappers/Quantum.cs b/BinaryObjectScanner.Wrappers/Quantum.cs index 36820f47..9983bcc1 100644 --- a/BinaryObjectScanner.Wrappers/Quantum.cs +++ b/BinaryObjectScanner.Wrappers/Quantum.cs @@ -278,74 +278,10 @@ namespace BinaryObjectScanner.Wrappers public override StringBuilder PrettyPrint() { StringBuilder builder = new StringBuilder(); - - builder.AppendLine("Quantum Information:"); - builder.AppendLine("-------------------------"); - builder.AppendLine(); - - PrintHeader(builder); - PrintFileList(builder); - builder.AppendLine($" Compressed data offset: {CompressedDataOffset} (0x{CompressedDataOffset:X})"); - builder.AppendLine(); - + Printing.Quantum.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($" Major version: {MajorVersion} (0x{MajorVersion:X})"); - builder.AppendLine($" Minor version: {MinorVersion} (0x{MinorVersion:X})"); - builder.AppendLine($" File count: {FileCount} (0x{FileCount:X})"); - builder.AppendLine($" Table size: {TableSize} (0x{TableSize:X})"); - builder.AppendLine($" Compression flags: {CompressionFlags} (0x{CompressionFlags:X})"); - builder.AppendLine(); - } - - /// - /// Print file list information - /// - /// StringBuilder to append information to - private void PrintFileList(StringBuilder builder) - { - builder.AppendLine(" File List Information:"); - builder.AppendLine(" -------------------------"); - if (FileCount == 0 || FileList == null || FileList.Length == 0) - { - builder.AppendLine(" No file list items"); - } - else - { - for (int i = 0; i < FileList.Length; i++) - { - var fileDescriptor = FileList[i]; - builder.AppendLine($" File Descriptor {i}"); - if (fileDescriptor == null) - { - builder.AppendLine(" [NULL]"); - continue; - } - - builder.AppendLine($" File name size: {fileDescriptor.FileNameSize} (0x{fileDescriptor.FileNameSize:X})"); - builder.AppendLine($" File name: {fileDescriptor.FileName ?? "[NULL]"}"); - builder.AppendLine($" Comment field size: {fileDescriptor.CommentFieldSize} (0x{fileDescriptor.CommentFieldSize:X})"); - builder.AppendLine($" Comment field: {fileDescriptor.CommentField ?? "[NULL]"}"); - builder.AppendLine($" Expanded file size: {fileDescriptor.ExpandedFileSize} (0x{fileDescriptor.ExpandedFileSize:X})"); - builder.AppendLine($" File time: {fileDescriptor.FileTime} (0x{fileDescriptor.FileTime:X})"); - builder.AppendLine($" File date: {fileDescriptor.FileDate} (0x{fileDescriptor.FileDate:X})"); - if (fileDescriptor.Unknown != null) - builder.AppendLine($" Unknown (Checksum?): {fileDescriptor.Unknown} (0x{fileDescriptor.Unknown:X})"); - } - } - builder.AppendLine(); - } - #if NET6_0_OR_GREATER ///