diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs
index 924555b0..11b009b0 100644
--- a/SabreTools.Library/DatFiles/DatFile.cs
+++ b/SabreTools.Library/DatFiles/DatFile.cs
@@ -3486,7 +3486,7 @@ namespace SabreTools.Library.DatFiles
{
empties = archive.GetEmptyFolders();
}
-
+
// Add add all of the found empties to the DAT
Parallel.ForEach(empties, Globals.ParallelOptions, empty =>
{
@@ -3537,7 +3537,7 @@ namespace SabreTools.Library.DatFiles
if (datItem.ItemType != ItemType.Rom && datItem.ItemType != ItemType.Disk)
{
return;
- }
+ }
try
{
@@ -4103,20 +4103,16 @@ namespace SabreTools.Library.DatFiles
outputFormat = OutputFormat.Folder;
}
- // Prepopluate a few key strings based on DatItem type
- string crc = null;
- string sha1 = null;
- if (datItem.ItemType == ItemType.Rom)
+ // If we have a disk, change it into a Rom for later use
+ if (datItem.ItemType == ItemType.Disk)
{
- crc = ((Rom)datItem).CRC;
- sha1 = ((Rom)datItem).SHA1;
- }
- else if (datItem.ItemType == ItemType.Disk)
- {
- crc = "";
- sha1 = ((Disk)datItem).SHA1;
+ datItem = ((Disk)datItem).ConvertToRom();
}
+ // Prepopluate a few key strings
+ string crc = ((Rom)datItem).CRC ?? string.Empty;
+ string sha1 = ((Rom)datItem).SHA1 ?? string.Empty;
+
// Find if the file has duplicates in the DAT
bool hasDuplicates = datItem.HasDuplicates(this);
@@ -5503,7 +5499,7 @@ namespace SabreTools.Library.DatFiles
{
Globals.Logger.Error("Datfile {0} could not be written out: {1}", outfile, ex.ToString());
}
-
+
});
}
catch (Exception ex)
diff --git a/SabreTools.Library/DatItems/Disk.cs b/SabreTools.Library/DatItems/Disk.cs
index a62b20a2..56a1e1d7 100644
--- a/SabreTools.Library/DatItems/Disk.cs
+++ b/SabreTools.Library/DatItems/Disk.cs
@@ -180,6 +180,65 @@ namespace SabreTools.Library.DatItems
};
}
+ ///
+ /// Convert a disk to the closest Rom approximation
+ ///
+ ///
+ public Rom ConvertToRom()
+ {
+ var rom = new Rom()
+ {
+ Name = this.Name,
+ ItemType = ItemType.Rom,
+ DupeType = this.DupeType,
+
+ CRC = null,
+ MD5 = this.MD5,
+ SHA1 = this.SHA1,
+ SHA256 = this.SHA256,
+ SHA384 = this.SHA384,
+ SHA512 = this.SHA512,
+
+ MergeTag = this.MergeTag,
+ Region = this.Region,
+ ItemStatus = this.ItemStatus,
+ Optional = this.Optional,
+
+ MachineName = this.MachineName,
+ Comment = this.Comment,
+ MachineDescription = this.MachineDescription,
+ Year = this.Year,
+ Manufacturer = this.Manufacturer,
+ Publisher = this.Publisher,
+ RomOf = this.RomOf,
+ CloneOf = this.CloneOf,
+ SampleOf = this.SampleOf,
+ Supported = this.Supported,
+ SourceFile = this.SourceFile,
+ Runnable = this.Runnable,
+ Board = this.Board,
+ RebuildTo = this.RebuildTo,
+ Devices = this.Devices,
+ SlotOptions = this.SlotOptions,
+ Infos = this.Infos,
+ MachineType = this.MachineType,
+
+ PartName = this.PartName,
+ PartInterface = this.PartInterface,
+ Features = this.Features,
+ AreaName = this.AreaName,
+ AreaSize = this.AreaSize,
+
+ SystemID = this.SystemID,
+ System = this.System,
+ SourceID = this.SourceID,
+ Source = this.Source,
+ Remove = this.Remove,
+ };
+
+ return rom;
+ }
+
#endregion
#region Comparision Methods