Exemple #1
0
        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);
        }
Exemple #2
0
        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"));
            }
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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"));
            }
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #9
0
 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);
 }
Exemple #10
0
        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);
        }
Exemple #11
0
        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;
                    }
                }
            }
        }
Exemple #12
0
        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"));
        }
Exemple #13
0
        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);
        }
Exemple #14
0
        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);
        }
Exemple #15
0
        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);
        }
Exemple #16
0
        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);
        }
Exemple #17
0
        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);
        }
Exemple #18
0
        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"));
            }
        }
Exemple #19
0
        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);
        }
Exemple #20
0
        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);
        }
Exemple #21
0
        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);
        }
Exemple #22
0
        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);
        }
Exemple #23
0
        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);
        }
Exemple #24
0
        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);
        }
Exemple #25
0
 static DBHelper()
 {
     ZeroByteMD5  = VarFix.CleanMD5SHA1("d41d8cd98f00b204e9800998ecf8427e", 32);
     ZeroByteSHA1 = VarFix.CleanMD5SHA1("da39a3ee5e6b4b0d3255bfef95601890afd80709", 40);
     ZeroByteCRC  = VarFix.CleanMD5SHA1("00000000", 8);
 }
Exemple #26
0
        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);
            }
        }
Exemple #27
0
        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);
        }
Exemple #28
0
        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");
        }
Exemple #29
0
        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();
                }
            }
        }
Exemple #30
0
        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();
        }