private static void LoadSlot(DatGame dGame, XmlNode slot) { XmlNodeList slotList = slot.SelectNodes("slotoption"); if (slotList == null) { return; } for (int i = 0; i < slotList.Count; i++) { if (slotList[i].Attributes == null) { continue; } string name = VarFix.String(slotList[i].Attributes.GetNamedItem("devname")); if (dGame.slot == null) { dGame.slot = new List <string>(); } dGame.slot.Add(name); } }
public static void RemoveDevices(DatDir tDat) { DatBase[] children = tDat.ToArray(); tDat.ChildrenClear(); foreach (DatBase child in children) { DatDir mGame = (DatDir)child; if (mGame.DGame == null) { RemoveDevices(mGame); tDat.ChildAdd(mGame); } else { DatGame dGame = mGame.DGame; if (dGame != null && dGame.IsDevice == "yes" && dGame.Runnable == "no") { continue; } tDat.ChildAdd(mGame); } } }
private bool LoadGameFromDat(DatFileLoader dfl, DatDir parentDir) { if (dfl.Next != "(") { _errorReport?.Invoke(dfl.Filename, "( not found after game, on line " + dfl.LineNumber); return(false); } dfl.Gn(); string snext = dfl.Next.ToLower(); if (snext != "name") { _errorReport?.Invoke(dfl.Filename, "Name not found as first object in ( ), on line " + dfl.LineNumber); return(false); } string name = dfl.GnRest(); dfl.Gn(); DatDir dDir = new DatDir(DatFileType.UnSet) { Name = name, DGame = new DatGame() }; DatGame dGame = dDir.DGame; while (dfl.Next != ")") { switch (dfl.Next.ToLower()) { case "file": dfl.Gn(); if (!LoadFileFromDat(dfl, dDir)) { return(false); } dfl.Gn(); break; case "rom": dfl.Gn(); if (!LoadFileFromDat(dfl, dDir)) { return(false); } dfl.Gn(); break; default: _errorReport?.Invoke(dfl.Filename, "Error: key word '" + dfl.Next + "' not known in game, on line " + dfl.LineNumber); dfl.Gn(); break; } } parentDir.ChildAdd(dDir); return(true); }
public static void DatSetMakeNonMergeSet(DatDir tDat) { // look for merged roms, check if a rom exists in a parent set where the Name,Size and CRC all match. for (int g = 0; g < tDat.ChildCount; g++) { DatDir mGame = (DatDir)tDat.Child(g); if (mGame.DGame == null) { DatSetMakeNonMergeSet(mGame); } else { DatGame dGame = mGame.DGame; if (dGame?.device_ref == null) { continue; } List <DatDir> devices = new List <DatDir> { mGame }; foreach (string device in dGame.device_ref) { AddDevice(device, devices, tDat); } devices.RemoveAt(0); foreach (DatDir device in devices) { for (int i = 0; i < device.ChildCount; i++) { DatFile df0 = (DatFile)device.Child(i); bool crcFound = false; for (int j = 0; j < mGame.ChildCount; j++) { DatFile df1 = (DatFile)mGame.Child(j); if (ArrByte.bCompare(df0.SHA1, df1.SHA1)) { crcFound = true; break; } } if (!crcFound) { mGame.ChildAdd(device.Child(i)); } } } } } }
private static void LoadDeviceRef(DatGame dGame, XmlNode deviceNode) { if (deviceNode.Attributes == null) { return; } string name = VarFix.String(deviceNode.Attributes.GetNamedItem("name")); if (string.IsNullOrWhiteSpace(name)) { return; } if (dGame.device_ref == null) { dGame.device_ref = new List <string>(); } dGame.device_ref.Add(name); }
private DatGame ParseGame(DatObject datObj) { if (datObj == null) { throw new ArgumentNullException("Can't parse game object, no object given."); } var datGame = new DatGame(); foreach (var prop in datObj.Properties) { var romAdded = false; if (prop.Name == "rom" && !romAdded) { romAdded = true; foreach (var romDatProp in (prop.Value as DatObject).Properties) { if (datGameProperties.TryGetValue("rom." + romDatProp.Name, out var romPropInfo)) { SetParsedProperty(romPropInfo, datGame, (string)romDatProp.Value); } } } else if (datGameProperties.TryGetValue(prop.Name, out var propInfo)) { if (prop.Value is DatObject) { throw new Exception("Can't assign object to uknown dat property."); } SetParsedProperty(propInfo, datGame, (string)prop.Value); } } datGame.FixData(); return(datGame); }
private void LoadGameFromDat(DatDir parentDir, XmlNode gameNode) { if (gameNode.Attributes == null) { return; } DatDir dDir = new DatDir(DatFileType.UnSet) { Name = VarFix.String(gameNode.Attributes.GetNamedItem("name")), DGame = new DatGame() }; DatGame dGame = dDir.DGame; dGame.Description = VarFix.String(gameNode.SelectSingleNode("description")); dGame.RomOf = VarFix.String(gameNode.Attributes?.GetNamedItem("romof")); dGame.CloneOf = VarFix.String(gameNode.Attributes?.GetNamedItem("cloneof")); dGame.Year = VarFix.String(gameNode.SelectSingleNode("year")); dGame.Manufacturer = VarFix.String(gameNode.SelectSingleNode("publisher")); XmlNodeList partNodeList = gameNode.SelectNodes("part"); if (partNodeList == null) { return; } for (int iP = 0; iP < partNodeList.Count; iP++) { _indexContinue = -1; XmlNodeList dataAreaNodeList = partNodeList[iP].SelectNodes("dataarea"); if (dataAreaNodeList == null) { continue; } for (int iD = 0; iD < dataAreaNodeList.Count; iD++) { XmlNodeList romNodeList = dataAreaNodeList[iD].SelectNodes("rom"); if (romNodeList == null) { continue; } for (int iR = 0; iR < romNodeList.Count; iR++) { LoadRomFromDat(dDir, romNodeList[iR]); } } } /* * for (int iP = 0; iP < partNodeList.Count; iP++) * { * XmlNodeList diskAreaNodeList = partNodeList[iP].SelectNodes("diskarea"); * if (diskAreaNodeList != null) * for (int iD = 0; iD < diskAreaNodeList.Count; iD++) * { * XmlNodeList romNodeList = diskAreaNodeList[iD].SelectNodes("disk"); * if (romNodeList != null) * for (int iR = 0; iR < romNodeList.Count; iR++) * { * LoadDiskFromDat(dDirCHD, romNodeList[iR]); * } * } * } */ if (dDir.ChildCount > 0) { parentDir.ChildAdd(dDir); } /* * if (tDirCHD.ChildCount > 0) * parentDir.ChildAdd(rvGameCHD, index1); */ }
private bool LoadGameFromDat(DatFileLoader dfl, DatDir parentDir) { dfl.Gn(); if (dfl.Next != "(") { _errorReport?.Invoke(dfl.Filename, "( not found after game, on line " + dfl.LineNumber); return(false); } dfl.Gn(); string snext = dfl.Next.ToLower(); string pathextra = ""; if (snext == "rebuildto") { pathextra = dfl.Gn(); dfl.Gn(); snext = dfl.Next.ToLower(); } if (snext != "name") { _errorReport?.Invoke(dfl.Filename, "Name not found as first object in ( ), on line " + dfl.LineNumber); return(false); } string name = dfl.GnRest(); name = Path.Combine(pathextra, name); dfl.Gn(); DatDir dDir = new DatDir(DatFileType.UnSet) { Name = name, DGame = new DatGame() }; DatGame dGame = dDir.DGame; while (dfl.Next != ")" && !dfl.EndOfStream()) { switch (dfl.Next.ToLower()) { case "romof": dGame.RomOf = dfl.GnRest(); break; case "description": dGame.Description = dfl.GnRest(); break; case "sourcefile": dGame.SourceFile = dfl.GnRest(); break; case "cloneof": dGame.CloneOf = dfl.GnRest(); break; case "sampleof": dGame.SampleOf = dfl.GnRest(); break; case "board": dGame.Board = dfl.GnRest(); break; case "year": dGame.Year = dfl.GnRest(); break; case "manufacturer": dGame.Manufacturer = dfl.GnRest(); break; case "history": dGame.History = dfl.GnRest(); break; case "serial": dfl.GnRest(); break; case "rebuildto": dfl.GnRest(); break; case "sample": dfl.GnRest(); break; case "biosset": dfl.GnRest(); break; case "chip": dfl.GnRest(); break; case "video": dfl.GnRest(); break; case "sound": dfl.GnRest(); break; case "input": dfl.GnRest(); break; case "dipswitch": dfl.GnRest(); break; case "driver": dfl.GnRest(); break; case "display": dfl.GnRest(); break; case "comment": case "releaseyear": case "releasemonth": case "releaseday": case "genre": case "developer": case "publisher": case "homepage": case "users": case "version": case "license": dfl.GnRest(); break; case "name": string tmpName = dfl.GnRest(); _errorReport?.Invoke(dfl.Filename, "Error: multiple names found in one game '" + tmpName + "' will be ignored, on line " + dfl.LineNumber); break; case "rom": if (!LoadRomFromDat(dfl, dDir)) { return(false); } break; case "disk": if (!LoadDiskFromDat(dfl, dDir)) { return(false); } break; case "archive": if (!LoadArchiveFromDat(dfl)) { return(false); } break; default: _errorReport?.Invoke(dfl.Filename, "Error: key word '" + dfl.Next + "' not known in game, on line " + dfl.LineNumber); break; } dfl.Gn(); } parentDir.ChildAdd(dDir); return(true); }
private void writeBase(dsw sw, DatDir baseDirIn, bool newStyle) { DatBase[] dirChildren = baseDirIn.ToArray(); if (dirChildren == null) { return; } foreach (DatBase baseObj in dirChildren) { DatDir baseDir = baseObj as DatDir; if (baseDir != null) { if (baseDir.DGame != null) { DatGame g = baseDir.DGame; sw.Write(newStyle ? @"<set" : @"<game"); sw.WriteItem("name", baseDir.Name); if (newStyle) { if (baseDir.DatFileType == DatFileType.DirTorrentZip) { sw.WriteItem("type", "trrntzip"); } else if (baseDir.DatFileType == DatFileType.DirRVZip) { sw.WriteItem("type", "rvzip"); } else if (baseDir.DatFileType == DatFileType.Dir7Zip) { sw.WriteItem("type", "7zip"); } else if (baseDir.DatFileType == DatFileType.Dir) { sw.WriteItem("type", "dir"); } } if (!g.IsEmuArc) { // sw.WriteItem("cloneof", g.CloneOf); // sw.WriteItem("romof", g.RomOf); } sw.WriteEnd(@">", 1); sw.WriteNode("description", g.Description); if (g.IsEmuArc) { sw.WriteLine("<tea>", 1); sw.WriteNode("titleid", g.TitleId); sw.WriteNode("source", g.Source); sw.WriteNode("publisher", g.Publisher); sw.WriteNode("developer", g.Developer); sw.WriteNode("year", g.Year); sw.WriteNode("genre", g.Genre); sw.WriteNode("subgenre", g.SubGenre); sw.WriteNode("ratings", g.Ratings); sw.WriteNode("score", g.Score); sw.WriteNode("players", g.Players); sw.WriteNode("enabled", g.Enabled); sw.WriteNode("crc", g.CRC); sw.WriteNode("cloneof", g.CloneOf); sw.WriteNode("relatedto", g.RelatedTo); sw.WriteLine("</trurip>", -1); } else { sw.WriteNode("year", g.Year); sw.WriteNode("manufacturer", g.Manufacturer); } writeBase(sw, baseDir, newStyle); sw.WriteLine(newStyle ? @"</set>" : @"</game>", -1); } else { sw.WriteLine(@"<dir name=""" + Etxt(baseDir.Name) + @""">", 1); writeBase(sw, baseDir, newStyle); sw.WriteLine(@"</dir>", -1); } continue; } if (baseObj is DatFile baseRom) { if (baseRom.Name.Substring(baseRom.Name.Length - 1) == "/" && newStyle) { sw.Write(@"<dir"); sw.WriteItem("name", baseRom.Name.Substring(0, baseRom.Name.Length - 1)); //sw.WriteItem("merge", baseRom.Merge); if (baseRom.Date != "1996/12/24 23:32:00") { sw.WriteItem("date", baseRom.Date); } sw.WriteEnd("/>"); } else { sw.Write(newStyle ? @"<file" : @"<rom"); sw.WriteItem("name", baseRom.Name); //sw.WriteItem("merge", baseRom.Merge); sw.WriteItem("size", baseRom.Size); sw.WriteItem("crc", baseRom.CRC); sw.WriteItem("sha1", baseRom.SHA1); sw.WriteItem("md5", baseRom.MD5); if (baseRom.Date != "1996/12/24 23:32:00") { sw.WriteItem("date", baseRom.Date); } if (baseRom.Status != null && baseRom.Status.ToLower() != "good") { sw.WriteItem("status", baseRom.Status); } sw.WriteEnd("/>"); } } } }
private static void LoadGameFromDat(DatDir parentDir, XmlNode gameNode) { if (gameNode.Attributes == null) { return; } DatGame dGame = new DatGame(); DatDir dDir = new DatDir(DatFileType.UnSet) { Name = VarFix.String(gameNode.Attributes.GetNamedItem("name")), DGame = dGame }; dGame.RomOf = VarFix.String(gameNode.Attributes.GetNamedItem("romof")); dGame.CloneOf = VarFix.String(gameNode.Attributes.GetNamedItem("cloneof")); dGame.SampleOf = VarFix.String(gameNode.Attributes.GetNamedItem("sampleof")); dGame.Description = VarFix.String(gameNode.SelectSingleNode("description")); dGame.SourceFile = VarFix.String(gameNode.Attributes?.GetNamedItem("sourcefile")); dGame.IsBios = VarFix.String(gameNode.Attributes?.GetNamedItem("isbios")); dGame.IsDevice = VarFix.String(gameNode.Attributes?.GetNamedItem("isdevice")); dGame.Board = VarFix.String(gameNode.Attributes?.GetNamedItem("board")); dGame.Year = VarFix.String(gameNode.SelectSingleNode("year")); dGame.Manufacturer = VarFix.String(gameNode.SelectSingleNode("manufacturer")); dGame.Runnable = VarFix.String(gameNode.Attributes?.GetNamedItem("runnable")); XmlNode tea = gameNode.SelectSingleNode("tea") ?? gameNode.SelectSingleNode("trurip"); if (tea != null) { dGame.IsTea = true; dGame.TitleId = VarFix.String(tea.SelectSingleNode("titleid")); dGame.Publisher = VarFix.String(tea.SelectSingleNode("publisher")); dGame.Developer = VarFix.String(tea.SelectSingleNode("developer")); dGame.Year = VarFix.String(gameNode.SelectSingleNode("year")); dGame.Genre = VarFix.String(tea.SelectSingleNode("genre")); dGame.SubGenre = VarFix.String(tea.SelectSingleNode("subgenre")); dGame.Ratings = VarFix.String(tea.SelectSingleNode("ratings")); dGame.Score = VarFix.String(tea.SelectSingleNode("score")); dGame.Players = VarFix.String(tea.SelectSingleNode("players")); dGame.Enabled = VarFix.String(tea.SelectSingleNode("enabled")); dGame.CRC = VarFix.String(tea.SelectSingleNode("crc")); dGame.CloneOf = VarFix.String(tea.SelectSingleNode("cloneof")); dGame.RelatedTo = VarFix.String(tea.SelectSingleNode("relatedto")); dGame.Source = VarFix.String(tea.SelectSingleNode("source")); } parentDir.ChildAdd(dDir); XmlNodeList romNodeList = gameNode.SelectNodes("rom"); if (romNodeList != null) { for (int i = 0; i < romNodeList.Count; i++) { LoadRomFromDat(dDir, romNodeList[i]); } } XmlNodeList diskNodeList = gameNode.SelectNodes("disk"); if (diskNodeList != null) { for (int i = 0; i < diskNodeList.Count; i++) { LoadDiskFromDat(dDir, diskNodeList[i]); } } XmlNodeList deviceRef = gameNode.SelectNodes("device_ref"); if (deviceRef != null) { for (int i = 0; i < deviceRef.Count; i++) { LoadDeviceRef(dGame, deviceRef[i]); } } XmlNodeList slotList = gameNode.SelectNodes("slot"); if (slotList != null) { for (int i = 0; i < slotList.Count; i++) { LoadSlot(dGame, slotList[i]); } } }
private void writeBase(dsw sw, DatDir baseDirIn) { DatBase[] dirChildren = baseDirIn.ToArray(); if (dirChildren == null) { return; } foreach (DatBase baseObj in dirChildren) { DatDir baseDir = baseObj as DatDir; if (baseDir != null) { if (baseDir.DGame != null) { DatGame g = baseDir.DGame; sw.Write(@"<game"); sw.WriteItem("name", baseDir.Name); if (!g.IsTea) { // sw.WriteItem("cloneof", g.CloneOf); // sw.WriteItem("romof", g.RomOf); } sw.WriteEnd(@">", 1); sw.WriteNode("description", g.Description); if (g.IsTea) { sw.WriteLine("<tea>", 1); sw.WriteNode("titleid", g.TitleId); sw.WriteNode("source", g.Source); sw.WriteNode("publisher", g.Publisher); sw.WriteNode("developer", g.Developer); sw.WriteNode("year", g.Year); sw.WriteNode("genre", g.Genre); sw.WriteNode("subgenre", g.SubGenre); sw.WriteNode("ratings", g.Ratings); sw.WriteNode("score", g.Score); sw.WriteNode("players", g.Players); sw.WriteNode("enabled", g.Enabled); sw.WriteNode("crc", g.CRC); sw.WriteNode("cloneof", g.CloneOf); sw.WriteNode("relatedto", g.RelatedTo); sw.WriteLine("</trurip>", -1); } else { sw.WriteNode("year", g.Year); sw.WriteNode("manufacturer", g.Manufacturer); } writeBase(sw, baseDir); sw.WriteLine(@"</game>", -1); } else { sw.WriteLine(@"<dir name=""" + Etxt(baseDir.Name) + @""">", 1); writeBase(sw, baseDir); sw.WriteLine(@"</dir>", -1); } continue; } DatFile baseRom = baseObj as DatFile; if (baseRom != null) { sw.Write(@"<rom"); sw.WriteItem("name", baseRom.Name); //sw.WriteItem("merge", baseRom.Merge); sw.WriteItem("size", baseRom.Size); sw.WriteItem("crc", baseRom.CRC); sw.WriteItem("sha1", baseRom.SHA1); sw.WriteItem("md5", baseRom.MD5); if (baseRom.Status.ToLower() != "good") { sw.WriteItem("status", baseRom.Status); } sw.WriteEnd("/>"); } } }
private static void CopyDir(DatDir datD, RvFile rvD, RvDat rvDat, HeaderFileType headerFileType, bool gameFile) { DatBase[] datB = datD.ToArray(); if (datB == null) { return; } foreach (DatBase b in datB) { switch (b) { case DatDir nDir: RvFile nd = new RvFile(ConvE(nDir.DatFileType)) { Name = nDir.Name + GetExt(nDir.DatFileType), Dat = rvDat, DatStatus = ConvE(nDir.DatStatus) }; if (nDir.DGame == null && !gameFile) { nd.Tree = new RvTreeRow(); } rvD.ChildAdd(nd); if (nDir.DGame != null) { DatGame dGame = nDir.DGame; RvGame cGame = new RvGame(); CheckAttribute(cGame, dGame.Description, RvGame.GameData.Description); CheckAttribute(cGame, dGame.RomOf, RvGame.GameData.RomOf); CheckAttribute(cGame, dGame.IsBios, RvGame.GameData.IsBios); CheckAttribute(cGame, dGame.SourceFile, RvGame.GameData.Sourcefile); CheckAttribute(cGame, dGame.CloneOf, RvGame.GameData.CloneOf); CheckAttribute(cGame, dGame.SampleOf, RvGame.GameData.SampleOf); CheckAttribute(cGame, dGame.Board, RvGame.GameData.Board); CheckAttribute(cGame, dGame.Year, RvGame.GameData.Year); CheckAttribute(cGame, dGame.Manufacturer, RvGame.GameData.Manufacturer); if (nDir.DGame.IsEmuArc) { cGame.AddData(RvGame.GameData.EmuArc, "yes"); CheckAttribute(cGame, dGame.TitleId, RvGame.GameData.TitleId); CheckAttribute(cGame, dGame.Publisher, RvGame.GameData.Publisher); CheckAttribute(cGame, dGame.Developer, RvGame.GameData.Developer); CheckAttribute(cGame, dGame.Genre, RvGame.GameData.Genre); CheckAttribute(cGame, dGame.SubGenre, RvGame.GameData.SubGenre); CheckAttribute(cGame, dGame.Ratings, RvGame.GameData.Ratings); CheckAttribute(cGame, dGame.Score, RvGame.GameData.Score); CheckAttribute(cGame, dGame.Players, RvGame.GameData.Players); CheckAttribute(cGame, dGame.Enabled, RvGame.GameData.Enabled); CheckAttribute(cGame, dGame.CRC, RvGame.GameData.CRC); CheckAttribute(cGame, dGame.RelatedTo, RvGame.GameData.RelatedTo); CheckAttribute(cGame, dGame.Source, RvGame.GameData.Source); } nd.Game = cGame; } CopyDir(nDir, nd, rvDat, headerFileType, gameFile || nDir.DGame != null); break; case DatFile nFile: RvFile nf = new RvFile(ConvE(nFile.DatFileType)) { Name = nFile.Name, Size = nFile.Size, CRC = nFile.CRC, SHA1 = nFile.SHA1, MD5 = nFile.MD5, Merge = nFile.Merge, Status = nFile.Status, Dat = rvDat, DatStatus = ConvE(nFile.DatStatus), HeaderFileType = headerFileType }; #if dt DateTime dt; if (!string.IsNullOrEmpty(nFile.DateModified) && DateTime.TryParseExact(nFile.DateModified, "yyyy/MM/dd HH:mm:ss", enUS, DateTimeStyles.None, out dt)) { nf.DatModTimeStamp = dt.Ticks; } #endif if (nFile.isDisk) { nf.HeaderFileType = HeaderFileType.CHD; } if (nf.HeaderFileType != HeaderFileType.Nothing) { nf.FileStatusSet(FileStatus.HeaderFileTypeFromDAT); } if (nf.Size != null) { nf.FileStatusSet(FileStatus.SizeFromDAT); } if (nf.CRC != null) { nf.FileStatusSet(FileStatus.CRCFromDAT); } if (nf.SHA1 != null) { nf.FileStatusSet(FileStatus.SHA1FromDAT); } if (nf.MD5 != null) { nf.FileStatusSet(FileStatus.MD5FromDAT); } rvD.ChildAdd(nf); break; } } }
private static bool LoadDisks(DatFileLoader dfl, DatDir parentDir, ReportError errorReport) { if (dfl.Next.ToLower() != "[disks]") { errorReport?.Invoke(dfl.Filename, "Looking for [DISKS] but found " + dfl.Next + " , " + dfl.LineNumber); return(false); } while (!dfl.EndOfStream()) { string line = dfl.Gn(); if (line.Substring(0, 1) == "[") { return(true); } string[] parts = line.Split('¬'); // 1 parent name = clone of // 2 parent description = description (from parent) // 3 game name = name (game) // 4 game description = description // 5 rom name = name (rom) // 6 rom crc = crc // 7 rom size = size // 8 romof name = romof // 9 merge name = merge string ParentName = parts[1]; string ParentDescription = parts[2]; string GameName = parts[3]; string GameDescription = parts[4]; string romName = parts[5]; string romCRC = parts[6]; string romSize = parts[7]; string romOf = parts[8]; string merge = parts[9]; int index; DatDir dDir; DatDir searchDir = new DatDir(DatFileType.Dir) { Name = GameName }; if (parentDir.ChildNameSearch(searchDir, out index) != 0) { dDir = new DatDir(DatFileType.UnSet) { Name = GameName, DGame = new DatGame() }; DatGame dGame = dDir.DGame; dGame.Description = GameDescription; if (ParentName != GameName) { dGame.CloneOf = ParentName; } parentDir.ChildAdd(dDir); } else { dDir = (DatDir)parentDir.Child(index); // need to check everything matches } DatFile dRom = new DatFile(DatFileType.UnSet) { isDisk = true, Name = VarFix.CleanCHD(romName), SHA1 = VarFix.CleanMD5SHA1(romCRC, 40), Merge = merge }; // dRom.Size = VarFix.ULong(romSize); // check romof=ParentName dDir.ChildAdd(dRom); } return(true); }
private static void CopyDir(DatDir datD, HeaderFileType headerFileType, RvDat retDat = null, RvGame retGame = null) { DatBase[] datB = datD.ToArray(); if (datB == null) { return; } foreach (DatBase b in datB) { switch (b) { case DatDir nDir: if (nDir.DGame == null) { break; } DatGame dGame = nDir.DGame; RvGame cGame = new RvGame(); cGame.Name = b.Name; cGame.Description = dGame.Description; cGame.Manufacturer = dGame.Manufacturer; cGame.CloneOf = dGame.CloneOf; cGame.RomOf = dGame.RomOf; cGame.SampleOf = dGame.SampleOf; cGame.SourceFile = dGame.SourceFile; cGame.IsBios = dGame.IsBios; cGame.Board = dGame.Board; cGame.Year = dGame.Year; if (dGame.IsEmuArc) { cGame.IsTrurip = true; cGame.Publisher = dGame.Publisher; cGame.Developer = dGame.Developer; //cGame.Edition //cGame.Version //cGame.Type //cGame.Media //cGame.Language cGame.Players = dGame.Players; cGame.Ratings = dGame.Ratings; cGame.Genre = dGame.Genre; //cGame.Peripheral //cGame.BarCode //cGame.MediaCatalogNumber } retDat?.AddGame(cGame); CopyDir(nDir, headerFileType, null, cGame); break; case DatFile nFile: if (nFile.isDisk) { break; } RvRom nf = new RvRom() { Name = nFile.Name, Size = nFile.Size, CRC = nFile.CRC, SHA1 = nFile.SHA1, MD5 = nFile.MD5, Merge = nFile.Merge, Status = nFile.Status, AltType = headerFileType }; retGame?.AddRom(nf); break; } } }
private static void writeBase(DatStreamWriter sw, DatDir baseDirIn) { DatBase[] dirChildren = baseDirIn.ToArray(); if (dirChildren == null) { return; } foreach (DatBase baseObj in dirChildren) { if (baseObj is DatDir baseDir) { if (baseDir.DGame != null) { DatGame g = baseDir.DGame; sw.Write(@"<machine"); sw.WriteItem("name", baseDir.Name); if (!g.IsEmuArc) { sw.WriteItem("cloneof", g.CloneOf); sw.WriteItem("romof", g.RomOf); } if (!string.IsNullOrWhiteSpace(g.IsBios) && g.IsBios != "no") { sw.WriteItem("isbios", g.IsBios); } if (!string.IsNullOrWhiteSpace(g.IsDevice) && g.IsDevice != "no") { sw.WriteItem("isdevice", g.IsDevice); } if (!string.IsNullOrWhiteSpace(g.Runnable) && g.Runnable != "yes") { sw.WriteItem("runnable", g.Runnable); } sw.WriteEnd(@">", 1); sw.WriteNode("description", g.Description); sw.WriteNode("year", g.Year); sw.WriteNode("manufacturer", g.Manufacturer); writeBase(sw, baseDir); if (g.device_ref != null) { foreach (string d in g.device_ref) { sw.WriteLine($@"<device_ref name=""{d}""/>"); } } sw.WriteLine(@"</machine>", -1); } else { sw.WriteLine(@"<dir name=""" + Etxt(baseDir.Name) + @""">", 1); writeBase(sw, baseDir); sw.WriteLine(@"</dir>", -1); } continue; } if (baseObj is DatFile baseRom) { if (baseRom.isDisk) { sw.Write(@"<disk"); } else { sw.Write(@"<rom"); } sw.WriteItem("name", baseRom.Name); sw.WriteItem("merge", baseRom.Merge); sw.WriteItem("size", baseRom.Size); sw.WriteItem("crc", baseRom.CRC); sw.WriteItem("sha1", baseRom.SHA1); sw.WriteItem("md5", baseRom.MD5); if (baseRom.DateModified != "1996/12/24 23:32:00") { sw.WriteItem("date", baseRom.DateModified); } if (baseRom.Status != null && baseRom.Status.ToLower() != "good") { sw.WriteItem("status", baseRom.Status); } sw.WriteEnd("/>"); } } }