[DatItems] Add reading Blanks where appropriate

This commit is contained in:
Matt Nadareski
2018-01-04 01:12:49 -08:00
parent 8f85f7af8a
commit 33283b7ea5
4 changed files with 72 additions and 39 deletions

View File

@@ -58,7 +58,7 @@ namespace SabreTools.Library.DatFiles
Encoding enc = Utilities.GetEncoding(filename); Encoding enc = Utilities.GetEncoding(filename);
StreamReader sr = new StreamReader(Utilities.TryOpenRead(filename), enc); StreamReader sr = new StreamReader(Utilities.TryOpenRead(filename), enc);
bool block = false, superdat = false; bool block = false, superdat = false, containsItems = false;
string blockname = "", tempgamename = "", gamedesc = "", cloneof = "", string blockname = "", tempgamename = "", gamedesc = "", cloneof = "",
romof = "", sampleof = "", year = "", manufacturer = ""; romof = "", sampleof = "", year = "", manufacturer = "";
while (!sr.EndOfStream) while (!sr.EndOfStream)
@@ -82,6 +82,7 @@ namespace SabreTools.Library.DatFiles
} }
block = true; block = true;
containsItems = false;
} }
// If the line is a rom-like item and we're in a block // If the line is a rom-like item and we're in a block
@@ -91,6 +92,7 @@ namespace SabreTools.Library.DatFiles
|| (line.Trim().StartsWith("sample") && !line.Trim().StartsWith("sampleof")) || (line.Trim().StartsWith("sample") && !line.Trim().StartsWith("sampleof"))
) && block) ) && block)
{ {
containsItems = true;
ItemType temptype = ItemType.Rom; ItemType temptype = ItemType.Rom;
if (line.Trim().StartsWith("rom (")) if (line.Trim().StartsWith("rom ("))
{ {
@@ -535,52 +537,19 @@ namespace SabreTools.Library.DatFiles
case "forcemerging": case "forcemerging":
if (ForceMerging == ForceMerging.None) if (ForceMerging == ForceMerging.None)
{ {
switch (itemval) ForceMerging = Utilities.GetForceMerging(itemval);
{
case "none":
ForceMerging = ForceMerging.None;
break;
case "split":
ForceMerging = ForceMerging.Split;
break;
case "merged":
ForceMerging = ForceMerging.Merged;
break;
case "nonmerged":
ForceMerging = ForceMerging.NonMerged;
break;
case "full":
ForceMerging = ForceMerging.Full;
break;
}
} }
break; break;
case "forcezipping": case "forcezipping":
if (ForcePacking == ForcePacking.None) if (ForcePacking == ForcePacking.None)
{ {
switch (itemval) ForcePacking = Utilities.GetForcePacking(itemval);
{
case "yes":
ForcePacking = ForcePacking.Zip;
break;
case "no":
ForcePacking = ForcePacking.Unzip;
break;
}
} }
break; break;
case "forcepacking": case "forcepacking":
if (ForcePacking == ForcePacking.None) if (ForcePacking == ForcePacking.None)
{ {
switch (itemval) ForcePacking = Utilities.GetForcePacking(itemval);
{
case "zip":
ForcePacking = ForcePacking.Zip;
break;
case "unzip":
ForcePacking = ForcePacking.Unzip;
break;
}
} }
break; break;
} }
@@ -590,7 +559,28 @@ namespace SabreTools.Library.DatFiles
// If we find an end bracket that's not associated with anything else, the block is done // If we find an end bracket that's not associated with anything else, the block is done
else if (Regex.IsMatch(line, Constants.EndPatternCMP) && block) else if (Regex.IsMatch(line, Constants.EndPatternCMP) && block)
{ {
block = false; // If no items were found for this machine, add a Blank placeholder
if (!containsItems)
{
Blank blank = new Blank()
{
MachineName = tempgamename,
MachineDescription = gamedesc,
CloneOf = cloneof,
RomOf = romof,
SampleOf = sampleof,
Manufacturer = manufacturer,
Year = year,
SystemID = sysid,
SourceID = srcid,
};
// Now process and add the rom
ParseAddHelper(blank, clean, remUnicode);
}
block = false, containsItems = false;
blockname = ""; tempgamename = ""; gamedesc = ""; cloneof = ""; blockname = ""; tempgamename = ""; gamedesc = ""; cloneof = "";
romof = ""; sampleof = ""; year = ""; manufacturer = ""; romof = ""; sampleof = ""; year = ""; manufacturer = "";
} }

View File

@@ -2957,10 +2957,13 @@ namespace SabreTools.Library.DatFiles
foreach (DatItem item in parentItems) foreach (DatItem item in parentItems)
{ {
DatItem datItem = (DatItem)item.Clone(); DatItem datItem = (DatItem)item.Clone();
while (this[game].Contains(datItem))
{
Remove(game, datItem); Remove(game, datItem);
} }
} }
} }
}
/// <summary> /// <summary>
/// Use cloneof tags to remove roms from the children /// Use cloneof tags to remove roms from the children
@@ -3274,6 +3277,7 @@ namespace SabreTools.Library.DatFiles
{ {
case ItemType.Archive: case ItemType.Archive:
case ItemType.BiosSet: case ItemType.BiosSet:
case ItemType.Blank:
case ItemType.Release: case ItemType.Release:
case ItemType.Sample: case ItemType.Sample:
key = item.Type.ToString(); key = item.Type.ToString();

View File

@@ -501,6 +501,7 @@ namespace SabreTools.Library.DatFiles
long? areasize = null; long? areasize = null;
List<Tuple<string, string>> infos = new List<Tuple<string, string>>(); List<Tuple<string, string>> infos = new List<Tuple<string, string>>();
List<Tuple<string, string>> features = new List<Tuple<string, string>>(); List<Tuple<string, string>> features = new List<Tuple<string, string>>();
bool containsItems = false;
// We want to process the entire subtree of the game // We want to process the entire subtree of the game
subreader = xtr.ReadSubtree(); subreader = xtr.ReadSubtree();
@@ -623,6 +624,7 @@ namespace SabreTools.Library.DatFiles
break; break;
case "romCRC": case "romCRC":
empty = false; empty = false;
containsItems = true;
ext = (subreader.GetAttribute("extension") ?? ""); ext = (subreader.GetAttribute("extension") ?? "");
@@ -698,6 +700,7 @@ namespace SabreTools.Library.DatFiles
break; break;
case "release": case "release":
empty = false; empty = false;
containsItems = true;
bool? defaultrel = null; bool? defaultrel = null;
if (subreader.GetAttribute("default") != null) if (subreader.GetAttribute("default") != null)
@@ -739,6 +742,7 @@ namespace SabreTools.Library.DatFiles
break; break;
case "biosset": case "biosset":
empty = false; empty = false;
containsItems = true;
bool? defaultbios = null; bool? defaultbios = null;
if (subreader.GetAttribute("default") != null) if (subreader.GetAttribute("default") != null)
@@ -782,6 +786,7 @@ namespace SabreTools.Library.DatFiles
break; break;
case "archive": case "archive":
empty = false; empty = false;
containsItems = true;
DatItem archiverom = new Archive DatItem archiverom = new Archive
{ {
@@ -810,6 +815,7 @@ namespace SabreTools.Library.DatFiles
break; break;
case "sample": case "sample":
empty = false; empty = false;
containsItems = true;
DatItem samplerom = new Sample DatItem samplerom = new Sample
{ {
@@ -839,6 +845,7 @@ namespace SabreTools.Library.DatFiles
case "rom": case "rom":
case "disk": case "disk":
empty = false; empty = false;
containsItems = true;
// If the rom has a merge tag, add it // If the rom has a merge tag, add it
string merge = subreader.GetAttribute("merge"); string merge = subreader.GetAttribute("merge");
@@ -983,6 +990,31 @@ namespace SabreTools.Library.DatFiles
} }
} }
// If no items were found for this machine, add a Blank placeholder
if (!containsItems)
{
Blank blank = new Blank()
{
Supported = supported,
Publisher = publisher,
Infos = infos,
PartName = partname,
PartInterface = partinterface,
Features = features,
AreaName = areaname,
AreaSize = areasize,
SystemID = sysid,
System = filename,
SourceID = srcid,
}
blank.CopyMachineInformation(machine);
// Now process and add the rom
key = ParseAddHelper(blank, clean, remUnicode);
}
xtr.Skip(); xtr.Skip();
break; break;
case "dir": case "dir":
@@ -1004,6 +1036,7 @@ namespace SabreTools.Library.DatFiles
break; break;
case "file": case "file":
empty = false; empty = false;
containsItems = true;
// If the rom is itemStatus, flag it // If the rom is itemStatus, flag it
its = ItemStatus.None; its = ItemStatus.None;

View File

@@ -665,6 +665,10 @@ namespace SabreTools.Library.Tools
return ForceMerging.None; return ForceMerging.None;
case "split": case "split":
return ForceMerging.Split; return ForceMerging.Split;
case "merged":
return ForceMerging.Merged;
case "nonmerged":
return ForceMerging.NonMerged;
case "full": case "full":
return ForceMerging.Full; return ForceMerging.Full;
} }
@@ -703,8 +707,10 @@ namespace SabreTools.Library.Tools
case "none": case "none":
default: default:
return ForcePacking.None; return ForcePacking.None;
case "yes":
case "zip": case "zip":
return ForcePacking.Zip; return ForcePacking.Zip;
case "no":
case "unzip": case "unzip":
return ForcePacking.Unzip; return ForcePacking.Unzip;
} }