Add CHD printer

This commit is contained in:
Matt Nadareski
2024-10-31 12:03:34 -04:00
parent 67fc51224b
commit 5edbacde74

View File

@@ -0,0 +1,137 @@
using System.Text;
using SabreTools.Models.CHD;
using SabreTools.Serialization.Interfaces;
namespace SabreTools.Serialization.Printers
{
public class CHD : IPrinter<Header>
{
/// <inheritdoc/>
public void PrintInformation(StringBuilder builder, Header model)
=> Print(builder, model);
public static void Print(StringBuilder builder, Header header)
{
builder.AppendLine("CHD Header Information:");
builder.AppendLine("-------------------------");
builder.AppendLine();
if (header == null)
{
builder.AppendLine(" No header");
builder.AppendLine();
return;
}
switch (header)
{
case HeaderV1 v1:
Print(builder, v1);
break;
case HeaderV2 v2:
Print(builder, v2);
break;
case HeaderV3 v3:
Print(builder, v3);
break;
case HeaderV4 v4:
Print(builder, v4);
break;
case HeaderV5 v5:
Print(builder, v5);
break;
default:
builder.AppendLine(" Unrecognized header type");
builder.AppendLine();
break;
}
}
private static void Print(StringBuilder builder, HeaderV1 header)
{
builder.AppendLine(header.Tag, $" Tag");
builder.AppendLine(header.Length, $" Length");
builder.AppendLine(header.Version, $" Version");
builder.AppendLine($" Flags: {header.Flags} (0x{header.Flags:X})");
builder.AppendLine($" Compression: {header.Compression} (0x{header.Compression:X})");
builder.AppendLine(header.HunkSize, $" Hunk size");
builder.AppendLine(header.TotalHunks, $" Total hunks");
builder.AppendLine(header.Cylinders, $" Cylinders");
builder.AppendLine(header.Heads, $" Heads");
builder.AppendLine(header.Sectors, $" Sectors");
builder.AppendLine(header.MD5, $" MD5");
builder.AppendLine(header.ParentMD5, $" Parent MD5");
builder.AppendLine();
}
private static void Print(StringBuilder builder, HeaderV2 header)
{
builder.AppendLine(header.Tag, $" Tag");
builder.AppendLine(header.Length, $" Length");
builder.AppendLine(header.Version, $" Version");
builder.AppendLine($" Flags: {header.Flags} (0x{header.Flags:X})");
builder.AppendLine($" Compression: {header.Compression} (0x{header.Compression:X})");
builder.AppendLine(header.HunkSize, $" Hunk size");
builder.AppendLine(header.TotalHunks, $" Total hunks");
builder.AppendLine(header.Cylinders, $" Cylinders");
builder.AppendLine(header.Heads, $" Heads");
builder.AppendLine(header.Sectors, $" Sectors");
builder.AppendLine(header.MD5, $" MD5");
builder.AppendLine(header.ParentMD5, $" Parent MD5");
builder.AppendLine(header.BytesPerSector, $" Bytes per sector");
builder.AppendLine();
}
private static void Print(StringBuilder builder, HeaderV3 header)
{
builder.AppendLine(header.Tag, $" Tag");
builder.AppendLine(header.Length, $" Length");
builder.AppendLine(header.Version, $" Version");
builder.AppendLine($" Flags: {header.Flags} (0x{header.Flags:X})");
builder.AppendLine($" Compression: {header.Compression} (0x{header.Compression:X})");
builder.AppendLine(header.TotalHunks, $" Total hunks");
builder.AppendLine(header.LogicalBytes, $" Logical bytes");
builder.AppendLine(header.MetaOffset, $" Meta offset");
builder.AppendLine(header.MD5, $" MD5");
builder.AppendLine(header.ParentMD5, $" Parent MD5");
builder.AppendLine(header.HunkBytes, $" Hunk bytes");
builder.AppendLine(header.SHA1, $" SHA-1");
builder.AppendLine(header.ParentSHA1, $" Parent SHA-1");
builder.AppendLine();
}
private static void Print(StringBuilder builder, HeaderV4 header)
{
builder.AppendLine(header.Tag, $" Tag");
builder.AppendLine(header.Length, $" Length");
builder.AppendLine(header.Version, $" Version");
builder.AppendLine($" Flags: {header.Flags} (0x{header.Flags:X})");
builder.AppendLine($" Compression: {header.Compression} (0x{header.Compression:X})");
builder.AppendLine(header.TotalHunks, $" Total hunks");
builder.AppendLine(header.LogicalBytes, $" Logical bytes");
builder.AppendLine(header.MetaOffset, $" Meta offset");
builder.AppendLine(header.HunkBytes, $" Hunk bytes");
builder.AppendLine(header.SHA1, $" SHA-1");
builder.AppendLine(header.ParentSHA1, $" Parent SHA-1");
builder.AppendLine(header.RawSHA1, $" Raw SHA-1");
builder.AppendLine();
}
private static void Print(StringBuilder builder, HeaderV5 header)
{
builder.AppendLine(header.Tag, $" Tag");
builder.AppendLine(header.Length, $" Length");
builder.AppendLine(header.Version, $" Version");
builder.AppendLine(header.Compressors, $" Compressors");
builder.AppendLine(header.LogicalBytes, $" Logical bytes");
builder.AppendLine(header.MapOffset, $" Map offset");
builder.AppendLine(header.MetaOffset, $" Meta offset");
builder.AppendLine(header.HunkBytes, $" Hunk bytes");
builder.AppendLine(header.UnitBytes, $" Unit bytes");
builder.AppendLine(header.RawSHA1, $" Raw SHA-1");
builder.AppendLine(header.SHA1, $" SHA-1");
builder.AppendLine(header.ParentSHA1, $" Parent SHA-1");
builder.AppendLine();
}
}
}