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"));
            }
        }
Beispiel #2
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"));
            }
        }
Beispiel #3
0
        private static bool LoadHeaderFromDat(XmlDocument doc, RvDat rvDat, string filename)
        {
            XmlNodeList head = doc.SelectNodes("softwarelist");

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

            if (head.Count == 0)
            {
                return(false);
            }

            if (head[0].Attributes == null)
            {
                return(false);
            }

            rvDat.Filename    = filename;
            rvDat.Name        = VarFix.CleanFileName(head[0].Attributes.GetNamedItem("name"));
            rvDat.Description = VarFix.String(head[0].Attributes.GetNamedItem("description"));

            return(true);
        }
        private bool LoadHeaderFromDat(XmlDocument doc, DatHeader datHeader)
        {
            XmlNodeList head = doc.SelectNodes("softwarelist");

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

            if (head.Count == 0)
            {
                return(false);
            }

            if (head[0].Attributes == null)
            {
                return(false);
            }

            datHeader.Filename    = _filename;
            datHeader.Name        = VarFix.String(head[0].Attributes.GetNamedItem("name"));
            datHeader.Description = VarFix.String(head[0].Attributes.GetNamedItem("description"));

            return(true);
        }
Beispiel #5
0
        private static bool LoadHeaderFromDat(XmlDocument doc, RvDat rvDat, string filename, long fileTimeStamp)
        {
            if (doc.DocumentElement == null)
            {
                return(false);
            }
            XmlNode head = doc.DocumentElement.SelectSingleNode("header");

            rvDat.Filename     = filename;
            rvDat.DatTimeStamp = fileTimeStamp;

            if (head == null)
            {
                return(false);
            }
            rvDat.Name        = VarFix.CleanFileName(head.SelectSingleNode("name"));
            rvDat.RootDir     = VarFix.CleanFileName(head.SelectSingleNode("rootdir"));
            rvDat.Description = VarFix.String(head.SelectSingleNode("description"));
            rvDat.Category    = VarFix.String(head.SelectSingleNode("category"));
            rvDat.Version     = VarFix.String(head.SelectSingleNode("version"));
            rvDat.Date        = VarFix.String(head.SelectSingleNode("date"));
            rvDat.Author      = VarFix.String(head.SelectSingleNode("author"));
            rvDat.Email       = VarFix.String(head.SelectSingleNode("email"));
            rvDat.Homepage    = VarFix.String(head.SelectSingleNode("homepage"));
            rvDat.URL         = VarFix.String(head.SelectSingleNode("url"));
            rvDat.Comment     = VarFix.String(head.SelectSingleNode("comment"));

            return(true);
        }
Beispiel #6
0
        private static void LoadSlot(DatGame dGame, XmlNode slot)
        {
            XmlNodeList slotList = slot.SelectNodes("slotoption");

            if (slotList == null)
            {
                return;
            }

            for (int i = 0; i < slotList.Count; i++)
            {
                if (slotList[i].Attributes == null)
                {
                    continue;
                }

                string name = VarFix.String(slotList[i].Attributes.GetNamedItem("devname"));

                if (dGame.slot == null)
                {
                    dGame.slot = new List <string>();
                }

                dGame.slot.Add(name);
            }
        }
Beispiel #7
0
        private bool LoadHeaderFromDat(XmlDocument doc, DatHeader datHeader)
        {
            if (doc.DocumentElement == null)
            {
                return(false);
            }
            XmlNode head = doc.DocumentElement.SelectSingleNode("header");

            datHeader.Filename = _filename;

            if (head == null)
            {
                return(false);
            }
            datHeader.Name        = VarFix.String(head.SelectSingleNode("name"));
            datHeader.Type        = VarFix.String(head.SelectSingleNode("type"));
            datHeader.RootDir     = VarFix.String(head.SelectSingleNode("rootdir"));
            datHeader.Description = VarFix.String(head.SelectSingleNode("description"));
            datHeader.Category    = VarFix.String(head.SelectSingleNode("category"));
            datHeader.Version     = VarFix.String(head.SelectSingleNode("version"));
            datHeader.Date        = VarFix.String(head.SelectSingleNode("date"));
            datHeader.Author      = VarFix.String(head.SelectSingleNode("author"));
            datHeader.Email       = VarFix.String(head.SelectSingleNode("email"));
            datHeader.Homepage    = VarFix.String(head.SelectSingleNode("homepage"));
            datHeader.URL         = VarFix.String(head.SelectSingleNode("url"));
            datHeader.Comment     = VarFix.String(head.SelectSingleNode("comment"));

            datHeader.IsSuperDat = (datHeader.Type.ToLower() == "superdat") || (datHeader.Type.ToLower() == "gigadat");

            XmlNode packingNode = head.SelectSingleNode("romvault") ?? head.SelectSingleNode("clrmamepro");

            if (packingNode?.Attributes != null)
            {
                // dat Header XML filename
                datHeader.Header = VarFix.String(packingNode.Attributes.GetNamedItem("header"));

                // zip, unzip, file
                datHeader.Compression = VarFix.String(packingNode.Attributes.GetNamedItem("forcepacking")).ToLower();

                // split, full
                datHeader.MergeType = VarFix.String(packingNode.Attributes.GetNamedItem("forcemerging")).ToLower();

                // noautodir, nogame
                datHeader.Dir = VarFix.String(packingNode.Attributes.GetNamedItem("dir")).ToLower();
            }

            // Look for: <notzipped>true</notzipped>
            string notzipped = VarFix.String(head.SelectSingleNode("notzipped"));

            datHeader.NotZipped = ((notzipped.ToLower() == "true") || (notzipped.ToLower() == "yes"));

            return(true);
        }
Beispiel #8
0
        private static bool LoadHeaderFromDat(ref RvDir tDir, ref XmlDocument doc)
        {
            XmlNodeList head = doc.SelectNodes("softwarelist");

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

            if (head.Count == 0)
            {
                return(false);
            }

            if (head[0].Attributes == null)
            {
                return(false);
            }

            RvDat tDat = new RvDat();

            tDat.AddData(RvDat.DatData.DatName, VarFix.CleanFileName(head[0].Attributes.GetNamedItem("name")));
            tDat.AddData(RvDat.DatData.Description, VarFix.String(head[0].Attributes.GetNamedItem("description")));

            string val = VarFix.String(head[0].Attributes.GetNamedItem("forcemerging")).ToLower();

            switch (val.ToLower())
            {
            case "split":
                tDat.AddData(RvDat.DatData.MergeType, "split");
                break;

            case "full":
                tDat.AddData(RvDat.DatData.MergeType, "full");
                break;

            default:
                tDat.AddData(RvDat.DatData.MergeType, "split");
                break;
            }



            tDir.Dat = tDat;
            return(true);
        }
Beispiel #9
0
        private void LoadDiskFromDat(DatDir parentDir, XmlNode romNode)
        {
            if (romNode.Attributes == null)
            {
                return;
            }

            DatFile dRom = new DatFile(DatFileType.UnSet)
            {
                Name   = VarFix.String(romNode.Attributes.GetNamedItem("name")) + ".chd",
                SHA1   = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40),
                Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status")),
                isDisk = true
            };

            parentDir.ChildAdd(dRom);
        }
Beispiel #10
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"));
            }
        }
Beispiel #11
0
        private bool LoadMameHeaderFromDat(XmlDocument doc, DatHeader datHeader)
        {
            if (doc.DocumentElement == null)
            {
                return(false);
            }
            XmlNode head = doc.SelectSingleNode("mame");

            if (head?.Attributes == null)
            {
                return(false);
            }

            datHeader.Filename    = _filename;
            datHeader.Name        = VarFix.String(head.Attributes.GetNamedItem("build"));
            datHeader.Description = VarFix.String(head.Attributes.GetNamedItem("build"));

            return(true);
        }
Beispiel #12
0
        private static bool LoadMameHeaderFromDat(XmlDocument doc, RvDat rvDat, string filename)
        {
            if (doc.DocumentElement == null)
            {
                return(false);
            }
            XmlNode head = doc.SelectSingleNode("mame");

            if (head?.Attributes == null)
            {
                return(false);
            }

            rvDat.Filename    = filename;
            rvDat.Name        = VarFix.CleanFileName(head.Attributes.GetNamedItem("build")); // ?? is this correct should it be Name & Descripition??
            rvDat.Description = VarFix.String(head.Attributes.GetNamedItem("build"));

            return(true);
        }
Beispiel #13
0
        private static bool LoadMameHeaderFromDat(XmlDocument doc, RvDat rvDat, string filename, long fileTimeStamp)
        {
            if (doc.DocumentElement == null)
            {
                return(false);
            }
            XmlNode head = doc.SelectSingleNode("mame");

            if (head == null || head.Attributes == null)
            {
                return(false);
            }

            rvDat.Filename     = filename;
            rvDat.Name         = VarFix.CleanFileName(head.Attributes.GetNamedItem("build"));
            rvDat.Description  = VarFix.String(head.Attributes.GetNamedItem("build"));
            rvDat.DatTimeStamp = fileTimeStamp;

            return(true);
        }
Beispiel #14
0
        private static bool LoadHeaderFromDat(XmlDocument doc, RvDat rvDat, string filename, out HeaderFileType datFileType)
        {
            datFileType = HeaderFileType.Nothing;

            if (doc.DocumentElement == null)
            {
                return(false);
            }
            XmlNode head = doc.DocumentElement.SelectSingleNode("header");

            rvDat.Filename = filename;

            if (head == null)
            {
                return(false);
            }
            rvDat.Name        = VarFix.CleanFileName(head.SelectSingleNode("name"));
            rvDat.RootDir     = VarFix.CleanFileName(head.SelectSingleNode("rootdir"));
            rvDat.Description = VarFix.String(head.SelectSingleNode("description"));
            rvDat.Category    = VarFix.String(head.SelectSingleNode("category"));
            rvDat.Version     = VarFix.String(head.SelectSingleNode("version"));
            rvDat.Date        = VarFix.String(head.SelectSingleNode("date"));
            rvDat.Author      = VarFix.String(head.SelectSingleNode("author"));
            rvDat.Email       = VarFix.String(head.SelectSingleNode("email"));
            rvDat.Homepage    = VarFix.String(head.SelectSingleNode("homepage"));
            rvDat.URL         = VarFix.String(head.SelectSingleNode("url"));
            rvDat.Comment     = VarFix.String(head.SelectSingleNode("comment"));


            XmlNode packingNode = head.SelectSingleNode("romvault") ?? head.SelectSingleNode("clrmamepro");

            if (packingNode?.Attributes != null)
            {
                // dat Header XML filename
                datFileType = FileHeaderReader.FileHeaderReader.GetFileTypeFromHeader(VarFix.String(packingNode.Attributes.GetNamedItem("header")));

                rvDat.MergeType = VarFix.String(packingNode.Attributes.GetNamedItem("forcemerging")).ToLower();
            }

            return(true);
        }
Beispiel #15
0
        private static void LoadDeviceRef(DatGame dGame, XmlNode deviceNode)
        {
            if (deviceNode.Attributes == null)
            {
                return;
            }


            string name = VarFix.String(deviceNode.Attributes.GetNamedItem("name"));

            if (string.IsNullOrWhiteSpace(name))
            {
                return;
            }

            if (dGame.device_ref == null)
            {
                dGame.device_ref = new List <string>();
            }
            dGame.device_ref.Add(name);
        }
Beispiel #16
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);
        }
Beispiel #17
0
        private static bool LoadMameHeaderFromDat(ref RvDir tDir, ref XmlDocument doc, ref FileType thisFileType)
        {
            if (doc.DocumentElement == null)
            {
                return(false);
            }
            XmlNode head = doc.SelectSingleNode("mame");

            if (head == null || head.Attributes == null)
            {
                return(false);
            }
            RvDat tDat = new RvDat();

            tDat.AddData(RvDat.DatData.DatName, VarFix.CleanFileName(head.Attributes.GetNamedItem("build")));
            tDat.AddData(RvDat.DatData.Description, VarFix.String(head.Attributes.GetNamedItem("build")));

            thisFileType = FileType.ZipFile;
            tDir.Dat     = tDat;
            return(true);
        }
Beispiel #18
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);
        }
Beispiel #19
0
        private static void LoadDirFromDat(DatDir parentDir, XmlNode dirNode)
        {
            if (dirNode.Attributes == null)
            {
                return;
            }

            string name = VarFix.String(dirNode.Attributes.GetNamedItem("name"));

            DatDir dir = new DatDir(DatFileType.UnSet)
            {
                Name = name
            };

            parentDir.ChildAdd(dir);

            XmlNodeList dirNodeList = dirNode.SelectNodes("dir");

            if (dirNodeList != null)
            {
                for (int i = 0; i < dirNodeList.Count; i++)
                {
                    LoadDirFromDat(dir, dirNodeList[i]);
                }
            }

            XmlNodeList gameNodeList = dirNode.SelectNodes("game");

            if (gameNodeList != null)
            {
                for (int i = 0; i < gameNodeList.Count; i++)
                {
                    LoadGameFromDat(dir, gameNodeList[i]);
                }
            }
        }
Beispiel #20
0
        private static bool LoadRomFromDat(DatFileLoader dfl, DatDir parentDir, ReportError errorReport)
        {
            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 = dfl.Gn()
            };

            dfl.Gn();


            while (dfl.Next != ")")
            {
                switch (dfl.Next.ToLower())
                {
                case "size":
                    dRom.Size = VarFix.ULong(dfl.Gn());
                    break;

                case "hash":
                    dfl.Gn();
                    break;

                case "crc":
                case "crc32":
                    dRom.CRC = VarFix.CleanMD5SHA1(dfl.Gn(), 8);
                    break;

                case "sha1":
                    dRom.SHA1 = VarFix.CleanMD5SHA1(dfl.Gn(), 40);
                    break;

                case "md5":
                    dRom.MD5 = VarFix.CleanMD5SHA1(dfl.Gn(), 32);
                    break;

                case "merge":
                    dRom.Merge = VarFix.String(dfl.Gn());
                    break;

                case "flags":
                    string flags = VarFix.ToLower(dfl.Gn());
                    if (string.IsNullOrWhiteSpace(dRom.Status))
                    {
                        dRom.Status = flags;
                    }
                    break;

                case "date":
                    dfl.Gn();
                    break;

                case "bios":
                    dfl.Gn();
                    break;

                case "region":
                    dfl.Gn();
                    break;

                case "regiona":
                case "regionb":
                    while (dfl.Next != ")")
                    {
                        dfl.Gn();
                    }
                    continue;

                case "offs":
                    dfl.Gn();
                    break;

                case "nodump":
                    dRom.Status = "nodump";
                    break;

                case "baddump":
                    dRom.Status = "baddump";
                    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);
        }
        private void LoadGameFromDat(DatDir parentDir, XmlNode gameNode)
        {
            if (gameNode.Attributes == null)
            {
                return;
            }

            DatDir dDir = new DatDir(DatFileType.UnSet)
            {
                Name  = VarFix.String(gameNode.Attributes.GetNamedItem("name")),
                DGame = new DatGame()
            };

            DatGame dGame = dDir.DGame;

            dGame.Description  = VarFix.String(gameNode.SelectSingleNode("description"));
            dGame.RomOf        = VarFix.String(gameNode.Attributes?.GetNamedItem("romof"));
            dGame.CloneOf      = VarFix.String(gameNode.Attributes?.GetNamedItem("cloneof"));
            dGame.Year         = VarFix.String(gameNode.SelectSingleNode("year"));
            dGame.Manufacturer = VarFix.String(gameNode.SelectSingleNode("publisher"));

            XmlNodeList partNodeList = gameNode.SelectNodes("part");

            if (partNodeList == null)
            {
                return;
            }

            for (int iP = 0; iP < partNodeList.Count; iP++)
            {
                _indexContinue = -1;
                XmlNodeList dataAreaNodeList = partNodeList[iP].SelectNodes("dataarea");
                if (dataAreaNodeList == null)
                {
                    continue;
                }
                for (int iD = 0; iD < dataAreaNodeList.Count; iD++)
                {
                    XmlNodeList romNodeList = dataAreaNodeList[iD].SelectNodes("rom");
                    if (romNodeList == null)
                    {
                        continue;
                    }
                    for (int iR = 0; iR < romNodeList.Count; iR++)
                    {
                        LoadRomFromDat(dDir, romNodeList[iR]);
                    }
                }
            }

            /*
             * for (int iP = 0; iP < partNodeList.Count; iP++)
             * {
             *  XmlNodeList diskAreaNodeList = partNodeList[iP].SelectNodes("diskarea");
             *  if (diskAreaNodeList != null)
             *      for (int iD = 0; iD < diskAreaNodeList.Count; iD++)
             *      {
             *          XmlNodeList romNodeList = diskAreaNodeList[iD].SelectNodes("disk");
             *          if (romNodeList != null)
             *              for (int iR = 0; iR < romNodeList.Count; iR++)
             *              {
             *                  LoadDiskFromDat(dDirCHD, romNodeList[iR]);
             *              }
             *      }
             * }
             */

            if (dDir.ChildCount > 0)
            {
                parentDir.ChildAdd(dDir);
            }

            /*
             * if (tDirCHD.ChildCount > 0)
             *  parentDir.ChildAdd(rvGameCHD, index1);
             */
        }
Beispiel #22
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);
        }
Beispiel #23
0
        private static void LoadGameFromDat(RvDat rvDat, XmlNode gameNode, string rootDir, HeaderFileType datFileType)
        {
            if (gameNode.Attributes == null)
            {
                return;
            }

            RvGame rvGame = new RvGame
            {
                Name         = VarFix.CleanFullFileName(gameNode.Attributes.GetNamedItem("name")),
                RomOf        = VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("romof")),
                CloneOf      = VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof")),
                SampleOf     = VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("sampleof")),
                Description  = VarFix.String(gameNode.SelectSingleNode("description")),
                SourceFile   = VarFix.String(gameNode.Attributes.GetNamedItem("sourcefile")),
                IsBios       = VarFix.String(gameNode.Attributes.GetNamedItem("isbios")),
                Board        = VarFix.String(gameNode.Attributes.GetNamedItem("board")),
                Year         = VarFix.String(gameNode.SelectSingleNode("year")),
                Manufacturer = VarFix.String(gameNode.SelectSingleNode("manufacturer"))
            };

            XmlNode trurip = gameNode.SelectSingleNode("trurip");

            if (trurip != null)
            {
                rvGame.IsTrurip           = true;
                rvGame.Publisher          = VarFix.String(trurip.SelectSingleNode("publisher"));
                rvGame.Developer          = VarFix.String(trurip.SelectSingleNode("developer"));
                rvGame.Edition            = VarFix.String(trurip.SelectSingleNode("edition"));
                rvGame.Version            = VarFix.String(trurip.SelectSingleNode("version"));
                rvGame.Type               = VarFix.String(trurip.SelectSingleNode("type"));
                rvGame.Media              = VarFix.String(trurip.SelectSingleNode("media"));
                rvGame.Language           = VarFix.String(trurip.SelectSingleNode("language"));
                rvGame.Players            = VarFix.String(trurip.SelectSingleNode("players"));
                rvGame.Ratings            = VarFix.String(trurip.SelectSingleNode("ratings"));
                rvGame.Peripheral         = VarFix.String(trurip.SelectSingleNode("peripheral"));
                rvGame.Genre              = VarFix.String(trurip.SelectSingleNode("genre"));
                rvGame.MediaCatalogNumber = VarFix.String(trurip.SelectSingleNode("mediacatalognumber"));
                rvGame.BarCode            = VarFix.String(trurip.SelectSingleNode("barcode"));
            }

            rvGame.Name = Path.Combine(rootDir, rvGame.Name);

            rvDat.AddGame(rvGame);

            XmlNodeList romNodeList = gameNode.SelectNodes("rom");

            if (romNodeList != null)
            {
                for (int i = 0; i < romNodeList.Count; i++)
                {
                    LoadRomFromDat(rvGame, romNodeList[i], datFileType);
                }
            }

            XmlNodeList diskNodeList = gameNode.SelectNodes("disk");

            if (diskNodeList != null)
            {
                for (int i = 0; i < diskNodeList.Count; i++)
                {
                    LoadDiskFromDat(rvGame, diskNodeList[i]);
                }
            }
        }
Beispiel #24
0
        private static bool LoadHeaderFromDat(ref RvDir tDir, ref XmlDocument doc, ref FileType thisFileType)
        {
            if (doc.DocumentElement == null)
            {
                return(false);
            }
            XmlNode head = doc.DocumentElement.SelectSingleNode("header");

            if (head == null)
            {
                return(false);
            }
            RvDat tDat = new RvDat();

            tDat.AddData(RvDat.DatData.DatName, VarFix.CleanFileName(head.SelectSingleNode("name")));
            tDat.AddData(RvDat.DatData.RootDir, VarFix.CleanFileName(head.SelectSingleNode("rootdir")));
            tDat.AddData(RvDat.DatData.Description, VarFix.String(head.SelectSingleNode("description")));
            tDat.AddData(RvDat.DatData.Category, VarFix.String(head.SelectSingleNode("category")));
            tDat.AddData(RvDat.DatData.Version, VarFix.String(head.SelectSingleNode("version")));
            tDat.AddData(RvDat.DatData.Date, VarFix.String(head.SelectSingleNode("date")));
            tDat.AddData(RvDat.DatData.Author, VarFix.String(head.SelectSingleNode("author")));
            tDat.AddData(RvDat.DatData.Email, VarFix.String(head.SelectSingleNode("email")));
            tDat.AddData(RvDat.DatData.HomePage, VarFix.String(head.SelectSingleNode("homepage")));
            tDat.AddData(RvDat.DatData.URL, VarFix.String(head.SelectSingleNode("url")));


            string superDAT = VarFix.String(head.SelectSingleNode("type"));

            _cleanFileNames = superDAT.ToLower() != "superdat" && superDAT.ToLower() != "gigadat";
            if (!_cleanFileNames)
            {
                tDat.AddData(RvDat.DatData.SuperDat, "superdat");
            }

            thisFileType = FileType.ZipFile;

            // Look for:   <romvault forcepacking="unzip"/>
            XmlNode packingNode = head.SelectSingleNode("romvault");

            if (packingNode == null)
            {
                // Look for:   <clrmamepro forcepacking="unzip"/>
                packingNode = head.SelectSingleNode("clrmamepro");
            }
            if (packingNode != null)
            {
                if (packingNode.Attributes != null)
                {
                    string val = VarFix.String(packingNode.Attributes.GetNamedItem("forcepacking")).ToLower();
                    switch (val.ToLower())
                    {
                    case "zip":
                        tDat.AddData(RvDat.DatData.FileType, "zip");
                        thisFileType = FileType.ZipFile;
                        break;

                    case "unzip":
                    case "file":
                        tDat.AddData(RvDat.DatData.FileType, "file");
                        thisFileType = FileType.File;
                        break;

                    default:
                        thisFileType = FileType.ZipFile;
                        break;
                    }

                    val = VarFix.String(packingNode.Attributes.GetNamedItem("forcemerging")).ToLower();
                    switch (val.ToLower())
                    {
                    case "split":
                        tDat.AddData(RvDat.DatData.MergeType, "split");
                        break;

                    case "full":
                        tDat.AddData(RvDat.DatData.MergeType, "full");
                        break;

                    default:
                        tDat.AddData(RvDat.DatData.MergeType, "split");
                        break;
                    }
                    val = VarFix.String(packingNode.Attributes.GetNamedItem("dir")).ToLower(); // noautodir , nogame
                    if (!String.IsNullOrEmpty(val))
                    {
                        tDat.AddData(RvDat.DatData.DirSetup, val);
                    }
                }
            }

            // Look for: <notzipped>true</notzipped>
            string notzipped = VarFix.String(head.SelectSingleNode("notzipped"));

            if (notzipped.ToLower() == "true" || notzipped.ToLower() == "yes")
            {
                thisFileType = FileType.File;
            }

            tDir.Dat = tDat;
            return(true);
        }
Beispiel #25
0
        private static void LoadGameFromDat(ref RvDir tDat, XmlNode gameNode, FileType thisFileType)
        {
            if (gameNode.Attributes == null)
            {
                return;
            }

            RvDir parent = tDat;

            RvDir tDir = new RvDir(DBTypeGet.DirFromFile(thisFileType))
            {
                Name      = VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("name")),
                Game      = new RvGame(),
                Dat       = tDat.Dat,
                DatStatus = DatStatus.InDatCollect
            };


            tDir.Game.AddData(RvGame.GameData.Description, VarFix.String(gameNode.SelectSingleNode("description")));

            tDir.Game.AddData(RvGame.GameData.RomOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof")));
            tDir.Game.AddData(RvGame.GameData.CloneOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof")));
            tDir.Game.AddData(RvGame.GameData.Year, VarFix.CleanFileName(gameNode.SelectSingleNode("year")));
            tDir.Game.AddData(RvGame.GameData.Manufacturer, VarFix.CleanFileName(gameNode.SelectSingleNode("publisher")));



            RvDir tDirCHD = new RvDir(FileType.Dir)
            {
                Name      = VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("name")),
                Game      = new RvGame(),
                Dat       = tDat.Dat,
                DatStatus = DatStatus.InDatCollect
            };

            tDirCHD.Game.AddData(RvGame.GameData.Description, VarFix.String(gameNode.SelectSingleNode("description")));

            tDirCHD.Game.AddData(RvGame.GameData.RomOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof")));
            tDirCHD.Game.AddData(RvGame.GameData.CloneOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof")));
            tDirCHD.Game.AddData(RvGame.GameData.Year, VarFix.CleanFileName(gameNode.SelectSingleNode("year")));
            tDirCHD.Game.AddData(RvGame.GameData.Manufacturer, VarFix.CleanFileName(gameNode.SelectSingleNode("publisher")));



            int    index1;
            string testName  = tDir.Name;
            int    nameCount = 0;

            while (parent.ChildNameSearch(tDir, out index1) == 0)
            {
                tDir.Name = testName + "_" + nameCount;
                nameCount++;
            }
            tDirCHD.Name = tDir.Name;


            XmlNodeList partNodeList = gameNode.SelectNodes("part");

            if (partNodeList == null)
            {
                return;
            }

            for (int iP = 0; iP < partNodeList.Count; iP++)
            {
                _indexContinue = -1;
                XmlNodeList dataAreaNodeList = partNodeList[iP].SelectNodes("dataarea");
                if (dataAreaNodeList != null)
                {
                    for (int iD = 0; iD < dataAreaNodeList.Count; iD++)
                    {
                        XmlNodeList romNodeList = dataAreaNodeList[iD].SelectNodes("rom");
                        if (romNodeList != null)
                        {
                            for (int iR = 0; iR < romNodeList.Count; iR++)
                            {
                                LoadRomFromDat(ref tDir, romNodeList[iR], thisFileType);
                            }
                        }
                    }
                }
            }
            for (int iP = 0; iP < partNodeList.Count; iP++)
            {
                XmlNodeList diskAreaNodeList = partNodeList[iP].SelectNodes("diskarea");
                if (diskAreaNodeList != null)
                {
                    for (int iD = 0; iD < diskAreaNodeList.Count; iD++)
                    {
                        XmlNodeList romNodeList = diskAreaNodeList[iD].SelectNodes("disk");
                        if (romNodeList != null)
                        {
                            for (int iR = 0; iR < romNodeList.Count; iR++)
                            {
                                LoadDiskFromDat(ref tDirCHD, romNodeList[iR]);
                            }
                        }
                    }
                }
            }

            if (tDir.ChildCount > 0)
            {
                parent.ChildAdd(tDir, index1);
            }
            if (tDirCHD.ChildCount > 0)
            {
                parent.ChildAdd(tDirCHD, index1);
            }
        }
Beispiel #26
0
        private static void LoadGameFromDat(RvDat rvDat, XmlNode gameNode)
        {
            if (gameNode.Attributes == null)
            {
                return;
            }

            RvGame rvGame = new RvGame
            {
                Name         = VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("name")),
                Description  = VarFix.String(gameNode.SelectSingleNode("description")),
                RomOf        = VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof")),
                CloneOf      = VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof")),
                Year         = VarFix.CleanFileName(gameNode.SelectSingleNode("year")),
                Manufacturer = VarFix.CleanFileName(gameNode.SelectSingleNode("publisher"))
            };

            XmlNodeList partNodeList = gameNode.SelectNodes("part");

            if (partNodeList == null)
            {
                return;
            }

            for (int iP = 0; iP < partNodeList.Count; iP++)
            {
                _indexContinue = -1;
                XmlNodeList dataAreaNodeList = partNodeList[iP].SelectNodes("dataarea");
                if (dataAreaNodeList == null)
                {
                    continue;
                }
                for (int iD = 0; iD < dataAreaNodeList.Count; iD++)
                {
                    XmlNodeList romNodeList = dataAreaNodeList[iD].SelectNodes("rom");
                    if (romNodeList == null)
                    {
                        continue;
                    }
                    for (int iR = 0; iR < romNodeList.Count; iR++)
                    {
                        LoadRomFromDat(rvGame, romNodeList[iR]);
                    }
                }
            }

            /*
             * for (int iP = 0; iP < partNodeList.Count; iP++)
             * {
             *  XmlNodeList diskAreaNodeList = partNodeList[iP].SelectNodes("diskarea");
             *  if (diskAreaNodeList != null)
             *      for (int iD = 0; iD < diskAreaNodeList.Count; iD++)
             *      {
             *          XmlNodeList romNodeList = diskAreaNodeList[iD].SelectNodes("disk");
             *          if (romNodeList != null)
             *              for (int iR = 0; iR < romNodeList.Count; iR++)
             *              {
             *                  LoadDiskFromDat(rvGameCHD, romNodeList[iR]);
             *              }
             *      }
             * }
             */

            if (rvGame.RomCount > 0)
            {
                rvDat.AddGame(rvGame);
            }

            /*
             * if (tDirCHD.ChildCount > 0)
             *  rvDat.AddGame(rvGameCHD, index1);
             */
        }
Beispiel #27
0
        private static void LoadGameFromDat(ref RvDir tDat, XmlNode gameNode, FileType thisFileType)
        {
            if (gameNode.Attributes == null)
            {
                return;
            }

            RvDir parent = tDat;
            RvDir tDir;
            int   index1 = 0;

            string fullname = VarFix.CleanFullFileName(gameNode.Attributes.GetNamedItem("name"));

            if (_cleanFileNames)
            {
                fullname = fullname.Replace("/", "-");
            }
            else
            {
                while (fullname.Contains("/"))
                {
                    int    firstSlash = fullname.IndexOf("/", StringComparison.Ordinal);
                    string dir        = fullname.Substring(0, firstSlash);
                    dir = VarFix.CleanFileName(dir);

                    fullname = fullname.Substring(firstSlash + 1);
                    int index;
                    if (parent.ChildNameSearch(new RvDir(FileType.Dir)
                    {
                        Name = dir
                    }, out index) == 0)
                    {
                        parent = (RvDir)parent.Child(index);
                    }
                    else
                    {
                        RvDir tpDir = new RvDir(FileType.Dir)
                        {
                            Name      = dir,
                            DatStatus = DatStatus.InDatCollect,
                            Dat       = tDat.Dat,
                            Tree      = new RvTreeRow()
                        };
                        parent.ChildAdd(tpDir, index);
                        parent = tpDir;
                    }
                }
            }

            tDir = new RvDir(DBTypeGet.DirFromFile(thisFileType))
            {
                Name      = fullname,
                DatStatus = DatStatus.InDatCollect,
                Dat       = tDat.Dat
            };

            string testName  = tDir.Name;
            int    nameCount = 0;

            while (parent.ChildNameSearch(tDir, out index1) == 0)
            {
                tDir.Name = testName + "_" + nameCount;
                nameCount++;
            }

            tDir.Game = new RvGame();
            tDir.Game.AddData(RvGame.GameData.RomOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("romof")));
            tDir.Game.AddData(RvGame.GameData.Description, VarFix.String(gameNode.SelectSingleNode("description")));

            tDir.Game.AddData(RvGame.GameData.Sourcefile, VarFix.String(gameNode.Attributes.GetNamedItem("sourcefile")));
            tDir.Game.AddData(RvGame.GameData.IsBios, VarFix.String(gameNode.Attributes.GetNamedItem("isbios")));
            tDir.Game.AddData(RvGame.GameData.CloneOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("cloneof")));
            tDir.Game.AddData(RvGame.GameData.SampleOf, VarFix.CleanFileName(gameNode.Attributes.GetNamedItem("sampleof")));
            tDir.Game.AddData(RvGame.GameData.Board, VarFix.String(gameNode.Attributes.GetNamedItem("board")));
            tDir.Game.AddData(RvGame.GameData.Year, VarFix.String(gameNode.SelectSingleNode("year")));
            tDir.Game.AddData(RvGame.GameData.Manufacturer, VarFix.String(gameNode.SelectSingleNode("manufacturer")));

            XmlNode trurip = gameNode.SelectSingleNode("trurip");

            if (trurip != null)
            {
                tDir.Game.AddData(RvGame.GameData.Trurip, "yes");
                tDir.Game.AddData(RvGame.GameData.Year, VarFix.String(trurip.SelectSingleNode("year")));
                tDir.Game.AddData(RvGame.GameData.Publisher, VarFix.String(trurip.SelectSingleNode("publisher")));
                tDir.Game.AddData(RvGame.GameData.Developer, VarFix.String(trurip.SelectSingleNode("developer")));
                tDir.Game.AddData(RvGame.GameData.Edition, VarFix.String(trurip.SelectSingleNode("edition")));
                tDir.Game.AddData(RvGame.GameData.Version, VarFix.String(trurip.SelectSingleNode("version")));
                tDir.Game.AddData(RvGame.GameData.Type, VarFix.String(trurip.SelectSingleNode("type")));
                tDir.Game.AddData(RvGame.GameData.Media, VarFix.String(trurip.SelectSingleNode("media")));
                tDir.Game.AddData(RvGame.GameData.Language, VarFix.String(trurip.SelectSingleNode("language")));
                tDir.Game.AddData(RvGame.GameData.Players, VarFix.String(trurip.SelectSingleNode("players")));
                tDir.Game.AddData(RvGame.GameData.Ratings, VarFix.String(trurip.SelectSingleNode("ratings")));
                tDir.Game.AddData(RvGame.GameData.Peripheral, VarFix.String(trurip.SelectSingleNode("peripheral")));
                tDir.Game.AddData(RvGame.GameData.Genre, VarFix.String(trurip.SelectSingleNode("genre")));
                tDir.Game.AddData(RvGame.GameData.MediaCatalogNumber, VarFix.String(trurip.SelectSingleNode("mediacatalognumber")));
                tDir.Game.AddData(RvGame.GameData.BarCode, VarFix.String(trurip.SelectSingleNode("barcode")));
            }

            RvDir tDirCHD = new RvDir(FileType.Dir)
            {
                Name      = tDir.Name,
                DatStatus = tDir.DatStatus,
                Dat       = tDir.Dat,
                Game      = tDir.Game
            };

            XmlNodeList romNodeList = gameNode.SelectNodes("rom");

            if (romNodeList != null)
            {
                for (int i = 0; i < romNodeList.Count; i++)
                {
                    LoadRomFromDat(ref tDir, romNodeList[i], thisFileType);
                }
            }

            XmlNodeList diskNodeList = gameNode.SelectNodes("disk");

            if (diskNodeList != null)
            {
                for (int i = 0; i < diskNodeList.Count; i++)
                {
                    LoadDiskFromDat(ref tDirCHD, diskNodeList[i]);
                }
            }

            if (tDir.ChildCount > 0)
            {
                parent.ChildAdd(tDir, index1);
            }
            if (tDirCHD.ChildCount > 0)
            {
                parent.ChildAdd(tDirCHD);
            }
        }
Beispiel #28
0
        private static void LoadGameFromDat(DatDir parentDir, XmlNode gameNode)
        {
            if (gameNode.Attributes == null)
            {
                return;
            }

            DatGame dGame = new DatGame();
            DatDir  dDir  = new DatDir(DatFileType.UnSet)
            {
                Name  = VarFix.String(gameNode.Attributes.GetNamedItem("name")),
                DGame = dGame
            };

            dGame.RomOf        = VarFix.String(gameNode.Attributes.GetNamedItem("romof"));
            dGame.CloneOf      = VarFix.String(gameNode.Attributes.GetNamedItem("cloneof"));
            dGame.SampleOf     = VarFix.String(gameNode.Attributes.GetNamedItem("sampleof"));
            dGame.Description  = VarFix.String(gameNode.SelectSingleNode("description"));
            dGame.SourceFile   = VarFix.String(gameNode.Attributes?.GetNamedItem("sourcefile"));
            dGame.IsBios       = VarFix.String(gameNode.Attributes?.GetNamedItem("isbios"));
            dGame.IsDevice     = VarFix.String(gameNode.Attributes?.GetNamedItem("isdevice"));
            dGame.Board        = VarFix.String(gameNode.Attributes?.GetNamedItem("board"));
            dGame.Year         = VarFix.String(gameNode.SelectSingleNode("year"));
            dGame.Manufacturer = VarFix.String(gameNode.SelectSingleNode("manufacturer"));
            dGame.Runnable     = VarFix.String(gameNode.Attributes?.GetNamedItem("runnable"));

            XmlNode tea = gameNode.SelectSingleNode("tea") ?? gameNode.SelectSingleNode("trurip");

            if (tea != null)
            {
                dGame.IsTea     = true;
                dGame.TitleId   = VarFix.String(tea.SelectSingleNode("titleid"));
                dGame.Publisher = VarFix.String(tea.SelectSingleNode("publisher"));
                dGame.Developer = VarFix.String(tea.SelectSingleNode("developer"));
                dGame.Year      = VarFix.String(gameNode.SelectSingleNode("year"));
                dGame.Genre     = VarFix.String(tea.SelectSingleNode("genre"));
                dGame.SubGenre  = VarFix.String(tea.SelectSingleNode("subgenre"));
                dGame.Ratings   = VarFix.String(tea.SelectSingleNode("ratings"));
                dGame.Score     = VarFix.String(tea.SelectSingleNode("score"));
                dGame.Players   = VarFix.String(tea.SelectSingleNode("players"));
                dGame.Enabled   = VarFix.String(tea.SelectSingleNode("enabled"));
                dGame.CRC       = VarFix.String(tea.SelectSingleNode("crc"));
                dGame.CloneOf   = VarFix.String(tea.SelectSingleNode("cloneof"));
                dGame.RelatedTo = VarFix.String(tea.SelectSingleNode("relatedto"));
                dGame.Source    = VarFix.String(tea.SelectSingleNode("source"));
            }

            parentDir.ChildAdd(dDir);

            XmlNodeList romNodeList = gameNode.SelectNodes("rom");

            if (romNodeList != null)
            {
                for (int i = 0; i < romNodeList.Count; i++)
                {
                    LoadRomFromDat(dDir, romNodeList[i]);
                }
            }

            XmlNodeList diskNodeList = gameNode.SelectNodes("disk");

            if (diskNodeList != null)
            {
                for (int i = 0; i < diskNodeList.Count; i++)
                {
                    LoadDiskFromDat(dDir, diskNodeList[i]);
                }
            }

            XmlNodeList deviceRef = gameNode.SelectNodes("device_ref");

            if (deviceRef != null)
            {
                for (int i = 0; i < deviceRef.Count; i++)
                {
                    LoadDeviceRef(dGame, deviceRef[i]);
                }
            }

            XmlNodeList slotList = gameNode.SelectNodes("slot");

            if (slotList != null)
            {
                for (int i = 0; i < slotList.Count; i++)
                {
                    LoadSlot(dGame, slotList[i]);
                }
            }
        }