diff --git a/BinaryObjectScanner.Printing/MicrosoftCabinet.cs b/BinaryObjectScanner.Printing/MicrosoftCabinet.cs
new file mode 100644
index 00000000..18fdc56e
--- /dev/null
+++ b/BinaryObjectScanner.Printing/MicrosoftCabinet.cs
@@ -0,0 +1,169 @@
+using System;
+using System.Text;
+using SabreTools.Models.MicrosoftCabinet;
+
+namespace BinaryObjectScanner.Printing
+{
+ public static class MicrosoftCabinet
+ {
+
+ public static void Print(StringBuilder builder, Cabinet cabinet)
+ {
+ builder.AppendLine("Microsoft Cabinet Information:");
+ builder.AppendLine("-------------------------");
+ builder.AppendLine();
+
+ Print(builder, cabinet.Header);
+ Print(builder, cabinet.Folders);
+ PrintFiles(builder, cabinet.Files);
+ }
+
+#if NET48
+ private static void Print(StringBuilder builder, CFHEADER header)
+#else
+ private static void Print(StringBuilder builder, CFHEADER? header)
+#endif
+ {
+ builder.AppendLine(" Header Information:");
+ builder.AppendLine(" -------------------------");
+ if (header == null)
+ {
+ builder.AppendLine(" No header");
+ builder.AppendLine();
+ return;
+ }
+
+ builder.AppendLine($" Signature: {header.Signature}");
+ builder.AppendLine($" Reserved 1: {header.Reserved1} (0x{header.Reserved1:X})");
+ builder.AppendLine($" Cabinet size: {header.CabinetSize} (0x{header.CabinetSize:X})");
+ builder.AppendLine($" Reserved 2: {header.Reserved2} (0x{header.Reserved2:X})");
+ builder.AppendLine($" Files offset: {header.FilesOffset} (0x{header.FilesOffset:X})");
+ builder.AppendLine($" Reserved 3: {header.Reserved3} (0x{header.Reserved3:X})");
+ builder.AppendLine($" Minor version: {header.VersionMinor} (0x{header.VersionMinor:X})");
+ builder.AppendLine($" Major version: {header.VersionMajor} (0x{header.VersionMajor:X})");
+ builder.AppendLine($" Folder count: {header.FolderCount} (0x{header.FolderCount:X})");
+ builder.AppendLine($" File count: {header.FileCount} (0x{header.FileCount:X})");
+ builder.AppendLine($" Flags: {header.Flags} (0x{header.Flags:X})");
+ builder.AppendLine($" Set ID: {header.SetID} (0x{header.SetID:X})");
+ builder.AppendLine($" Cabinet index: {header.CabinetIndex} (0x{header.CabinetIndex:X})");
+
+ if (header.Flags.HasFlag(HeaderFlags.RESERVE_PRESENT))
+ {
+ builder.AppendLine($" Header reserved size: {header.HeaderReservedSize} (0x{header.HeaderReservedSize:X})");
+ builder.AppendLine($" Folder reserved size: {header.FolderReservedSize} (0x{header.FolderReservedSize:X})");
+ builder.AppendLine($" Data reserved size: {header.DataReservedSize} (0x{header.DataReservedSize:X})");
+ builder.AppendLine($" Reserved data = {(header.ReservedData == null ? "[NULL]" : BitConverter.ToString(header.ReservedData).Replace(" - ", " "))}");
+ }
+
+ if (header.Flags.HasFlag(HeaderFlags.PREV_CABINET))
+ {
+ builder.AppendLine($" Previous cabinet: {header.CabinetPrev}");
+ builder.AppendLine($" Previous disk: {header.DiskPrev}");
+ }
+
+ if (header.Flags.HasFlag(HeaderFlags.NEXT_CABINET))
+ {
+ builder.AppendLine($" Next cabinet: {header.CabinetNext}");
+ builder.AppendLine($" Next disk: {header.DiskNext}");
+ }
+
+ builder.AppendLine();
+ }
+
+#if NET48
+ private static void Print(StringBuilder builder, CFFOLDER[] entries)
+#else
+ private static void Print(StringBuilder builder, CFFOLDER?[]? entries)
+#endif
+ {
+ builder.AppendLine(" Folders:");
+ builder.AppendLine(" -------------------------");
+ if (entries == null || entries.Length == 0)
+ {
+ builder.AppendLine(" No folders");
+ builder.AppendLine();
+ return;
+ }
+
+ for (int i = 0; i < entries.Length; i++)
+ {
+ var entry = entries[i];
+ builder.AppendLine($" Folder {i}");
+ if (entry == null)
+ {
+ builder.AppendLine(" [NULL]");
+ continue;
+ }
+
+ builder.AppendLine($" Cab start offset = {entry.CabStartOffset} (0x{entry.CabStartOffset:X})");
+ builder.AppendLine($" Data count = {entry.DataCount} (0x{entry.DataCount:X})");
+ builder.AppendLine($" Compression type = {entry.CompressionType} (0x{entry.CompressionType:X})");
+ builder.AppendLine($" Masked compression type = {entry.CompressionType & CompressionType.MASK_TYPE}");
+ builder.AppendLine($" Reserved data = {(entry.ReservedData == null ? "[NULL]" : BitConverter.ToString(entry.ReservedData).Replace("-", " "))}");
+ builder.AppendLine();
+
+ builder.AppendLine(" Data Blocks");
+ builder.AppendLine(" -------------------------");
+ if (entry.DataBlocks == null || entry.DataBlocks.Length == 0)
+ {
+ builder.AppendLine(" No data blocks");
+ continue;
+ }
+
+ for (int j = 0; j < entry.DataBlocks.Length; j++)
+ {
+ var dataBlock = entry.DataBlocks[j];
+ builder.AppendLine($" Data Block {j}");
+ if (dataBlock == null)
+ {
+ builder.AppendLine(" [NULL]");
+ continue;
+ }
+
+ builder.AppendLine($" Checksum = {dataBlock.Checksum} (0x{dataBlock.Checksum:X})");
+ builder.AppendLine($" Compressed size = {dataBlock.CompressedSize} (0x{dataBlock.CompressedSize:X})");
+ builder.AppendLine($" Uncompressed size = {dataBlock.UncompressedSize} (0x{dataBlock.UncompressedSize:X})");
+ builder.AppendLine($" Reserved data = {(dataBlock.ReservedData == null ? "[NULL]" : BitConverter.ToString(dataBlock.ReservedData).Replace("-", " "))}");
+ //builder.AppendLine($" Compressed data = {BitConverter.ToString(dataBlock.CompressedData).Replace("-", " ")}");
+ }
+ }
+ builder.AppendLine();
+ }
+
+#if NET48
+ private static void PrintFiles(StringBuilder builder, CFFILE[] entries)
+#else
+ private static void PrintFiles(StringBuilder builder, CFFILE?[]? entries)
+#endif
+ {
+ builder.AppendLine(" Files:");
+ builder.AppendLine(" -------------------------");
+ if (entries == null || entries.Length == 0)
+ {
+ builder.AppendLine(" No files");
+ builder.AppendLine();
+ return;
+ }
+
+ for (int i = 0; i < entries.Length; i++)
+ {
+ var entry = entries[i];
+ builder.AppendLine($" File {i}");
+ if (entry == null)
+ {
+ builder.AppendLine(" [NULL]");
+ continue;
+ }
+
+ builder.AppendLine($" File size = {entry.FileSize} (0x{entry.FileSize:X})");
+ builder.AppendLine($" Folder start offset = {entry.FolderStartOffset} (0x{entry.FolderStartOffset:X})");
+ builder.AppendLine($" Folder index = {entry.FolderIndex} (0x{entry.FolderIndex:X})");
+ builder.AppendLine($" Date = {entry.Date} (0x{entry.Date:X})");
+ builder.AppendLine($" Time = {entry.Time} (0x{entry.Time:X})");
+ builder.AppendLine($" Attributes = {entry.Attributes} (0x{entry.Attributes:X})");
+ builder.AppendLine($" Name = {entry.Name ?? "[NULL]"}");
+ }
+ builder.AppendLine();
+ }
+ }
+}
\ No newline at end of file
diff --git a/BinaryObjectScanner.Wrappers/MicrosoftCabinet.cs b/BinaryObjectScanner.Wrappers/MicrosoftCabinet.cs
index fb4230fe..47e7ed66 100644
--- a/BinaryObjectScanner.Wrappers/MicrosoftCabinet.cs
+++ b/BinaryObjectScanner.Wrappers/MicrosoftCabinet.cs
@@ -540,175 +540,10 @@ namespace BinaryObjectScanner.Wrappers
public override StringBuilder PrettyPrint()
{
StringBuilder builder = new StringBuilder();
-
- builder.AppendLine("Microsoft Cabinet Information:");
- builder.AppendLine("-------------------------");
- builder.AppendLine();
-
- PrintHeader(builder);
- PrintFolders(builder);
- PrintFiles(builder);
-
+ Printing.MicrosoftCabinet.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($" Reserved 1: {Reserved1} (0x{Reserved1:X})");
- builder.AppendLine($" Cabinet size: {CabinetSize} (0x{CabinetSize:X})");
- builder.AppendLine($" Reserved 2: {Reserved2} (0x{Reserved2:X})");
- builder.AppendLine($" Files offset: {FilesOffset} (0x{FilesOffset:X})");
- builder.AppendLine($" Reserved 3: {Reserved3} (0x{Reserved3:X})");
- builder.AppendLine($" Minor version: {VersionMinor} (0x{VersionMinor:X})");
- builder.AppendLine($" Major version: {VersionMajor} (0x{VersionMajor:X})");
- builder.AppendLine($" Folder count: {FolderCount} (0x{FolderCount:X})");
- builder.AppendLine($" File count: {FileCount} (0x{FileCount:X})");
- builder.AppendLine($" Flags: {Flags} (0x{Flags:X})");
- builder.AppendLine($" Set ID: {SetID} (0x{SetID:X})");
- builder.AppendLine($" Cabinet index: {CabinetIndex} (0x{CabinetIndex:X})");
-
-#if NET48
- if (Flags.HasFlag(SabreTools.Models.MicrosoftCabinet.HeaderFlags.RESERVE_PRESENT))
-#else
- if (Flags != null && Flags.Value.HasFlag(SabreTools.Models.MicrosoftCabinet.HeaderFlags.RESERVE_PRESENT))
-#endif
- {
- builder.AppendLine($" Header reserved size: {HeaderReservedSize} (0x{HeaderReservedSize:X})");
- builder.AppendLine($" Folder reserved size: {FolderReservedSize} (0x{FolderReservedSize:X})");
- builder.AppendLine($" Data reserved size: {DataReservedSize} (0x{DataReservedSize:X})");
- if (ReservedData == null)
- builder.AppendLine($" Reserved data = [NULL]");
- else
- builder.AppendLine($" Reserved data = {BitConverter.ToString(ReservedData).Replace("-", " ")}");
- }
-
-#if NET48
- if (Flags.HasFlag(SabreTools.Models.MicrosoftCabinet.HeaderFlags.PREV_CABINET))
-#else
- if (Flags != null && Flags.Value.HasFlag(SabreTools.Models.MicrosoftCabinet.HeaderFlags.PREV_CABINET))
-#endif
- {
- builder.AppendLine($" Previous cabinet: {CabinetPrev}");
- builder.AppendLine($" Previous disk: {DiskPrev}");
- }
-
-#if NET48
- if (Flags.HasFlag(SabreTools.Models.MicrosoftCabinet.HeaderFlags.NEXT_CABINET))
-#else
- if (Flags != null && Flags.Value.HasFlag(SabreTools.Models.MicrosoftCabinet.HeaderFlags.NEXT_CABINET))
-#endif
- {
- builder.AppendLine($" Next cabinet: {CabinetNext}");
- builder.AppendLine($" Next disk: {DiskNext}");
- }
-
- builder.AppendLine();
- }
-
- ///
- /// Print folders information
- ///
- /// StringBuilder to append information to
- private void PrintFolders(StringBuilder builder)
- {
- builder.AppendLine(" Folders:");
- builder.AppendLine(" -------------------------");
- if (FolderCount == 0 || Folders == null || Folders.Length == 0)
- {
- builder.AppendLine(" No folders");
- }
- else
- {
- for (int i = 0; i < Folders.Length; i++)
- {
- var entry = Folders[i];
- builder.AppendLine($" Folder {i}");
- if (entry == null)
- {
- builder.AppendLine(" [NULL]");
- continue;
- }
-
- builder.AppendLine($" Cab start offset = {entry.CabStartOffset} (0x{entry.CabStartOffset:X})");
- builder.AppendLine($" Data count = {entry.DataCount} (0x{entry.DataCount:X})");
- builder.AppendLine($" Compression type = {entry.CompressionType} (0x{entry.CompressionType:X})");
- builder.AppendLine($" Masked compression type = {entry.CompressionType & SabreTools.Models.MicrosoftCabinet.CompressionType.MASK_TYPE}");
- builder.AppendLine($" Reserved data = {(entry.ReservedData == null ? "[NULL]" : BitConverter.ToString(entry.ReservedData).Replace("-", " "))}");
- builder.AppendLine();
-
- builder.AppendLine(" Data Blocks");
- builder.AppendLine(" -------------------------");
- if (entry.DataBlocks == null || entry.DataBlocks.Length == 0)
- {
- builder.AppendLine(" No data blocks");
- }
- else
- {
- for (int j = 0; j < entry.DataBlocks.Length; j++)
- {
- var dataBlock = entry.DataBlocks[j];
- builder.AppendLine($" Data Block {j}");
- if (dataBlock == null)
- {
- builder.AppendLine(" [NULL]");
- continue;
- }
-
- builder.AppendLine($" Checksum = {dataBlock.Checksum} (0x{dataBlock.Checksum:X})");
- builder.AppendLine($" Compressed size = {dataBlock.CompressedSize} (0x{dataBlock.CompressedSize:X})");
- builder.AppendLine($" Uncompressed size = {dataBlock.UncompressedSize} (0x{dataBlock.UncompressedSize:X})");
- builder.AppendLine($" Reserved data = {(dataBlock.ReservedData == null ? "[NULL]" : BitConverter.ToString(dataBlock.ReservedData).Replace("-", " "))}");
- //builder.AppendLine($" Compressed data = {BitConverter.ToString(dataBlock.CompressedData).Replace("-", " ")}");
- }
- }
- }
- }
- builder.AppendLine();
- }
-
- ///
- /// Print files information
- ///
- /// StringBuilder to append information to
- private void PrintFiles(StringBuilder builder)
- {
- builder.AppendLine(" Files:");
- builder.AppendLine(" -------------------------");
- if (FileCount == 0 || Files == null || Files.Length == 0)
- {
- builder.AppendLine(" No files");
- }
- else
- {
- for (int i = 0; i < Files.Length; i++)
- {
- var entry = Files[i];
- builder.AppendLine($" File {i}");
- if (entry == null)
- {
- builder.AppendLine(" [NULL]");
- continue;
- }
-
- builder.AppendLine($" File size = {entry.FileSize} (0x{entry.FileSize:X})");
- builder.AppendLine($" Folder start offset = {entry.FolderStartOffset} (0x{entry.FolderStartOffset:X})");
- builder.AppendLine($" Folder index = {entry.FolderIndex} (0x{entry.FolderIndex:X})");
- builder.AppendLine($" Date = {entry.Date} (0x{entry.Date:X})");
- builder.AppendLine($" Time = {entry.Time} (0x{entry.Time:X})");
- builder.AppendLine($" Attributes = {entry.Attributes} (0x{entry.Attributes:X})");
- builder.AppendLine($" Name = {entry.Name ?? "[NULL]"}");
- }
- }
- builder.AppendLine();
- }
-
#if NET6_0_OR_GREATER
///