コード例 #1
0
ファイル: Platforms.cs プロジェクト: snarfblam/ROM-Hasher
        /// <summary>
        /// Adds standard ROM details
        /// </summary>
        /// <param name="builder">Data builder</param>
        /// <param name="rom">ROM image</param>
        /// <param name="data">ROM information</param>
        private void AddStandardData(RomExDataBuilder builder, byte[] rom, RomData data)
        {
            const string general = RomExDataBuilder.GeneralCat;

            builder.AddData(general, "Platform", data.Platform.ID.GetDescription());
            builder.AddData(general, "ROM format", data.FormatName);
            if (data.ExternalHeader != null)
            {
                builder.AddData(general, "External Header", data.ExternalHeader.Value ? "Yes" : "No");
            }
            builder.AddData(general, "File Size", data.FileSize.ToString() + " (" + data.FileSize.ToString("x") + ")");
            builder.AddData(general, "ROM Size", data.RomSize.ToString() + " (" + data.RomSize.ToString("x") + ")");

            // ROM hashes
            var crc32 = data.GetHash(HashFlags.RomHash | HashFlags.CRC32);
            var sha1  = data.GetHash(HashFlags.RomHash | HashFlags.SHA1);

            if (crc32 != null)
            {
                builder.AddData(general, RomHash.GetHashName(HashFlags.RomHash | HashFlags.CRC32), Hex.FormatHex(crc32.Value));
            }
            if (sha1 != null)
            {
                builder.AddData(general, RomHash.GetHashName(HashFlags.RomHash | HashFlags.SHA1), Hex.FormatHex(sha1.Value));
            }

            // File hashes as a last resort when ROM hashes aren't present
            if (crc32 == null)
            {
                crc32 = data.GetHash(HashFlags.FileHash | HashFlags.CRC32);
                if (crc32 != null)
                {
                    builder.AddData(general, RomHash.GetHashName(HashFlags.FileHash | HashFlags.CRC32), Hex.FormatHex(crc32.Value));
                }
            }
            if (sha1 == null)
            {
                sha1 = data.GetHash(HashFlags.FileHash | HashFlags.SHA1);
                if (sha1 != null)
                {
                    builder.AddData(general, RomHash.GetHashName(HashFlags.FileHash | HashFlags.SHA1), Hex.FormatHex(sha1.Value));
                }
            }

            for (int i = 0; i < data.DatabaseMatches.Count; i++)
            {
                var match = data.DatabaseMatches[i];
                builder.AddData(general, match.Database.Name + " entry", match.Entry.name);
            }

            for (int i = 0; i < data.Hashes.Count; i++)
            {
                builder.AddData(
                    RomExDataBuilder.HashesCat,
                    RomHash.GetHashName(data.Hashes[i].Type),
                    Hex.FormatHex(data.Hashes[i].Value));
            }
        }
コード例 #2
0
        /// <summary>
        /// Attempts to find the specified hash and append it to the string builder for RHDN-specific output.
        /// </summary>
        /// <param name="hashtype">The hash type (i.e. CRC32/MD5/SHA1). File/ROM/PRG/CHR should NOT be specified.</param>
        /// <returns>True if ANYTHING was appended to the string builder.</returns>
        /// <param name="rom"></param>
        /// <param name="sb"></param>
        private static bool AddHashToSB(StringBuilder sb, RomData rom, HashFlags hashtype)
        {
            string hashname = RomHash.GetHashName(HashFlags.RomHash | hashtype);
            var    hash     = rom.GetHash(HashFlags.RomHash | hashtype);

            if (hash == null)
            {
                hashname = hashname = RomHash.GetHashName(HashFlags.FileHash | hashtype);;
                hash     = rom.GetHash(HashFlags.FileHash | hashtype);
            }

            if (hash == null)
            {
                return(false);
            }

            sb.AppendLine(hashname + ": " + Hex.FormatHex(hash.Value));
            return(true);
        }
コード例 #3
0
        /// <summary>
        /// Updates the ROM summary if a primary ROM is loaded
        /// </summary>
        private void UpdateRomSummary()
        {
            // Summary (only shown if a primary ROM is loaded)
            if (PrimaryRom != null)
            {
                StringBuilder summary = new StringBuilder();

                // List DB Matches
                var EntryMatches = PrimaryRom.DatabaseMatches;

                string preferredDB         = Program.Config.PreferredDatabaseName;
                bool   preferredDbNotFound = true;
                for (int iMatch = 0; iMatch < EntryMatches.Count; iMatch++)
                {
                    string dbName        = EntryMatches[iMatch].Database.Name ?? "upenfeawnfwf;nfnfepfepoiefjifewjnfewnjfewpeafwiop";
                    bool   isPreferredDb = dbName.Equals(preferredDB, StringComparison.InvariantCultureIgnoreCase);

                    // First No-Intro match is considered canonical
                    if (isPreferredDb & preferredDbNotFound)
                    {
                        //summary.AppendLine(preferredDB + " Name: " + EntryMatches[iMatch].Entry.name);
                        summary.AppendLine("Database match: " + EntryMatches[iMatch].Entry.name);
                        var platforms = String.Join(", ", EntryMatches[iMatch].Database.Platforms.ConvertAll <string>(plat => plat.ToString()).ToArray());
                        summary.AppendLine("Database: " + EntryMatches[iMatch].Database.Name + ": " + platforms + " (v. " + EntryMatches[iMatch].Database.Version + ")");

                        preferredDbNotFound = false;
                    }
                    else
                    {
                        if (isPreferredDb)
                        {
                            summary.AppendLine("Additional " + preferredDB + " Name: " + EntryMatches[iMatch].Entry.name);
                        }
                        else
                        {
                            summary.AppendLine(EntryMatches[iMatch].Database.Name + " Name: " + EntryMatches[iMatch].Entry.name);
                        }
                    }

                    // DB Version
                    summary.AppendLine(GetDbVersionString(EntryMatches[iMatch].Database));
                }
                if (preferredDbNotFound)
                {
                    summary.AppendLine("ROM not found in Database: " + preferredDB);
                }


                // Primary ROM hashes
                List <RomHash> hashes        = new List <RomHash>();
                var            desiredHashes = Program.Config.RhdnPreferredHashes;
                for (int i = 0; i < desiredHashes.Count; i++)
                {
                    var hash = PrimaryRom.GetHash(desiredHashes[i]);
                    if (hash != null)
                    {
                        hashes.Add(hash);
                    }
                }
                AddHashesToSB(summary, hashes, null);

                // Secondary ROM hashes
                if (SecondaryRom != null)
                {
                    hashes.Clear();
                    for (int i = 0; i < desiredHashes.Count; i++)
                    {
                        var hash = SecondaryRom.GetHash(desiredHashes[i]);
                        if (hash != null)
                        {
                            hashes.Add(hash);
                        }
                    }

                    AddHashesToSB(summary, hashes, "Patched");
                }


                txtRHDN.Text = summary.ToString();
            }
        }