mirror of
https://github.com/SabreTools/BinaryObjectScanner.git
synced 2026-09-25 08:15:05 +00:00
Port MS-CAB to new printing
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Print header information
|
||||
/// </summary>
|
||||
/// <param name="builder">StringBuilder to append information to</param>
|
||||
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();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Print folders information
|
||||
/// </summary>
|
||||
/// <param name="builder">StringBuilder to append information to</param>
|
||||
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();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Print files information
|
||||
/// </summary>
|
||||
/// <param name="builder">StringBuilder to append information to</param>
|
||||
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
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
Reference in New Issue
Block a user