private static void MakeFixFilesRecurse(RvBase b, bool selected) { if (selected) { if (b.Dat != null) { RvDir tDir = b as RvDir; if (tDir != null && tDir.Game != null && tDir.DirStatus.HasMissing()) { if (_tDat != b.Dat) { if (_tDat != null) { _ts.WriteLine("</datafile>"); _ts.WriteLine(); } if (_ts != null) { _ts.Close(); } _tDat = b.Dat; int test = 0; string datFilename = Path.Combine(_outdir, "fixDat_" + Path.GetFileNameWithoutExtension(_tDat.GetData(RvDat.DatData.DatFullName)) + ".dat"); while (File.Exists(datFilename)) { test++; datFilename = Path.Combine(_outdir, "fixDat_" + Path.GetFileNameWithoutExtension(_tDat.GetData(RvDat.DatData.DatFullName)) + "(" + test + ").dat"); } _ts = new StreamWriter(datFilename); _ts.WriteLine("<?xml version=\"1.0\"?>"); _ts.WriteLine( "<!DOCTYPE datafile PUBLIC \"-//Logiqx//DTD ROM Management Datafile//EN\" \"http://www.logiqx.com/Dats/datafile.dtd\">"); _ts.WriteLine(""); _ts.WriteLine("<datafile>"); _ts.WriteLine("\t<header>"); _ts.WriteLine("\t\t<name>fix_" + Etxt(_tDat.GetData(RvDat.DatData.DatName)) + "</name>"); if (_tDat.GetData(RvDat.DatData.SuperDat) == "superdat") { _ts.WriteLine("\t\t<type>SuperDAT</type>"); } _ts.WriteLine("\t\t<description>fix_" + Etxt(_tDat.GetData(RvDat.DatData.Description)) + "</description>"); _ts.WriteLine("\t\t<category>FIXDATFILE</category>"); _ts.WriteLine("\t\t<version>" + DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss") + "</version>"); _ts.WriteLine("\t\t<date>" + DateTime.Now.ToString("MM/dd/yyyy") + "</date>"); _ts.WriteLine("\t\t<author>RomVault</author>"); _ts.WriteLine("\t</header>"); } _ts.WriteLine("\t<game name=\"" + Etxt(tDir.SuperDatFileName()) + "\">"); if (!string.IsNullOrEmpty(tDir.Game.GetData(RvGame.GameData.Description))) { _ts.WriteLine("\t\t<description>" + Etxt(tDir.Game.GetData(RvGame.GameData.Description)) + "</description>"); } } RvFile tRom = b as RvFile; if (tRom != null) { if (tRom.DatStatus == DatStatus.InDatCollect && tRom.GotStatus != GotStatus.Got) { string strRom; if (tRom.FileStatusIs(FileStatus.SHA1CHDFromDAT | FileStatus.MD5CHDFromDAT)) { strRom = "\t\t<disk name=\"" + Etxt(tRom.Name) + "\""; } else { strRom = "\t\t<rom name=\"" + Etxt(tRom.Name) + "\""; } if (tRom.FileStatusIs(FileStatus.SizeFromDAT) && tRom.Size != null) { strRom += " size=\"" + tRom.Size + "\""; } string strCRC = ArrByte.ToString(tRom.CRC); if (tRom.FileStatusIs(FileStatus.CRCFromDAT) && !string.IsNullOrEmpty(strCRC)) { strRom += " crc=\"" + strCRC + "\""; } string strSHA1 = ArrByte.ToString(tRom.SHA1); if (tRom.FileStatusIs(FileStatus.SHA1FromDAT) && !string.IsNullOrEmpty(strSHA1)) { strRom += " sha1=\"" + strSHA1 + "\""; } string strMD5 = ArrByte.ToString(tRom.MD5); if (tRom.FileStatusIs(FileStatus.MD5FromDAT) && !string.IsNullOrEmpty(strMD5)) { strRom += " md5=\"" + strMD5 + "\""; } string strSHA1CHD = ArrByte.ToString(tRom.SHA1CHD); if (tRom.FileStatusIs(FileStatus.SHA1CHDFromDAT) && !string.IsNullOrEmpty(strSHA1CHD)) { strRom += " sha1=\"" + strSHA1CHD + "\""; } string strMD5CHD = ArrByte.ToString(tRom.MD5CHD); if (tRom.FileStatusIs(FileStatus.MD5CHDFromDAT) && !string.IsNullOrEmpty(strMD5CHD)) { strRom += " md5=\"" + strMD5CHD + "\""; } strRom += "/>"; _ts.WriteLine(strRom); } } } } RvDir d = b as RvDir; if (d != null) { for (int i = 0; i < d.ChildCount; i++) { bool nextSelected = selected; if (d.Tree != null) { nextSelected = d.Tree.Checked == RvTreeRow.TreeSelect.Selected; } MakeFixFilesRecurse(d.Child(i), nextSelected); } } if (selected) { if (b.Dat != null) { RvDir tDir = b as RvDir; if (tDir != null && tDir.Game != null && tDir.DirStatus.HasMissing()) { _ts.WriteLine("\t</game>"); } } } }