private static void FindParentSet(RvDir searchGame, RvDir parentDir, ref List <RvDir> lstParentGames) { if (searchGame.Game == null) { return; } string parentName = searchGame.Game.GetData(RvGame.GameData.RomOf); if (String.IsNullOrEmpty(parentName) || parentName == searchGame.Name) { parentName = searchGame.Game.GetData(RvGame.GameData.CloneOf); } if (String.IsNullOrEmpty(parentName) || parentName == searchGame.Name) { return; } int intIndex; int intResult = parentDir.ChildNameSearch(new RvDir(searchGame.FileType) { Name = parentName }, out intIndex); if (intResult == 0) { RvDir parentGame = (RvDir)parentDir.Child(intIndex); lstParentGames.Add(parentGame); FindParentSet(parentGame, parentDir, ref lstParentGames); } }
private static bool LoadGameFromDat(ref RvDir tDat, FileType thisFileType) { if (DatFileLoader.Next != "(") { DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadGameFromDat_not_found_after_game, DatFileLoader.Filename); return(false); } DatFileLoader.Gn(); string snext = DatFileLoader.Next.ToLower(); if (snext != "name") { DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadGameFromDat_Name_not_found_as_first_object_in, DatFileLoader.Filename); return(false); } RvDir parent = tDat; string fullname = VarFix.CleanFullFileName(DatFileLoader.GnRest()); if (_cleanFileNames) { fullname = fullname.Replace("/", "-"); } while (fullname.Contains("/")) { int firstSlash = fullname.IndexOf("/", StringComparison.Ordinal); string dir = fullname.Substring(0, firstSlash); fullname = fullname.Substring(firstSlash + 1); int index; if (parent.ChildNameSearch(new RvDir(FileType.Dir) { Name = dir }, out index) == 0) { parent = (RvDir)parent.Child(index); } else { RvDir tpDir = new RvDir(FileType.Dir) { Name = dir, DatStatus = DatStatus.InDatCollect, Dat = tDat.Dat, Tree = new RvTreeRow() }; parent.ChildAdd(tpDir, index); parent = tpDir; } } if (fullname.Length > 4 && fullname.ToLower().Substring(fullname.Length - 4, 4) == ".zip") { fullname = fullname.Substring(0, fullname.Length - 4); } RvDir tDir = new RvDir(thisFileType == FileType.File ? FileType.Dir : FileType.Zip) { Name = fullname }; DatFileLoader.Gn(); tDir.Game = new RvGame(); tDir.DatStatus = DatStatus.InDatCollect; tDir.Dat = tDat.Dat; int index1; string testName = tDir.Name; int nameCount = 0; while (parent.ChildNameSearch(tDir, out index1) == 0) { tDir.Name = testName + "_" + nameCount; nameCount++; } parent.ChildAdd(tDir, index1); while (DatFileLoader.Next != ")") { switch (DatFileLoader.Next.ToLower()) { case "file": DatFileLoader.Gn(); if (!LoadRomFromDat(ref tDir, thisFileType)) { return(false); } DatFileLoader.Gn(); break; default: DatUpdate.SendAndShowDat(Resources.DatCmpReader_ReadDat_Error_keyword + DatFileLoader.Next + Resources.DatCmpReader_LoadGameFromDat_not_known_in_game, DatFileLoader.Filename); DatFileLoader.Gn(); break; } } return(true); }
private static void LoadGameFromDat(ref RvDir tDat, XmlNode gameNode, FileType thisFileType) { if (gameNode.Attributes == null) { return; } RvDir parent = tDat; RvDir tDir = new RvDir(DBTypeGet.DirFromFile(thisFileType)) { Name = VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("name")), Game = new RvGame(), Dat = tDat.Dat, DatStatus = DatStatus.InDatCollect }; tDir.Game.AddData(RvGame.GameData.Description, VarFix.String(gameNode.SelectSingleNode("description"))); tDir.Game.AddData(RvGame.GameData.RomOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof"))); tDir.Game.AddData(RvGame.GameData.CloneOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof"))); tDir.Game.AddData(RvGame.GameData.Year, VarFix.CleanFileName(gameNode.SelectSingleNode("year"))); tDir.Game.AddData(RvGame.GameData.Manufacturer, VarFix.CleanFileName(gameNode.SelectSingleNode("publisher"))); RvDir tDirCHD = new RvDir(FileType.Dir) { Name = VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("name")), Game = new RvGame(), Dat = tDat.Dat, DatStatus = DatStatus.InDatCollect }; tDirCHD.Game.AddData(RvGame.GameData.Description, VarFix.String(gameNode.SelectSingleNode("description"))); tDirCHD.Game.AddData(RvGame.GameData.RomOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof"))); tDirCHD.Game.AddData(RvGame.GameData.CloneOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof"))); tDirCHD.Game.AddData(RvGame.GameData.Year, VarFix.CleanFileName(gameNode.SelectSingleNode("year"))); tDirCHD.Game.AddData(RvGame.GameData.Manufacturer, VarFix.CleanFileName(gameNode.SelectSingleNode("publisher"))); int index1; string testName = tDir.Name; int nameCount = 0; while (parent.ChildNameSearch(tDir, out index1) == 0) { tDir.Name = testName + "_" + nameCount; nameCount++; } tDirCHD.Name = tDir.Name; 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) { for (int iD = 0; iD < dataAreaNodeList.Count; iD++) { XmlNodeList romNodeList = dataAreaNodeList[iD].SelectNodes("rom"); if (romNodeList != null) { for (int iR = 0; iR < romNodeList.Count; iR++) { LoadRomFromDat(ref tDir, romNodeList[iR], thisFileType); } } } } } 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(ref tDirCHD, romNodeList[iR]); } } } } } if (tDir.ChildCount > 0) { parent.ChildAdd(tDir, index1); } if (tDirCHD.ChildCount > 0) { parent.ChildAdd(tDirCHD, index1); } }
private static bool LoadGameFromDat(ref RvDir tDat, bool bolresource, FileType thisFileType) { if (DatFileLoader.Next != "(") { DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadGameFromDat_not_found_after_game, DatFileLoader.Filename); return(false); } DatFileLoader.Gn(); string snext = DatFileLoader.Next.ToLower(); string pathextra = ""; if (snext == "rebuildto") { pathextra = VarFix.CleanFullFileName(DatFileLoader.Gn()); DatFileLoader.Gn(); snext = DatFileLoader.Next.ToLower(); } if (snext != "name") { DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadGameFromDat_Name_not_found_as_first_object_in, DatFileLoader.Filename); return(false); } RvDir parent = tDat; string fullname = VarFix.CleanFullFileName(DatFileLoader.GnRest()); if (_cleanFileNames) { fullname = fullname.Replace("/", "-"); } if (!string.IsNullOrEmpty(pathextra)) { fullname = pathextra + "/" + fullname; } while (fullname.Contains("/")) { int firstSlash = fullname.IndexOf("/", StringComparison.Ordinal); string dir = fullname.Substring(0, firstSlash); fullname = fullname.Substring(firstSlash + 1); if (parent.ChildNameSearch(new RvDir(FileType.Dir) { Name = dir }, out int index) == 0) { parent = (RvDir)parent.Child(index); } else { RvDir tpDir = new RvDir(FileType.Dir) { Name = dir, DatStatus = DatStatus.InDatCollect, Dat = tDat.Dat, Tree = new RvTreeRow() }; parent.ChildAdd(tpDir, index); parent = tpDir; } } RvDir tDir = new RvDir(thisFileType == FileType.File ? FileType.Dir : FileType.Zip) { Name = fullname, DatStatus = DatStatus.InDatCollect, Dat = tDat.Dat }; string testName = tDir.Name; int nameCount = 0; int index1; while (parent.ChildNameSearch(tDir, out index1) == 0) { tDir.Name = testName + "_" + nameCount; nameCount++; } DatFileLoader.Gn(); tDir.Game = new RvGame(); tDir.Game.AddData(RvGame.GameData.IsBios, bolresource ? "Yes" : "No"); RvDir tDirCHD = new RvDir(FileType.Dir) { Name = tDir.Name, DatStatus = tDir.DatStatus, Dat = tDir.Dat, Game = tDir.Game }; while (DatFileLoader.Next != ")") { switch (DatFileLoader.Next.ToLower()) { case "romof": tDir.Game.AddData(RvGame.GameData.RomOf, VarFix.CleanFileName(DatFileLoader.GnRest())); DatFileLoader.Gn(); break; case "description": tDir.Game.AddData(RvGame.GameData.Description, DatFileLoader.GnRest()); DatFileLoader.Gn(); break; case "sourcefile": tDir.Game.AddData(RvGame.GameData.Sourcefile, DatFileLoader.GnRest()); DatFileLoader.Gn(); break; case "cloneof": tDir.Game.AddData(RvGame.GameData.CloneOf, DatFileLoader.GnRest()); DatFileLoader.Gn(); break; case "sampleof": tDir.Game.AddData(RvGame.GameData.SampleOf, DatFileLoader.GnRest()); DatFileLoader.Gn(); break; case "board": tDir.Game.AddData(RvGame.GameData.Board, DatFileLoader.GnRest()); DatFileLoader.Gn(); break; case "year": tDir.Game.AddData(RvGame.GameData.Year, DatFileLoader.GnRest()); DatFileLoader.Gn(); break; case "manufacturer": tDir.Game.AddData(RvGame.GameData.Manufacturer, DatFileLoader.GnRest()); DatFileLoader.Gn(); break; case "serial": DatFileLoader.GnRest(); DatFileLoader.Gn(); break; case "rebuildto": DatFileLoader.GnRest(); DatFileLoader.Gn(); break; case "sample": DatFileLoader.GnRest(); DatFileLoader.Gn(); break; case "biosset": DatFileLoader.GnRest(); DatFileLoader.Gn(); break; case "chip": DatFileLoader.GnRest(); DatFileLoader.Gn(); break; case "video": DatFileLoader.GnRest(); DatFileLoader.Gn(); break; case "sound": DatFileLoader.GnRest(); DatFileLoader.Gn(); break; case "input": DatFileLoader.GnRest(); DatFileLoader.Gn(); break; case "dipswitch": DatFileLoader.GnRest(); DatFileLoader.Gn(); break; case "driver": DatFileLoader.GnRest(); DatFileLoader.Gn(); break; case "rom": DatFileLoader.Gn(); if (!LoadRomFromDat(ref tDir, thisFileType)) { return(false); } DatFileLoader.Gn(); break; case "disk": DatFileLoader.Gn(); if (!LoadDiskFromDat(ref tDirCHD)) { return(false); } DatFileLoader.Gn(); break; case "archive": DatFileLoader.Gn(); if (!LoadArchiveFromDat()) { return(false); } DatFileLoader.Gn(); break; default: DatUpdate.SendAndShowDat(Resources.DatCmpReader_ReadDat_Error_keyword + DatFileLoader.Next + Resources.DatCmpReader_LoadGameFromDat_not_known_in_game, DatFileLoader.Filename); DatFileLoader.Gn(); break; } } if (tDir.ChildCount > 0) { parent.ChildAdd(tDir, index1); } if (tDirCHD.ChildCount > 0) { parent.ChildAdd(tDirCHD); } return(true); }
private static bool LoadDirFromDat(ref RvDir tDat, ref FileType thisFileType) { if (DatFileLoader.Next != "(") { DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadGameFromDat_not_found_after_game, DatFileLoader.Filename); return(false); } DatFileLoader.Gn(); if (DatFileLoader.Next.ToLower() != "name") { DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadGameFromDat_Name_not_found_as_first_object_in, DatFileLoader.Filename); return(false); } RvDir parent = tDat; string fullname = VarFix.CleanFullFileName(DatFileLoader.GnRest()); while (fullname.Contains("/")) { int firstSlash = fullname.IndexOf("/", StringComparison.Ordinal); string dir = fullname.Substring(0, firstSlash); dir = VarFix.CleanFileName(dir); fullname = fullname.Substring(firstSlash + 1); if (parent.ChildNameSearch(new RvDir(FileType.Dir) { Name = dir }, out int index) == 0) { parent = (RvDir)parent.Child(index); } else { RvDir tpDir = new RvDir(FileType.Dir) { Name = dir, DatStatus = DatStatus.InDatCollect, Dat = tDat.Dat, Tree = new RvTreeRow() }; parent.ChildAdd(tpDir, index); parent = tpDir; } } RvDir tDir = new RvDir(FileType.Dir) { Name = fullname }; DatFileLoader.Gn(); tDir.DatStatus = DatStatus.InDatCollect; tDir.Dat = tDat.Dat; if (parent.ChildNameSearch(tDir, out int index1) == 0) { tDir = (RvDir)parent.Child(index1); } else { parent.ChildAdd(tDir, index1); } while (DatFileLoader.Next != ")") { switch (DatFileLoader.Next.ToLower()) { case "dir": DatFileLoader.Gn(); if (!LoadDirFromDat(ref tDir, ref thisFileType)) { return(false); } DatFileLoader.Gn(); break; case "game": DatFileLoader.Gn(); if (!LoadGameFromDat(ref tDir, false, thisFileType)) { return(false); } DatFileLoader.Gn(); break; case "resource": DatFileLoader.Gn(); if (!LoadGameFromDat(ref tDir, true, thisFileType)) { return(false); } DatFileLoader.Gn(); break; default: DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadDirFromDat_Error_Keyword + DatFileLoader.Next + Resources.DatCmpReader_LoadDirFromDat_not_know_in_dir, DatFileLoader.Filename); DatFileLoader.Gn(); break; } } return(true); }
private static void LoadGameFromDat(ref RvDir tDat, XmlNode gameNode, FileType thisFileType) { if (gameNode.Attributes == null) { return; } RvDir parent = tDat; RvDir tDir; int index1 = 0; string fullname = VarFix.CleanFullFileName(gameNode.Attributes.GetNamedItem("name")); if (_cleanFileNames) { fullname = fullname.Replace("/", "-"); } else { while (fullname.Contains("/")) { int firstSlash = fullname.IndexOf("/", StringComparison.Ordinal); string dir = fullname.Substring(0, firstSlash); dir = VarFix.CleanFileName(dir); fullname = fullname.Substring(firstSlash + 1); int index; if (parent.ChildNameSearch(new RvDir(FileType.Dir) { Name = dir }, out index) == 0) { parent = (RvDir)parent.Child(index); } else { RvDir tpDir = new RvDir(FileType.Dir) { Name = dir, DatStatus = DatStatus.InDatCollect, Dat = tDat.Dat, Tree = new RvTreeRow() }; parent.ChildAdd(tpDir, index); parent = tpDir; } } } tDir = new RvDir(DBTypeGet.DirFromFile(thisFileType)) { Name = fullname, DatStatus = DatStatus.InDatCollect, Dat = tDat.Dat }; string testName = tDir.Name; int nameCount = 0; while (parent.ChildNameSearch(tDir, out index1) == 0) { tDir.Name = testName + "_" + nameCount; nameCount++; } tDir.Game = new RvGame(); tDir.Game.AddData(RvGame.GameData.RomOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("romof"))); tDir.Game.AddData(RvGame.GameData.Description, VarFix.String(gameNode.SelectSingleNode("description"))); tDir.Game.AddData(RvGame.GameData.Sourcefile, VarFix.String(gameNode.Attributes.GetNamedItem("sourcefile"))); tDir.Game.AddData(RvGame.GameData.IsBios, VarFix.String(gameNode.Attributes.GetNamedItem("isbios"))); tDir.Game.AddData(RvGame.GameData.CloneOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof"))); tDir.Game.AddData(RvGame.GameData.SampleOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("sampleof"))); tDir.Game.AddData(RvGame.GameData.Board, VarFix.String(gameNode.Attributes.GetNamedItem("board"))); tDir.Game.AddData(RvGame.GameData.Year, VarFix.String(gameNode.SelectSingleNode("year"))); tDir.Game.AddData(RvGame.GameData.Manufacturer, VarFix.String(gameNode.SelectSingleNode("manufacturer"))); XmlNode trurip = gameNode.SelectSingleNode("trurip"); if (trurip != null) { tDir.Game.AddData(RvGame.GameData.Trurip, "yes"); tDir.Game.AddData(RvGame.GameData.Year, VarFix.String(trurip.SelectSingleNode("year"))); tDir.Game.AddData(RvGame.GameData.Publisher, VarFix.String(trurip.SelectSingleNode("publisher"))); tDir.Game.AddData(RvGame.GameData.Developer, VarFix.String(trurip.SelectSingleNode("developer"))); tDir.Game.AddData(RvGame.GameData.Edition, VarFix.String(trurip.SelectSingleNode("edition"))); tDir.Game.AddData(RvGame.GameData.Version, VarFix.String(trurip.SelectSingleNode("version"))); tDir.Game.AddData(RvGame.GameData.Type, VarFix.String(trurip.SelectSingleNode("type"))); tDir.Game.AddData(RvGame.GameData.Media, VarFix.String(trurip.SelectSingleNode("media"))); tDir.Game.AddData(RvGame.GameData.Language, VarFix.String(trurip.SelectSingleNode("language"))); tDir.Game.AddData(RvGame.GameData.Players, VarFix.String(trurip.SelectSingleNode("players"))); tDir.Game.AddData(RvGame.GameData.Ratings, VarFix.String(trurip.SelectSingleNode("ratings"))); tDir.Game.AddData(RvGame.GameData.Peripheral, VarFix.String(trurip.SelectSingleNode("peripheral"))); tDir.Game.AddData(RvGame.GameData.Genre, VarFix.String(trurip.SelectSingleNode("genre"))); tDir.Game.AddData(RvGame.GameData.MediaCatalogNumber, VarFix.String(trurip.SelectSingleNode("mediacatalognumber"))); tDir.Game.AddData(RvGame.GameData.BarCode, VarFix.String(trurip.SelectSingleNode("barcode"))); } RvDir tDirCHD = new RvDir(FileType.Dir) { Name = tDir.Name, DatStatus = tDir.DatStatus, Dat = tDir.Dat, Game = tDir.Game }; XmlNodeList romNodeList = gameNode.SelectNodes("rom"); if (romNodeList != null) { for (int i = 0; i < romNodeList.Count; i++) { LoadRomFromDat(ref tDir, romNodeList[i], thisFileType); } } XmlNodeList diskNodeList = gameNode.SelectNodes("disk"); if (diskNodeList != null) { for (int i = 0; i < diskNodeList.Count; i++) { LoadDiskFromDat(ref tDirCHD, diskNodeList[i]); } } if (tDir.ChildCount > 0) { parent.ChildAdd(tDir, index1); } if (tDirCHD.ChildCount > 0) { parent.ChildAdd(tDirCHD); } }
private static void LoadDirFromDat(ref RvDir tDat, XmlNode dirNode, FileType thisFileType) { if (dirNode.Attributes == null) { return; } RvDir parent = tDat; string fullname = VarFix.CleanFullFileName(dirNode.Attributes.GetNamedItem("name")); while (fullname.Contains("/")) { int firstSlash = fullname.IndexOf("/", StringComparison.Ordinal); string dir = fullname.Substring(0, firstSlash); dir = VarFix.CleanFileName(dir); fullname = fullname.Substring(firstSlash + 1); int index; if (parent.ChildNameSearch(new RvDir(FileType.Dir) { Name = dir }, out index) == 0) { parent = (RvDir)parent.Child(index); } else { RvDir tpDir = new RvDir(FileType.Dir) { Name = dir, DatStatus = DatStatus.InDatCollect, Dat = tDat.Dat, Tree = new RvTreeRow() }; parent.ChildAdd(tpDir, index); parent = tpDir; } } RvDir tDir = new RvDir(FileType.Dir) { Name = fullname, DatStatus = DatStatus.InDatCollect, Dat = tDat.Dat, Tree = new RvTreeRow() }; int index1; if (parent.ChildNameSearch(tDir, out index1) == 0) { tDir = (RvDir)parent.Child(index1); } else { tDat.ChildAdd(tDir, index1); } XmlNodeList dirNodeList = dirNode.SelectNodes("dir"); if (dirNodeList != null) { for (int i = 0; i < dirNodeList.Count; i++) { LoadDirFromDat(ref tDir, dirNodeList[i], thisFileType); } } XmlNodeList gameNodeList = dirNode.SelectNodes("game"); if (gameNodeList != null) { for (int i = 0; i < gameNodeList.Count; i++) { LoadGameFromDat(ref tDir, gameNodeList[i], thisFileType); } } }
private static void DatSetCreateSubDirs(RvDir tDat) { for (int g = 0; g < tDat.ChildCount; g++) { if (tDat.Child(g).FileType == FileType.Zip) { continue; } RvDir datGame = (RvDir)tDat.Child(g); // first do a quick check to see if anything needs done. bool fixNeeded = false; for (int r = 0; r < datGame.ChildCount; r++) { fixNeeded = datGame.Child(r).Name.Contains("/"); if (fixNeeded) { break; } } // if nothing needs done skip to next game if (!fixNeeded) { continue; } RvDir fixedGame = new RvDir(FileType.Dir); while (datGame.ChildCount > 0) { RvBase nextChild = datGame.Child(0); datGame.ChildRemove(0); if (nextChild.GetType() == typeof(RvFile)) { RvFile tFile = (RvFile)nextChild; if (tFile.Name.Contains("/")) { RvDir tBase = fixedGame; Debug.WriteLine("tFile " + tFile.TreeFullName); while (tFile.Name.Contains("/")) { int dirIndex = tFile.Name.IndexOf("/", StringComparison.Ordinal); string dirName = tFile.Name.Substring(0, dirIndex); RvDir tDir = new RvDir(FileType.Dir) { Name = dirName, DatStatus = DatStatus.InDatCollect, Dat = datGame.Dat }; int index; if (tBase.ChildNameSearch(tDir, out index) != 0) { tBase.ChildAdd(tDir, index); } tBase = (RvDir)tBase.Child(index); tFile.Name = tFile.Name.Substring(tFile.Name.IndexOf("/", StringComparison.Ordinal) + 1); } tBase.ChildAdd(tFile); } else { fixedGame.ChildAdd(nextChild); } } else { fixedGame.ChildAdd(nextChild); } } for (int r = 0; r < fixedGame.ChildCount; r++) { datGame.ChildAdd(fixedGame.Child(r), r); } } }