From ef9fa562abdc49f43bfd6478e1af6de128c4cf69 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 30 Sep 2025 20:35:40 -0400 Subject: [PATCH] More BZip documenting --- .../Models/BZip2/Block.cs | 12 ++++++ .../Models/BZip2/BlockHeader.cs | 37 +++++++++++++++++++ .../Models/BZip2/BlockTrees.cs | 26 +++++++++++++ .../Models/BZip2/Constants.cs | 2 +- 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 SabreTools.Serialization/Models/BZip2/Block.cs create mode 100644 SabreTools.Serialization/Models/BZip2/BlockHeader.cs create mode 100644 SabreTools.Serialization/Models/BZip2/BlockTrees.cs diff --git a/SabreTools.Serialization/Models/BZip2/Block.cs b/SabreTools.Serialization/Models/BZip2/Block.cs new file mode 100644 index 00000000..d527576e --- /dev/null +++ b/SabreTools.Serialization/Models/BZip2/Block.cs @@ -0,0 +1,12 @@ +namespace SabreTools.Data.Models.BZip2 +{ + public class Block + { + /// + /// Block header + /// + public BlockHeader? Header { get; set; } + + // TODO: Implement remaining structures + } +} diff --git a/SabreTools.Serialization/Models/BZip2/BlockHeader.cs b/SabreTools.Serialization/Models/BZip2/BlockHeader.cs new file mode 100644 index 00000000..04a41087 --- /dev/null +++ b/SabreTools.Serialization/Models/BZip2/BlockHeader.cs @@ -0,0 +1,37 @@ +namespace SabreTools.Data.Models.BZip2 +{ + public class BlockHeader + { + /// + /// A 48-bit integer value 31 41 59 26 53 59, which + /// is the binary-coded decimal representation of + /// pi. It is used to differentiate the block + /// from the footer. + /// + /// This may not be byte-aligned + public byte[]? Magic { get; set; } + + /// + /// The CRC-32 checksum of the uncompressed data contained + /// in . It is the same checksum + /// used in GZip, but is slightly different due to the + /// bit-packing differences. + /// + public uint Crc32 { get; set; } + + /// + /// Should be 0. Previous versions of BZip2 allowed + /// the input data to be randomized to avoid + /// pathological strings from causing the runtime + /// to be exponential. + /// + /// Actually a 1-bit value + public byte Randomized { get; set; } + + /// + /// Contains the origin pointer used in the BWT stage + /// + /// Actually a 24-bit value + public uint OrigPtr { get; set; } + } +} diff --git a/SabreTools.Serialization/Models/BZip2/BlockTrees.cs b/SabreTools.Serialization/Models/BZip2/BlockTrees.cs new file mode 100644 index 00000000..9d735a06 --- /dev/null +++ b/SabreTools.Serialization/Models/BZip2/BlockTrees.cs @@ -0,0 +1,26 @@ +namespace SabreTools.Data.Models.BZip2 +{ + public class BlockTrees + { + // TODO: Implement SymMap + + /// + /// Indicates the number of Huffman trees used in + /// the HUFF stage. It must between 2 and 6. + /// + /// Actually a 3-bit value + public byte NumTrees { get; set; } + + /// + /// Indicates the number of selectors used in the + /// HUFF stage. There must be at least 1 selector + /// defined. + /// + /// Actually a 15-bit value + public ushort NumSels { get; set; } + + // TODO: Implement Selectors + + // TODO: Implement Trees + } +} \ No newline at end of file diff --git a/SabreTools.Serialization/Models/BZip2/Constants.cs b/SabreTools.Serialization/Models/BZip2/Constants.cs index 298d8fd1..ed505c82 100644 --- a/SabreTools.Serialization/Models/BZip2/Constants.cs +++ b/SabreTools.Serialization/Models/BZip2/Constants.cs @@ -6,4 +6,4 @@ namespace SabreTools.Data.Models.BZip2 public const string SignatureString = "BZh"; } -} \ No newline at end of file +}