private static void LoadDiskFromDat(ref RvDir tGame, XmlNode romNode) { if (romNode.Attributes == null) { return; } RvFile tRom = new RvFile(FileType.File) { Dat = tGame.Dat, Name = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("name")) + ".chd", SHA1CHD = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40), MD5CHD = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("md5"), 32), Merge = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("merge")), Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")) }; if (tRom.SHA1CHD != null) { tRom.FileStatusSet(FileStatus.SHA1CHDFromDAT); } if (tRom.MD5CHD != null) { tRom.FileStatusSet(FileStatus.MD5CHDFromDAT); } tGame.ChildAdd(tRom); }
public static List <RvRom> ReadRoms(uint gameId) { List <RvRom> roms = new List <RvRom>(); SqlRead.Parameters["GameId"].Value = gameId; using (SQLiteDataReader dr = SqlRead.ExecuteReader()) { while (dr.Read()) { RvRom row = new RvRom { RomId = Convert.ToUInt32(dr["RomId"]), GameId = gameId, Name = dr["name"].ToString(), Size = FixLong(dr["size"]), CRC = VarFix.CleanMD5SHA1(dr["CRC"].ToString(), 8), SHA1 = VarFix.CleanMD5SHA1(dr["SHA1"].ToString(), 40), MD5 = VarFix.CleanMD5SHA1(dr["MD5"].ToString(), 32), Merge = dr["merge"].ToString(), Status = dr["status"].ToString(), FileId = FixLong(dr["FileId"]), fileSize = FixLong(dr["fileSize"]), fileCompressedSize = FixLong(dr["fileCompressedSize"]), fileCRC = VarFix.CleanMD5SHA1(dr["fileCRC"].ToString(), 8), fileSHA1 = VarFix.CleanMD5SHA1(dr["fileSHA1"].ToString(), 40), fileMD5 = VarFix.CleanMD5SHA1(dr["fileMD5"].ToString(), 32) }; roms.Add(row); } dr.Close(); } return(roms); }
private void LoadRomFromDat(DatDir parentDir, XmlNode romNode) { if (romNode.Attributes == null) { return; } XmlNode name = romNode.Attributes.GetNamedItem("name"); string loadflag = VarFix.String(romNode.Attributes.GetNamedItem("loadflag")); if (name != null) { DatFile dRom = new DatFile(DatFileType.UnSet) { Name = VarFix.String(name), Size = VarFix.ULong(romNode.Attributes.GetNamedItem("size")), CRC = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("crc"), 8), SHA1 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40), Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")) }; _indexContinue = parentDir.ChildAdd(dRom); } else if (loadflag.ToLower() == "continue") { DatFile tRom = (DatFile)parentDir.Child(_indexContinue); tRom.Size += VarFix.ULong(romNode.Attributes.GetNamedItem("size")); } }
public static RvFile fromGZip(string filename, byte[] bytes, ulong compressedSize) { RvFile retFile = new RvFile(); retFile.CompressedSize = compressedSize; retFile.SHA1 = VarFix.CleanMD5SHA1(Path.GetFileNameWithoutExtension(filename), 40); retFile.MD5 = new byte[16]; Array.Copy(bytes, 0, retFile.MD5, 0, 16); retFile.CRC = new byte[4]; Array.Copy(bytes, 16, retFile.CRC, 0, 4); retFile.Size = BitConverter.ToUInt64(bytes, 20); if (bytes.Length == 28) { return(retFile); } retFile.AltType = (HeaderFileType)bytes[28]; retFile.AltMD5 = new byte[16]; Array.Copy(bytes, 29, retFile.AltMD5, 0, 16); retFile.AltSHA1 = new byte[20]; Array.Copy(bytes, 45, retFile.AltSHA1, 0, 20); retFile.AltCRC = new byte[4]; Array.Copy(bytes, 65, retFile.AltCRC, 0, 4); retFile.AltSize = BitConverter.ToUInt64(bytes, 69); return(retFile); }
private static void LoadRomFromDat(RvGame rvGame, XmlNode romNode) { if (romNode.Attributes == null) { return; } XmlNode name = romNode.Attributes.GetNamedItem("name"); string loadflag = VarFix.String(romNode.Attributes.GetNamedItem("loadflag")); if (name != null) { RvRom rvRom = new RvRom(); rvRom.Name = VarFix.CleanFullFileName(name); rvRom.Size = VarFix.ULong(romNode.Attributes.GetNamedItem("size")); rvRom.CRC = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("crc"), 8); rvRom.SHA1 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40); rvRom.Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")); _indexContinue = rvGame.AddRom(rvRom); } else if (loadflag.ToLower() == "continue") { RvRom tROM = rvGame.Roms[_indexContinue]; tROM.Size += VarFix.ULong(romNode.Attributes.GetNamedItem("size")); } else if (loadflag.ToLower() == "ignore") { RvRom tROM = rvGame.Roms[_indexContinue]; tROM.Size += VarFix.ULong(romNode.Attributes.GetNamedItem("size")); } }
private static bool LoadRomFromDat(RvGame rvGame) { if (DatFileLoader.Next != "(") { DatUpdate.SendAndShowDat("( not found after rom", DatFileLoader.Filename); return(false); } DatFileLoader.Gn(); if (DatFileLoader.Next.ToLower() != "name") { DatUpdate.SendAndShowDat("Name not found as first object in ( )", DatFileLoader.Filename); return(false); } RvRom rvRom = new RvRom(); rvRom.Name = VarFix.CleanFullFileName(DatFileLoader.Gn()); DatFileLoader.Gn(); while (DatFileLoader.Next != ")") { switch (DatFileLoader.Next.ToLower()) { case "size": rvRom.Size = VarFix.ULong(DatFileLoader.Gn()); DatFileLoader.Gn(); break; case "crc": rvRom.CRC = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 8); DatFileLoader.Gn(); break; case "sha1": rvRom.SHA1 = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 40); DatFileLoader.Gn(); break; case "md5": rvRom.MD5 = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 32); DatFileLoader.Gn(); break; case "merge": rvRom.Merge = VarFix.CleanFullFileName(DatFileLoader.Gn()); DatFileLoader.Gn(); break; case "flags": rvRom.Status = VarFix.ToLower(DatFileLoader.Gn()); DatFileLoader.Gn(); break; case "date": DatFileLoader.Gn(); DatFileLoader.Gn(); break; case "bios": DatFileLoader.Gn(); DatFileLoader.Gn(); break; case "region": DatFileLoader.Gn(); DatFileLoader.Gn(); break; case "offs": DatFileLoader.Gn(); DatFileLoader.Gn(); break; case "nodump": rvRom.Status = "nodump"; DatFileLoader.Gn(); break; default: DatUpdate.SendAndShowDat("Error: key word '" + DatFileLoader.Next + "' not known in rom", DatFileLoader.Filename); DatFileLoader.Gn(); break; } } rvGame.AddRom(rvRom); return(true); }
private static bool LoadDiskFromDat(ref RvDir tGame) { if (DatFileLoader.Next != "(") { DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadRomFromDat_not_found_after_rom, 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); } string filename = VarFix.CleanFullFileName(DatFileLoader.Gn()); RvFile tRom = new RvFile(FileType.File) { Name = filename }; DatFileLoader.Gn(); tRom.Dat = tGame.Dat; while (DatFileLoader.Next != ")") { switch (DatFileLoader.Next.ToLower()) { case "sha1": tRom.SHA1CHD = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 40); DatFileLoader.Gn(); break; case "md5": tRom.MD5CHD = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 32); DatFileLoader.Gn(); break; case "merge": tRom.Merge = VarFix.CleanFullFileName(DatFileLoader.Gn()); DatFileLoader.Gn(); break; case "flags": tRom.Status = VarFix.ToLower(DatFileLoader.Gn()); DatFileLoader.Gn(); break; case "nodump": tRom.Status = "nodump"; DatFileLoader.Gn(); break; default: DatUpdate.SendAndShowDat(Resources.DatCmpReader_ReadDat_Error_keyword + DatFileLoader.Next + Resources.DatCmpReader_LoadRomFromDat_not_known_in_rom, DatFileLoader.Filename); DatFileLoader.Gn(); break; } } if (tRom.SHA1CHD != null) { tRom.FileStatusSet(FileStatus.SHA1CHDFromDAT); } if (tRom.MD5CHD != null) { tRom.FileStatusSet(FileStatus.MD5CHDFromDAT); } tGame.ChildAdd(tRom); return(true); }
public static List <RvRom> ReadRoms(uint gameId) { if (_commandRvRomReader == null) { _commandRvRomReader = new SQLiteCommand( @"SELECT RomId,name, type, rom.size, rom.crc, rom.sha1, rom.md5, merge,status,putinzip, rom.FileId, files.size as fileSize, files.compressedsize as fileCompressedSize, files.crc as filecrc, files.sha1 as filesha1, files.md5 as filemd5 FROM rom LEFT OUTER JOIN files ON files.FileId=rom.FileId WHERE GameId=@GameId ORDER BY RomId", Program.db.Connection); _commandRvRomReader.Parameters.Add(new SQLiteParameter("GameId")); } List <RvRom> roms = new List <RvRom>(); _commandRvRomReader.Parameters["GameId"].Value = gameId; using (DbDataReader dr = _commandRvRomReader.ExecuteReader()) { while (dr.Read()) { RvRom row = new RvRom { RomId = Convert.ToUInt32(dr["RomId"]), GameId = gameId, Name = dr["name"].ToString(), AltType = VarFix.FixFileType(dr["type"]), Size = VarFix.FixLong(dr["size"]), CRC = VarFix.CleanMD5SHA1(dr["CRC"].ToString(), 8), SHA1 = VarFix.CleanMD5SHA1(dr["SHA1"].ToString(), 40), MD5 = VarFix.CleanMD5SHA1(dr["MD5"].ToString(), 32), Merge = dr["merge"].ToString(), Status = dr["status"].ToString(), PutInZip = (bool)dr["putinzip"], FileId = VarFix.FixLong(dr["FileId"]), FileSize = VarFix.FixLong(dr["fileSize"]), FileCompressedSize = VarFix.FixLong(dr["fileCompressedSize"]), FileCRC = VarFix.CleanMD5SHA1(dr["fileCRC"].ToString(), 8), FileSHA1 = VarFix.CleanMD5SHA1(dr["fileSHA1"].ToString(), 40), FileMD5 = VarFix.CleanMD5SHA1(dr["fileMD5"].ToString(), 32) }; roms.Add(row); } dr.Close(); } return(roms); }
private static void CopyZeroLengthFile(RvFile fileOut, ICompress zipFileOut, out byte[] bCRC, out byte[] bMD5, out byte[] bSHA1) { // Zero Length File (Directory in a Zip) if (fileOut.FileType == FileType.ZipFile || fileOut.FileType == FileType.SevenZipFile) { zipFileOut.ZipFileAddZeroLengthFile(); } bCRC = VarFix.CleanMD5SHA1("00000000", 8); bMD5 = VarFix.CleanMD5SHA1("d41d8cd98f00b204e9800998ecf8427e", 32); bSHA1 = VarFix.CleanMD5SHA1("da39a3ee5e6b4b0d3255bfef95601890afd80709", 40); }
private bool LoadFileFromDat(DatFileLoader dfl, DatDir parentDir) { if (dfl.Next != "(") { _errorReport?.Invoke(dfl.Filename, "( not found after file, on line " + dfl.LineNumber); return(false); } dfl.Gn(); if (dfl.Next.ToLower() != "name") { _errorReport?.Invoke(dfl.Filename, "Name not found as first object in ( ), on line " + dfl.LineNumber); return(false); } DatFile dRom = new DatFile(DatFileType.UnSet) { Name = dfl.GnNameToSize() }; dfl.Gn(); while (dfl.Next != ")") { switch (dfl.Next.ToLower()) { case "size": dRom.Size = VarFix.ULong(dfl.Gn()); dfl.Gn(); break; case "crc": dRom.CRC = VarFix.CleanMD5SHA1(dfl.Gn(), 8); dfl.Gn(); break; case "date": dRom.Date = dfl.Gn() + " " + dfl.Gn(); dfl.Gn(); break; default: _errorReport?.Invoke(dfl.Filename, "Error: key word '" + dfl.Next + "' not known in rom, on line " + dfl.LineNumber); dfl.Gn(); break; } } parentDir.ChildAdd(dRom); return(true); }
public static void extract(string dirName) { if (CommandFindRomsInGame == null) { CommandFindRomsInGame = new SQLiteCommand( @"SELECT ROM.RomId, ROM.name, ROM.size, ROM.crc, ROM.SHA1 FROM ROM WHERE ROM.FileId is null AND ROM.GameId=@GameId ORDER BY ROM.RomId", Program.db.Connection); } CommandFindRomsInGame.Parameters.Add(new SQLiteParameter("GameId")); Debug.WriteLine(dirName); SQLiteCommand getfiles = new SQLiteCommand(@"SELECT dat.datid,dir.FullName,GameId,game.Name FROM dir,dat,game where dat.dirid=dir.dirid and game.datid=dat.datid and dir.fullname like '" + dirName + @"%' and (select count(1) from ROM WHERE ROM.FileId is null AND ROM.GameId=Game.GameId)>0 order by dat.datid,GameId", Program.db.Connection); DbDataReader reader = getfiles.ExecuteReader(); int DatId = -1; while (reader.Read()) { int thisDatId = Convert.ToInt32(reader["datId"]); if (thisDatId == DatId) { string dirFullName = reader["FullName"].ToString(); Debug.WriteLine(dirFullName); DatId = thisDatId; } int GameId = Convert.ToInt32(reader["GameId"]); string GameName = reader["name"].ToString(); Debug.WriteLine("Game " + GameId + " Name: " + GameName); int romCount = 0; using (DbDataReader drRom = ZipSetGetRomsInGame(GameId)) { while (drRom.Read()) { int RomId = Convert.ToInt32(drRom["RomId"]); string RomName = drRom["name"].ToString(); ulong size = Convert.ToUInt64(drRom["size"]); byte[] CRC = VarFix.CleanMD5SHA1(drRom["crc"].ToString(), 8); byte[] sha1 = VarFix.CleanMD5SHA1(drRom["sha1"].ToString(), 32); Debug.WriteLine(" Rom " + RomId + " Name: " + RomName + " Size: " + size + " CRC: " + VarFix.ToString(CRC)); romCount += 1; } } } }
private static void LoadDiskFromDat(RvGame rvGame, XmlNode romNode) { if (romNode.Attributes == null) { return; } string Name = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("name")) + ".chd"; byte[] SHA1CHD = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40); byte[] MD5CHD = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("md5"), 32); string Merge = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("merge")); string Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")); }
private static bool LoadRomFromDat(ref RvDir tGame, FileType thisFileType) { if (DatFileLoader.Next != "(") { DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadRomFromDat_not_found_after_rom, DatFileLoader.Filename); return(false); } string line = DatFileLoader.GnRest(); string linelc = line.ToLower(); int posName = linelc.IndexOf("name ", StringComparison.Ordinal); int posSize = linelc.IndexOf(" size ", posName + 5, StringComparison.Ordinal); int posDate = linelc.IndexOf(" date ", posSize + 6, StringComparison.Ordinal); int posCrc = linelc.IndexOf(" crc ", posDate + 6, StringComparison.Ordinal); int posEnd = linelc.IndexOf(" )", posCrc + 5, StringComparison.Ordinal); if (posName < 0 || posSize < 0 || posDate < 0 || posCrc < 0 || posEnd < 0) { DatFileLoader.Gn(); return(false); } string name = line.Substring(posName + 5, posSize - (posName + 5)); string size = line.Substring(posSize + 6, posDate - (posSize + 6)); //string date = line.Substring(posDate + 6, posCrc - (posDate + 6)); string crc = line.Substring(posCrc + 5, posEnd - (posCrc + 5)); RvFile tRom = new RvFile(thisFileType) { Dat = tGame.Dat, Name = VarFix.CleanFullFileName(name.Trim()), Size = VarFix.ULong(size.Trim()), CRC = VarFix.CleanMD5SHA1(crc.Trim(), 8) }; if (tRom.Size != null) { tRom.FileStatusSet(FileStatus.SizeFromDAT); } if (tRom.CRC != null) { tRom.FileStatusSet(FileStatus.CRCFromDAT); } tGame.ChildAdd(tRom); return(true); }
public static byte[] Execute(uint fileId) { Command.Parameters["fileId"].Value = fileId; byte[] sha1 = null; using (SQLiteDataReader dr = Command.ExecuteReader()) { while (dr.Read()) { sha1 = VarFix.CleanMD5SHA1(dr["SHA1"].ToString(), 40); } dr.Close(); } return(sha1); }
private static bool LoadDiskFromDat(RvGame rvGame) { if (DatFileLoader.Next != "(") { DatUpdate.SendAndShowDat("( not found after rom", DatFileLoader.Filename); return(false); } DatFileLoader.Gn(); if (DatFileLoader.Next.ToLower() != "name") { DatUpdate.SendAndShowDat("Name not found as first object in ( )", DatFileLoader.Filename); return(false); } string filename = VarFix.CleanFullFileName(DatFileLoader.Gn()); byte[] sha1; byte[] md5; string Merge; string Status; DatFileLoader.Gn(); while (DatFileLoader.Next != ")") { switch (DatFileLoader.Next.ToLower()) { case "sha1": sha1 = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 40); DatFileLoader.Gn(); break; case "md5": md5 = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 32); DatFileLoader.Gn(); break; case "merge": Merge = VarFix.CleanFullFileName(DatFileLoader.Gn()); DatFileLoader.Gn(); break; case "flags": Status = VarFix.ToLower(DatFileLoader.Gn()); DatFileLoader.Gn(); break; case "nodump": Status = "nodump"; DatFileLoader.Gn(); break; default: DatUpdate.SendAndShowDat("Error: key word '" + DatFileLoader.Next + "' not known in rom", DatFileLoader.Filename); DatFileLoader.Gn(); break; } } return(true); }
private static RvFile MakeFileZero() { RvFile fileZero = new RvFile(FileType.File); fileZero.Name = "ZeroFile"; fileZero.Size = 0; fileZero.CRC = new byte[] { 0, 0, 0, 0 }; fileZero.CRC = VarFix.CleanMD5SHA1("00000000", 8); fileZero.MD5 = VarFix.CleanMD5SHA1("d41d8cd98f00b204e9800998ecf8427e", 32); fileZero.SHA1 = VarFix.CleanMD5SHA1("da39a3ee5e6b4b0d3255bfef95601890afd80709", 40); fileZero.GotStatus = GotStatus.Got; fileZero.DatStatus = DatStatus.InToSort; return(fileZero); }
private static void LoadDiskFromDat(DatDir parentDir, XmlNode romNode) { if (romNode.Attributes == null) { return; } DatFile dRom = new DatFile(DatFileType.UnSet) { Name = VarFix.CleanCHD(romNode.Attributes.GetNamedItem("name")), SHA1 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40), Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")), isDisk = true }; parentDir.ChildAdd(dRom); }
private static void LoadRomFromDat(ref RvDir tGame, XmlNode romNode, FileType thisFileType) { if (romNode.Attributes == null) { return; } XmlNode name = romNode.Attributes.GetNamedItem("name"); string loadflag = VarFix.String(romNode.Attributes.GetNamedItem("loadflag")); if (name != null) { RvFile tRom = new RvFile(thisFileType) // changed { Name = VarFix.CleanFullFileName(name), Size = VarFix.ULong(romNode.Attributes.GetNamedItem("size")), CRC = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("crc"), 8), SHA1 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40), Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")), Dat = tGame.Dat }; if (tRom.Size != null) { tRom.FileStatusSet(FileStatus.SizeFromDAT); } if (tRom.CRC != null) { tRom.FileStatusSet(FileStatus.CRCFromDAT); } if (tRom.SHA1 != null) { tRom.FileStatusSet(FileStatus.SHA1FromDAT); } _indexContinue = tGame.ChildAdd(tRom); } else if (loadflag.ToLower() == "continue") { RvFile tZippedFile = (RvFile)tGame.Child(_indexContinue); tZippedFile.Size += VarFix.ULong(romNode.Attributes.GetNamedItem("size")); } }
private static void LoadRomFromDat(RvGame rvGame, XmlNode romNode) { if (romNode.Attributes == null) { return; } RvRom rvRom = new RvRom(); rvRom.Name = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("name")); rvRom.Size = VarFix.ULong(romNode.Attributes.GetNamedItem("size")); rvRom.CRC = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("crc"), 8); rvRom.SHA1 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40); rvRom.MD5 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("md5"), 32); rvRom.Merge = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("merge")); rvRom.Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")); rvGame.AddRom(rvRom); }
private static void LoadRomFromDat(DatDir parentDir, XmlNode romNode) { if (romNode.Attributes == null) { return; } DatFile rvRom = new DatFile(DatFileType.UnSet) { Name = VarFix.String(romNode.Attributes.GetNamedItem("name")), Size = VarFix.ULong(romNode.Attributes.GetNamedItem("size")), CRC = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("crc"), 8), SHA1 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40), MD5 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("md5"), 32), Merge = VarFix.String(romNode.Attributes.GetNamedItem("merge")), Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")), Region = VarFix.ToLower(romNode.Attributes.GetNamedItem("region")) }; parentDir.ChildAdd(rvRom); }
private static void LoadRomFromDat(RvGame rvGame, XmlNode romNode, HeaderFileType datFileType) { if (romNode.Attributes == null) { return; } RvRom rvRom = new RvRom { AltType = datFileType, Name = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("name")), Size = VarFix.ULong(romNode.Attributes.GetNamedItem("size")), CRC = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("crc"), 8), SHA1 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40), MD5 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("md5"), 32), Merge = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("merge")), Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")) }; rvGame.AddRom(rvRom); }
private static void LoadRomFromDat(ref RvDir tGame, XmlNode romNode, FileType thisFileType) { if (romNode.Attributes == null) { return; } RvFile tRom = new RvFile(thisFileType) { Dat = tGame.Dat, Size = VarFix.ULong(romNode.Attributes.GetNamedItem("size")), Name = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("name")), CRC = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("crc"), 8), SHA1 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40), MD5 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("md5"), 32), Merge = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("merge")), Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")) }; if (tRom.Size != null) { tRom.FileStatusSet(FileStatus.SizeFromDAT); } if (tRom.CRC != null) { tRom.FileStatusSet(FileStatus.CRCFromDAT); } if (tRom.SHA1 != null) { tRom.FileStatusSet(FileStatus.SHA1FromDAT); } if (tRom.MD5 != null) { tRom.FileStatusSet(FileStatus.MD5FromDAT); } tGame.ChildAdd(tRom); }
private static bool LoadRomFromDat(string rootName, HeaderFileType datFileType, out RvRom rvRom, out string game, out string description, out string romof, out string cloneof) { // Set the current out vars to blank for the time being rvRom = new RvRom(); game = ""; description = ""; romof = ""; cloneof = ""; if (!DatFileLoader.Next.Contains("¬")) { DatUpdate.SendAndShowDat("¬ not found in the rom definition on line " + DatFileLoader.LineNumber, DatFileLoader.Filename); return(false); } // Some old RC DATs have this behavior if (DatFileLoader.Next.Contains("¬N¬O")) { DatFileLoader.Next = DatFileLoader.Next.Replace("¬N¬O", "") + "¬¬"; } string[] split = DatFileLoader.Next.Split('¬'); game = split[3]; description = split[4]; romof = split[1]; cloneof = split[1]; rvRom = new RvRom { Name = split[5], CRC = VarFix.CleanMD5SHA1(split[6], 8), Size = Int64.TryParse(split[7], out var temp) ? VarFix.FixLong(split[7]) : null, Merge = split[9], }; return(true); }
private static void LoadDiskFromDat(DatDir parentDir, XmlNode romNode) { if (romNode.Attributes == null) { return; } DatFile rvRom = new DatFile(DatFileType.UnSet) { Name = VarFix.String(romNode.Attributes.GetNamedItem("name")) + ".chd", SHA1 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40), MD5 = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("md5"), 32), Merge = VarFix.String(romNode.Attributes.GetNamedItem("merge")), Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")), isDisk = true }; if (!string.IsNullOrWhiteSpace(rvRom.Merge)) { rvRom.Merge += ".chd"; } parentDir.ChildAdd(rvRom); }
static DBHelper() { ZeroByteMD5 = VarFix.CleanMD5SHA1("d41d8cd98f00b204e9800998ecf8427e", 32); ZeroByteSHA1 = VarFix.CleanMD5SHA1("da39a3ee5e6b4b0d3255bfef95601890afd80709", 40); ZeroByteCRC = VarFix.CleanMD5SHA1("00000000", 8); }
private static void ScanRomRoot(string directory) { _bgw.ReportProgress(0, new bgwText("Scanning Dir : " + directory)); DirectoryInfo di = new DirectoryInfo(directory); FileInfo[] fi = di.GetFiles(); _bgw.ReportProgress(0, new bgwRange2Visible(true)); _bgw.ReportProgress(0, new bgwSetRange2(fi.Count())); for (int j = 0; j < fi.Count(); j++) { if (_bgw.CancellationPending) { return; } FileInfo f = fi[j]; _bgw.ReportProgress(0, new bgwValue2(j)); _bgw.ReportProgress(0, new bgwText2(f.Name)); string ext = Path.GetExtension(f.Name); if (ext.ToLower() == ".gz") { GZip gZipTest = new GZip(); ZipReturn errorcode = gZipTest.ReadGZip(f.FullName, false); gZipTest.sha1Hash = VarFix.CleanMD5SHA1(Path.GetFileNameWithoutExtension(f.Name), 40); gZipTest.Close(); if (errorcode != ZipReturn.ZipGood) { _bgw.ReportProgress(0, new bgwShowError(f.FullName, "gz File corrupt")); if (!Directory.Exists("corrupt")) { Directory.CreateDirectory("corrupt"); } File.Move(f.FullName, Path.Combine("corrupt", f.Name)); continue; } RvFile tFile = new RvFile(); tFile.CRC = gZipTest.crc; tFile.MD5 = gZipTest.md5Hash; tFile.SHA1 = gZipTest.sha1Hash; tFile.Size = gZipTest.uncompressedSize; tFile.AltType = (HeaderFileType)gZipTest.altType; tFile.AltCRC = gZipTest.altcrc; tFile.AltMD5 = gZipTest.altmd5Hash; tFile.AltSHA1 = gZipTest.altsha1Hash; tFile.AltSize = gZipTest.uncompressedAltSize; tFile.CompressedSize = gZipTest.compressedSize; FindStatus res = fileneededTest(tFile); if (res != FindStatus.FoundFileInArchive) { if (deep) { gZipTest = new GZip(); try { errorcode = gZipTest.ReadGZip(f.FullName, true); gZipTest.sha1Hash = VarFix.CleanMD5SHA1(Path.GetFileNameWithoutExtension(f.Name), 40); gZipTest.Close(); } catch (Exception e) { gZipTest.Close(); _bgw.ReportProgress(0, new bgwShowError(f.FullName, "gz Crashed Compression")); if (!Directory.Exists("corrupt")) { Directory.CreateDirectory("corrupt"); } File.Move(f.FullName, Path.Combine("corrupt", f.Name)); continue; } if (errorcode != ZipReturn.ZipGood) { _bgw.ReportProgress(0, new bgwShowError(f.FullName, "gz File corrupt")); if (!Directory.Exists("corrupt")) { Directory.CreateDirectory("corrupt"); } File.Move(f.FullName, Path.Combine("corrupt", f.Name)); continue; } } tFile.DBWrite(); } } if (_bgw.CancellationPending) { return; } } DirectoryInfo[] childdi = di.GetDirectories(); foreach (DirectoryInfo d in childdi) { if (_bgw.CancellationPending) { return; } ScanRomRoot(d.FullName); } }
private bool LoadDiskFromDat(DatFileLoader dfl, DatDir parentDir) { dfl.Gn(); if (dfl.Next != "(") { _errorReport?.Invoke(dfl.Filename, "( not found after rom, on line " + dfl.LineNumber); return(false); } dfl.Gn(); if (dfl.Next.ToLower() != "name") { _errorReport?.Invoke(dfl.Filename, "Name not found as first object in ( ), on line " + dfl.LineNumber); return(false); } DatFile dRom = new DatFile(DatFileType.UnSet) { Name = VarFix.String(dfl.Gn()) + ".chd", isDisk = true }; dfl.Gn(); while (dfl.Next != ")") { switch (dfl.Next.ToLower()) { case "sha1": dRom.SHA1 = VarFix.CleanMD5SHA1(dfl.Gn(), 40); break; case "md5": dRom.MD5 = VarFix.CleanMD5SHA1(dfl.Gn(), 32); break; case "region": dRom.Region = VarFix.String(dfl.Gn()); break; case "merge": dRom.Merge = VarFix.String(dfl.Gn()); break; case "index": dfl.Gn(); break; case "flags": dRom.Status = VarFix.ToLower(dfl.Gn()); break; case "nodump": dRom.Status = "nodump"; break; default: _errorReport?.Invoke(dfl.Filename, "Error: key word '" + dfl.Next + "' not known in rom, on line " + dfl.LineNumber); break; } dfl.Gn(); } parentDir.ChildAdd(dRom); return(true); }
public static void UpdateDB() { SetupSQLCommands(); Program.db.ExecuteNonQuery(@"update game set dirid=(select dirId from DAT where game.Datid=dat.datid) where dirid is null;"); using (DbDataReader drGame = ZipSetGetAllGames()) { int commitCount = 0; Program.db.Begin(); while (drGame.Read()) { int GameId = Convert.ToInt32(drGame["GameId"]); string GameName = drGame["name"].ToString(); Debug.WriteLine("Game " + GameId + " Name: " + GameName); Zip memZip = new Zip(); memZip.ZipCreateFake(); ulong fileOffset = 0; int romCount = 0; using (DbDataReader drRom = ZipSetGetRomsInGame(GameId)) { while (drRom.Read()) { int RomId = Convert.ToInt32(drRom["RomId"]); string RomName = drRom["name"].ToString(); ulong size = Convert.ToUInt64(drRom["size"]); ulong compressedSize = Convert.ToUInt64(drRom["compressedsize"]); byte[] CRC = VarFix.CleanMD5SHA1(drRom["crc"].ToString(), 8); byte[] SHA1 = VarFix.CleanMD5SHA1(drRom["sha1"].ToString(), 40); Debug.WriteLine(" Rom " + RomId + " Name: " + RomName + " Size: " + size + " Compressed: " + compressedSize + " CRC: " + VarFix.ToString(CRC)); byte[] localHeader; memZip.ZipFileAddFake(RomName, fileOffset, size, compressedSize, CRC, out localHeader); ZipSetLocalFileHeader(RomId, localHeader, fileOffset, compressedSize, SHA1); fileOffset += (ulong)localHeader.Length + compressedSize; commitCount += 1; romCount += 1; } } byte[] centeralDir; memZip.ZipFileCloseFake(fileOffset, out centeralDir); if (romCount > 0) { ZipSetCentralFileHeader(GameId, fileOffset + (ulong)centeralDir.Length, DateTime.UtcNow.Ticks, centeralDir, fileOffset); } if (commitCount >= 100) { Program.db.Commit(); Program.db.Begin(); commitCount = 0; } } } Program.db.Commit(); MessageBox.Show("Zip Header Database Update Complete"); }
public static void extract(string dirName, string outPath) { if (CommandFindRomsInGame == null) { CommandFindRomsInGame = new SQLiteCommand( @"SELECT ROM.RomId, ROM.name, FILES.size, FILES.compressedsize, FILES.crc, FILES.sha1 FROM ROM,FILES WHERE ROM.FileId=FILES.FileId AND ROM.GameId=@GameId AND ROM.PutInZip ORDER BY ROM.RomId", DBSqlite.db.Connection); } CommandFindRomsInGame.Parameters.Add(new SQLiteParameter("GameId")); Debug.WriteLine(dirName); SQLiteCommand getfiles = new SQLiteCommand(@"SELECT dir.FullName,GameId,game.Name FROM dir,dat,game where dat.dirid=dir.dirid and game.datid=dat.datid and dir.fullname like '" + dirName + "%'", DBSqlite.db.Connection); DbDataReader reader = getfiles.ExecuteReader(); while (reader.Read()) { string outputFile = reader["fullname"].ToString() + reader["Name"].ToString() + ".zip"; outputFile = outputFile.Substring(dirName.Length); outputFile = Path.Combine(outPath, outputFile).Replace(@"/", @"\"); Debug.WriteLine(outputFile); int GameId = Convert.ToInt32(reader["GameId"]); string GameName = reader["name"].ToString(); Debug.WriteLine("Game " + GameId + " Name: " + GameName); Zip memZip = new Zip(); memZip.ZipCreateFake(); ulong fileOffset = 0; Stream zipFs = null; int romCount = 0; using (DbDataReader drRom = ZipSetGetRomsInGame(GameId)) { while (drRom.Read()) { int RomId = Convert.ToInt32(drRom["RomId"]); string RomName = drRom["name"].ToString(); ulong size = Convert.ToUInt64(drRom["size"]); ulong compressedSize = Convert.ToUInt64(drRom["compressedsize"]); byte[] CRC = VarFix.CleanMD5SHA1(drRom["crc"].ToString(), 8); byte[] sha1 = VarFix.CleanMD5SHA1(drRom["sha1"].ToString(), 32); Debug.WriteLine(" Rom " + RomId + " Name: " + RomName + " Size: " + size + " Compressed: " + compressedSize + " CRC: " + VarFix.ToString(CRC)); byte[] localHeader; memZip.ZipFileAddFake(RomName, fileOffset, size, compressedSize, CRC, out localHeader); //ZipSetLocalFileHeader(RomId, localHeader, fileOffset); if (romCount == 0) { CompressUtils.CreateDirForFile(outputFile); int errorCode = FileStream.OpenFileWrite(outputFile, out zipFs); } zipFs.Write(localHeader, 0, localHeader.Length); gZip GZip = new gZip(); string strFilename = RomRootDir.Getfilename(sha1); GZip.ZipFileOpen(strFilename, -1, true); GZip.ZipFileOpenReadStream(0, true, out Stream oStr, out ulong _); StreamCopier.StreamCopy(oStr, zipFs, compressedSize); GZip.ZipFileCloseReadStream(); GZip.ZipFileClose(); fileOffset += (ulong)localHeader.Length + compressedSize; zipFs.Position = (long)fileOffset; romCount += 1; } } memZip.ZipFileCloseFake(fileOffset, out byte[] centeralDir); if (romCount > 0) { zipFs.Write(centeralDir, 0, centeralDir.Length); zipFs.Flush(); zipFs.Close(); zipFs.Dispose(); } } }
public static void extract(string dirName, string datFilename) { Debug.WriteLine(dirName); SQLiteCommand getfiles = new SQLiteCommand( $@" select dir.FullName as FullName,Game.Name as GameName, Rom.Name as RomName,Size,crc,sha1,md5 from DIR inner join DAT on DIR.dirId=DAT.dirId inner join GAME on DAT.DatId=GAME.DatId inner join ROM on GAME.GameId=ROM.GameId where DIR.FullName like '{dirName}%' and FileId is null order by dir.FullName,GAME.Name,ROM.RomId", DBSqlite.db.Connection); DbDataReader reader = getfiles.ExecuteReader(); StreamWriter _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(dirName) + "</name>"); _ts.WriteLine("\t\t<description>fix_" + Etxt(dirName) + "</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>"); List <string> matchingcrc = new List <string>(); string lastname = ""; while (reader.Read()) { string filename = reader["FullName"].ToString(); filename = filename.Substring(dirName.Length); string GameName = reader["GameName"].ToString(); string RomName = reader["RomName"].ToString(); ulong? size = reader["size"].Equals(DBNull.Value) ? (ulong?)null : Convert.ToUInt64(reader["size"]); byte[] CRC = VarFix.CleanMD5SHA1(reader["crc"].ToString(), 8); byte[] sha1 = VarFix.CleanMD5SHA1(reader["sha1"].ToString(), 40); byte[] md5 = VarFix.CleanMD5SHA1(reader["md5"].ToString(), 32); string strSize = size != null ? $" size=\"{size}\"" : ""; string strCRC = CRC != null ? $" crc=\"{VarFix.ToString(CRC)}\"" : ""; string strSHA1 = sha1 != null ? $" sha1=\"{VarFix.ToString(sha1)}\"" : ""; string strMD5 = md5 != null ? $" md5=\"{VarFix.ToString(md5)}\"" : ""; if (matchingcrc.Contains(strCRC)) { continue; } matchingcrc.Add(strCRC); string thisFilename = filename + GameName; if (thisFilename != lastname) { if (!string.IsNullOrEmpty(lastname)) { _ts.WriteLine($"\t</game>"); } _ts.WriteLine($"\t<game name=\"{Etxt(thisFilename.Replace('\\','-').Replace('/','-'))}\">"); _ts.WriteLine($"\t\t<description>{Etxt(thisFilename.Replace('\\', '-').Replace('/', '-'))}</description>"); lastname = thisFilename; } _ts.WriteLine($"\t\t<rom name=\"{Etxt(RomName)}\"{strSize}{strCRC}{strSHA1}{strMD5} />"); } if (!string.IsNullOrEmpty(lastname)) { _ts.WriteLine($"\t</game>"); } _ts.WriteLine($"</datafile>"); _ts.Flush(); _ts.Close(); _ts.Dispose(); }