From 652942ab9fff11de8b73c22b3d2b2d005e5280e8 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 31 Jul 2025 14:00:55 -0400 Subject: [PATCH] Add extensions based on external need --- .../Wrappers/MicrosoftCabinet.cs | 18 +++++++++++------ .../Wrappers/NewExecutable.cs | 20 +++++++++++++++++++ .../Wrappers/PortableExecutable.cs | 9 +++++++++ SabreTools.Serialization/Wrappers/Quantum.cs | 2 +- 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/SabreTools.Serialization/Wrappers/MicrosoftCabinet.cs b/SabreTools.Serialization/Wrappers/MicrosoftCabinet.cs index a09946cf..e2a3641e 100644 --- a/SabreTools.Serialization/Wrappers/MicrosoftCabinet.cs +++ b/SabreTools.Serialization/Wrappers/MicrosoftCabinet.cs @@ -21,23 +21,29 @@ namespace SabreTools.Serialization.Wrappers public CFFILE[]? Files => Model.Files; /// - public int FileCount => Model.Header?.FileCount ?? 0; + public int FileCount => Header?.FileCount ?? 0; /// public CFFOLDER[]? Folders => Model.Folders; /// - public int FolderCount => Model.Header?.FolderCount ?? 0; + public int FolderCount => Header?.FolderCount ?? 0; /// public CFHEADER? Header => Model.Header; + /// + public string? CabinetNext => Header?.CabinetNext; + /// /// Reference to the next cabinet header /// /// Only used in multi-file public MicrosoftCabinet? Next { get; set; } + /// + public string? CabinetPrev => Header?.CabinetPrev; + /// /// Reference to the next previous header /// @@ -298,7 +304,7 @@ namespace SabreTools.Serialization.Wrappers return null; // Seek to the first part of the cabinet set - while (current.Header.CabinetPrev != null) + while (current.CabinetPrev != null) { // Attempt to open the previous cabinet var prev = current.OpenPrevious(filename); @@ -313,7 +319,7 @@ namespace SabreTools.Serialization.Wrappers var start = current; // Read in the cabinet parts sequentially - while (current.Header.CabinetNext != null) + while (current.CabinetNext != null) { // Open the next cabinet and try to parse var next = current.OpenNext(filename); @@ -344,7 +350,7 @@ namespace SabreTools.Serialization.Wrappers filename = Path.GetFullPath(filename); // Get if the cabinet has a next part - string? next = Header.CabinetNext; + string? next = CabinetNext; if (string.IsNullOrEmpty(next)) return null; @@ -372,7 +378,7 @@ namespace SabreTools.Serialization.Wrappers filename = Path.GetFullPath(filename); // Get if the cabinet has a previous part - string? prev = Header.CabinetPrev; + string? prev = CabinetPrev; if (string.IsNullOrEmpty(prev)) return null; diff --git a/SabreTools.Serialization/Wrappers/NewExecutable.cs b/SabreTools.Serialization/Wrappers/NewExecutable.cs index a171c139..f7ec8f7a 100644 --- a/SabreTools.Serialization/Wrappers/NewExecutable.cs +++ b/SabreTools.Serialization/Wrappers/NewExecutable.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; namespace SabreTools.Serialization.Wrappers @@ -12,6 +13,25 @@ namespace SabreTools.Serialization.Wrappers #endregion + #region Extension Properties + + /// + public Models.NewExecutable.ExecutableHeader? Header => Model.Header; + + /// + public Dictionary? ImportedNameTable => Model.ImportedNameTable; + + /// + public Models.NewExecutable.NonResidentNameTableEntry[]? NonResidentNameTable => Model.NonResidentNameTable; + + /// + public Models.NewExecutable.ResidentNameTableEntry[]? ResidentNameTable => Model.ResidentNameTable; + + /// + public Models.MSDOS.Executable? Stub => Model.Stub; + + #endregion + #region Constructors /// diff --git a/SabreTools.Serialization/Wrappers/PortableExecutable.cs b/SabreTools.Serialization/Wrappers/PortableExecutable.cs index 5b9432b8..00355a20 100644 --- a/SabreTools.Serialization/Wrappers/PortableExecutable.cs +++ b/SabreTools.Serialization/Wrappers/PortableExecutable.cs @@ -17,6 +17,9 @@ namespace SabreTools.Serialization.Wrappers #region Extension Properties + /// + public Models.PortableExecutable.COFFFileHeader? COFFFileHeader => Model.COFFFileHeader; + /// /// Dictionary of debug data /// @@ -85,6 +88,9 @@ namespace SabreTools.Serialization.Wrappers } } + /// + public Models.PortableExecutable.ExportTable? ExportTable => Model.ExportTable; + /// /// Header padding data, if it exists /// @@ -181,6 +187,9 @@ namespace SabreTools.Serialization.Wrappers } } + /// + public Models.PortableExecutable.ImportTable? ImportTable => Model.ImportTable; + /// public Models.PortableExecutable.OptionalHeader? OptionalHeader => Model.OptionalHeader; diff --git a/SabreTools.Serialization/Wrappers/Quantum.cs b/SabreTools.Serialization/Wrappers/Quantum.cs index e9e1015c..15c0a3da 100644 --- a/SabreTools.Serialization/Wrappers/Quantum.cs +++ b/SabreTools.Serialization/Wrappers/Quantum.cs @@ -19,7 +19,7 @@ namespace SabreTools.Serialization.Wrappers public long CompressedDataOffset => Model.CompressedDataOffset; /// - public ushort FileCount => Model.Header?.FileCount ?? 0; + public ushort FileCount => Header?.FileCount ?? 0; /// public FileDescriptor[] FileList => Model.FileList ?? [];