Ejemplo n.º 1
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);
            }
        }
Ejemplo n.º 2
0
        public static void RemoveDevices(DatDir tDat)
        {
            DatBase[] children = tDat.ToArray();

            tDat.ChildrenClear();
            foreach (DatBase child in children)
            {
                DatDir mGame = (DatDir)child;

                if (mGame.DGame == null)
                {
                    RemoveDevices(mGame);
                    tDat.ChildAdd(mGame);
                }
                else
                {
                    DatGame dGame = mGame.DGame;

                    if (dGame != null && dGame.IsDevice == "yes" && dGame.Runnable == "no")
                    {
                        continue;
                    }

                    tDat.ChildAdd(mGame);
                }
            }
        }
Ejemplo n.º 3
0
        private bool LoadGameFromDat(DatFileLoader dfl, DatDir parentDir)
        {
            if (dfl.Next != "(")
            {
                _errorReport?.Invoke(dfl.Filename, "( not found after game, on line " + dfl.LineNumber);
                return(false);
            }
            dfl.Gn();

            string snext = dfl.Next.ToLower();

            if (snext != "name")
            {
                _errorReport?.Invoke(dfl.Filename, "Name not found as first object in ( ), on line " + dfl.LineNumber);
                return(false);
            }


            string name = dfl.GnRest();

            dfl.Gn();

            DatDir dDir = new DatDir(DatFileType.UnSet)
            {
                Name = name, DGame = new DatGame()
            };
            DatGame dGame = dDir.DGame;

            while (dfl.Next != ")")
            {
                switch (dfl.Next.ToLower())
                {
                case "file":
                    dfl.Gn();
                    if (!LoadFileFromDat(dfl, dDir))
                    {
                        return(false);
                    }
                    dfl.Gn();
                    break;

                case "rom":
                    dfl.Gn();
                    if (!LoadFileFromDat(dfl, dDir))
                    {
                        return(false);
                    }
                    dfl.Gn();
                    break;

                default:
                    _errorReport?.Invoke(dfl.Filename, "Error: key word '" + dfl.Next + "' not known in game, on line " + dfl.LineNumber);
                    dfl.Gn();
                    break;
                }
            }
            parentDir.ChildAdd(dDir);
            return(true);
        }
Ejemplo n.º 4
0
        public static void DatSetMakeNonMergeSet(DatDir tDat)
        {
            // look for merged roms, check if a rom exists in a parent set where the Name,Size and CRC all match.

            for (int g = 0; g < tDat.ChildCount; g++)
            {
                DatDir mGame = (DatDir)tDat.Child(g);

                if (mGame.DGame == null)
                {
                    DatSetMakeNonMergeSet(mGame);
                }
                else
                {
                    DatGame dGame = mGame.DGame;

                    if (dGame?.device_ref == null)
                    {
                        continue;
                    }

                    List <DatDir> devices = new List <DatDir> {
                        mGame
                    };

                    foreach (string device in dGame.device_ref)
                    {
                        AddDevice(device, devices, tDat);
                    }
                    devices.RemoveAt(0);


                    foreach (DatDir device in devices)
                    {
                        for (int i = 0; i < device.ChildCount; i++)
                        {
                            DatFile df0      = (DatFile)device.Child(i);
                            bool    crcFound = false;
                            for (int j = 0; j < mGame.ChildCount; j++)
                            {
                                DatFile df1 = (DatFile)mGame.Child(j);
                                if (ArrByte.bCompare(df0.SHA1, df1.SHA1))
                                {
                                    crcFound = true;
                                    break;
                                }
                            }
                            if (!crcFound)
                            {
                                mGame.ChildAdd(device.Child(i));
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
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);
        }
Ejemplo n.º 6
0
        private DatGame ParseGame(DatObject datObj)
        {
            if (datObj == null)
            {
                throw new ArgumentNullException("Can't parse game object, no object given.");
            }

            var datGame = new DatGame();

            foreach (var prop in datObj.Properties)
            {
                var romAdded = false;
                if (prop.Name == "rom" && !romAdded)
                {
                    romAdded = true;
                    foreach (var romDatProp in (prop.Value as DatObject).Properties)
                    {
                        if (datGameProperties.TryGetValue("rom." + romDatProp.Name, out var romPropInfo))
                        {
                            SetParsedProperty(romPropInfo, datGame, (string)romDatProp.Value);
                        }
                    }
                }
                else if (datGameProperties.TryGetValue(prop.Name, out var propInfo))
                {
                    if (prop.Value is DatObject)
                    {
                        throw new Exception("Can't assign object to uknown dat property.");
                    }

                    SetParsedProperty(propInfo, datGame, (string)prop.Value);
                }
            }

            datGame.FixData();
            return(datGame);
        }
Ejemplo n.º 7
0
        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);
             */
        }
Ejemplo n.º 8
0
        private bool LoadGameFromDat(DatFileLoader dfl, DatDir parentDir)
        {
            dfl.Gn();
            if (dfl.Next != "(")
            {
                _errorReport?.Invoke(dfl.Filename, "( not found after game, on line " + dfl.LineNumber);
                return(false);
            }

            dfl.Gn();
            string snext = dfl.Next.ToLower();

            string pathextra = "";

            if (snext == "rebuildto")
            {
                pathextra = dfl.Gn();
                dfl.Gn();
                snext = dfl.Next.ToLower();
            }

            if (snext != "name")
            {
                _errorReport?.Invoke(dfl.Filename, "Name not found as first object in ( ), on line " + dfl.LineNumber);
                return(false);
            }

            string name = dfl.GnRest();

            name = Path.Combine(pathextra, name);

            dfl.Gn();
            DatDir dDir = new DatDir(DatFileType.UnSet)
            {
                Name = name, DGame = new DatGame()
            };
            DatGame dGame = dDir.DGame;

            while (dfl.Next != ")" && !dfl.EndOfStream())
            {
                switch (dfl.Next.ToLower())
                {
                case "romof":
                    dGame.RomOf = dfl.GnRest();
                    break;

                case "description":
                    dGame.Description = dfl.GnRest();
                    break;

                case "sourcefile":
                    dGame.SourceFile = dfl.GnRest();
                    break;

                case "cloneof":
                    dGame.CloneOf = dfl.GnRest();
                    break;

                case "sampleof":
                    dGame.SampleOf = dfl.GnRest();
                    break;

                case "board":
                    dGame.Board = dfl.GnRest();
                    break;

                case "year":
                    dGame.Year = dfl.GnRest();
                    break;

                case "manufacturer":
                    dGame.Manufacturer = dfl.GnRest();
                    break;

                case "history":
                    dGame.History = dfl.GnRest();
                    break;

                case "serial":
                    dfl.GnRest();
                    break;

                case "rebuildto":
                    dfl.GnRest();
                    break;

                case "sample":
                    dfl.GnRest();
                    break;

                case "biosset":
                    dfl.GnRest();
                    break;

                case "chip":
                    dfl.GnRest();
                    break;

                case "video":
                    dfl.GnRest();
                    break;

                case "sound":
                    dfl.GnRest();
                    break;

                case "input":
                    dfl.GnRest();
                    break;

                case "dipswitch":
                    dfl.GnRest();
                    break;

                case "driver":
                    dfl.GnRest();
                    break;

                case "display":
                    dfl.GnRest();
                    break;

                case "comment":
                case "releaseyear":
                case "releasemonth":
                case "releaseday":
                case "genre":
                case "developer":
                case "publisher":
                case "homepage":
                case "users":
                case "version":
                case "license":
                    dfl.GnRest();
                    break;

                case "name":
                    string tmpName = dfl.GnRest();
                    _errorReport?.Invoke(dfl.Filename, "Error: multiple names found in one game '" + tmpName + "' will be ignored, on line " + dfl.LineNumber);
                    break;

                case "rom":
                    if (!LoadRomFromDat(dfl, dDir))
                    {
                        return(false);
                    }
                    break;

                case "disk":
                    if (!LoadDiskFromDat(dfl, dDir))
                    {
                        return(false);
                    }
                    break;

                case "archive":
                    if (!LoadArchiveFromDat(dfl))
                    {
                        return(false);
                    }
                    break;

                default:
                    _errorReport?.Invoke(dfl.Filename, "Error: key word '" + dfl.Next + "' not known in game, on line " + dfl.LineNumber);
                    break;
                }
                dfl.Gn();
            }
            parentDir.ChildAdd(dDir);
            return(true);
        }
Ejemplo n.º 9
0
        private void writeBase(dsw sw, DatDir baseDirIn, bool newStyle)
        {
            DatBase[] dirChildren = baseDirIn.ToArray();

            if (dirChildren == null)
            {
                return;
            }
            foreach (DatBase baseObj in dirChildren)
            {
                DatDir baseDir = baseObj as DatDir;
                if (baseDir != null)
                {
                    if (baseDir.DGame != null)
                    {
                        DatGame g = baseDir.DGame;
                        sw.Write(newStyle ? @"<set" : @"<game");

                        sw.WriteItem("name", baseDir.Name);

                        if (newStyle)
                        {
                            if (baseDir.DatFileType == DatFileType.DirTorrentZip)
                            {
                                sw.WriteItem("type", "trrntzip");
                            }
                            else if (baseDir.DatFileType == DatFileType.DirRVZip)
                            {
                                sw.WriteItem("type", "rvzip");
                            }
                            else if (baseDir.DatFileType == DatFileType.Dir7Zip)
                            {
                                sw.WriteItem("type", "7zip");
                            }
                            else if (baseDir.DatFileType == DatFileType.Dir)
                            {
                                sw.WriteItem("type", "dir");
                            }
                        }

                        if (!g.IsEmuArc)
                        {
                            //         sw.WriteItem("cloneof", g.CloneOf);
                            //         sw.WriteItem("romof", g.RomOf);
                        }
                        sw.WriteEnd(@">", 1);

                        sw.WriteNode("description", g.Description);
                        if (g.IsEmuArc)
                        {
                            sw.WriteLine("<tea>", 1);
                            sw.WriteNode("titleid", g.TitleId);
                            sw.WriteNode("source", g.Source);
                            sw.WriteNode("publisher", g.Publisher);
                            sw.WriteNode("developer", g.Developer);
                            sw.WriteNode("year", g.Year);
                            sw.WriteNode("genre", g.Genre);
                            sw.WriteNode("subgenre", g.SubGenre);
                            sw.WriteNode("ratings", g.Ratings);
                            sw.WriteNode("score", g.Score);
                            sw.WriteNode("players", g.Players);
                            sw.WriteNode("enabled", g.Enabled);
                            sw.WriteNode("crc", g.CRC);
                            sw.WriteNode("cloneof", g.CloneOf);
                            sw.WriteNode("relatedto", g.RelatedTo);

                            sw.WriteLine("</trurip>", -1);
                        }
                        else
                        {
                            sw.WriteNode("year", g.Year);
                            sw.WriteNode("manufacturer", g.Manufacturer);
                        }

                        writeBase(sw, baseDir, newStyle);
                        sw.WriteLine(newStyle ? @"</set>" : @"</game>", -1);
                    }
                    else
                    {
                        sw.WriteLine(@"<dir name=""" + Etxt(baseDir.Name) + @""">", 1);
                        writeBase(sw, baseDir, newStyle);
                        sw.WriteLine(@"</dir>", -1);
                    }
                    continue;
                }

                if (baseObj is DatFile baseRom)
                {
                    if (baseRom.Name.Substring(baseRom.Name.Length - 1) == "/" && newStyle)
                    {
                        sw.Write(@"<dir");
                        sw.WriteItem("name", baseRom.Name.Substring(0, baseRom.Name.Length - 1));
                        //sw.WriteItem("merge", baseRom.Merge);
                        if (baseRom.Date != "1996/12/24 23:32:00")
                        {
                            sw.WriteItem("date", baseRom.Date);
                        }
                        sw.WriteEnd("/>");
                    }
                    else
                    {
                        sw.Write(newStyle ? @"<file" : @"<rom");
                        sw.WriteItem("name", baseRom.Name);
                        //sw.WriteItem("merge", baseRom.Merge);
                        sw.WriteItem("size", baseRom.Size);
                        sw.WriteItem("crc", baseRom.CRC);
                        sw.WriteItem("sha1", baseRom.SHA1);
                        sw.WriteItem("md5", baseRom.MD5);
                        if (baseRom.Date != "1996/12/24 23:32:00")
                        {
                            sw.WriteItem("date", baseRom.Date);
                        }
                        if (baseRom.Status != null && baseRom.Status.ToLower() != "good")
                        {
                            sw.WriteItem("status", baseRom.Status);
                        }
                        sw.WriteEnd("/>");
                    }
                }
            }
        }
Ejemplo n.º 10
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]);
                }
            }
        }
Ejemplo n.º 11
0
        private void writeBase(dsw sw, DatDir baseDirIn)
        {
            DatBase[] dirChildren = baseDirIn.ToArray();

            if (dirChildren == null)
            {
                return;
            }
            foreach (DatBase baseObj in dirChildren)
            {
                DatDir baseDir = baseObj as DatDir;
                if (baseDir != null)
                {
                    if (baseDir.DGame != null)
                    {
                        DatGame g = baseDir.DGame;
                        sw.Write(@"<game");
                        sw.WriteItem("name", baseDir.Name);
                        if (!g.IsTea)
                        {
                            //         sw.WriteItem("cloneof", g.CloneOf);
                            //         sw.WriteItem("romof", g.RomOf);
                        }
                        sw.WriteEnd(@">", 1);

                        sw.WriteNode("description", g.Description);
                        if (g.IsTea)
                        {
                            sw.WriteLine("<tea>", 1);
                            sw.WriteNode("titleid", g.TitleId);
                            sw.WriteNode("source", g.Source);
                            sw.WriteNode("publisher", g.Publisher);
                            sw.WriteNode("developer", g.Developer);
                            sw.WriteNode("year", g.Year);
                            sw.WriteNode("genre", g.Genre);
                            sw.WriteNode("subgenre", g.SubGenre);
                            sw.WriteNode("ratings", g.Ratings);
                            sw.WriteNode("score", g.Score);
                            sw.WriteNode("players", g.Players);
                            sw.WriteNode("enabled", g.Enabled);
                            sw.WriteNode("crc", g.CRC);
                            sw.WriteNode("cloneof", g.CloneOf);
                            sw.WriteNode("relatedto", g.RelatedTo);

                            sw.WriteLine("</trurip>", -1);
                        }
                        else
                        {
                            sw.WriteNode("year", g.Year);
                            sw.WriteNode("manufacturer", g.Manufacturer);
                        }

                        writeBase(sw, baseDir);
                        sw.WriteLine(@"</game>", -1);
                    }
                    else
                    {
                        sw.WriteLine(@"<dir name=""" + Etxt(baseDir.Name) + @""">", 1);
                        writeBase(sw, baseDir);
                        sw.WriteLine(@"</dir>", -1);
                    }
                    continue;
                }
                DatFile baseRom = baseObj as DatFile;
                if (baseRom != null)
                {
                    sw.Write(@"<rom");
                    sw.WriteItem("name", baseRom.Name);
                    //sw.WriteItem("merge", baseRom.Merge);
                    sw.WriteItem("size", baseRom.Size);
                    sw.WriteItem("crc", baseRom.CRC);
                    sw.WriteItem("sha1", baseRom.SHA1);
                    sw.WriteItem("md5", baseRom.MD5);
                    if (baseRom.Status.ToLower() != "good")
                    {
                        sw.WriteItem("status", baseRom.Status);
                    }
                    sw.WriteEnd("/>");
                }
            }
        }
Ejemplo n.º 12
0
        private static void CopyDir(DatDir datD, RvFile rvD, RvDat rvDat, HeaderFileType headerFileType, bool gameFile)
        {
            DatBase[] datB = datD.ToArray();
            if (datB == null)
            {
                return;
            }
            foreach (DatBase b in datB)
            {
                switch (b)
                {
                case DatDir nDir:
                    RvFile nd = new RvFile(ConvE(nDir.DatFileType))
                    {
                        Name      = nDir.Name + GetExt(nDir.DatFileType),
                        Dat       = rvDat,
                        DatStatus = ConvE(nDir.DatStatus)
                    };
                    if (nDir.DGame == null && !gameFile)
                    {
                        nd.Tree = new RvTreeRow();
                    }

                    rvD.ChildAdd(nd);

                    if (nDir.DGame != null)
                    {
                        DatGame dGame = nDir.DGame;
                        RvGame  cGame = new RvGame();
                        CheckAttribute(cGame, dGame.Description, RvGame.GameData.Description);
                        CheckAttribute(cGame, dGame.RomOf, RvGame.GameData.RomOf);
                        CheckAttribute(cGame, dGame.IsBios, RvGame.GameData.IsBios);
                        CheckAttribute(cGame, dGame.SourceFile, RvGame.GameData.Sourcefile);
                        CheckAttribute(cGame, dGame.CloneOf, RvGame.GameData.CloneOf);
                        CheckAttribute(cGame, dGame.SampleOf, RvGame.GameData.SampleOf);
                        CheckAttribute(cGame, dGame.Board, RvGame.GameData.Board);
                        CheckAttribute(cGame, dGame.Year, RvGame.GameData.Year);
                        CheckAttribute(cGame, dGame.Manufacturer, RvGame.GameData.Manufacturer);

                        if (nDir.DGame.IsEmuArc)
                        {
                            cGame.AddData(RvGame.GameData.EmuArc, "yes");
                            CheckAttribute(cGame, dGame.TitleId, RvGame.GameData.TitleId);
                            CheckAttribute(cGame, dGame.Publisher, RvGame.GameData.Publisher);
                            CheckAttribute(cGame, dGame.Developer, RvGame.GameData.Developer);
                            CheckAttribute(cGame, dGame.Genre, RvGame.GameData.Genre);
                            CheckAttribute(cGame, dGame.SubGenre, RvGame.GameData.SubGenre);
                            CheckAttribute(cGame, dGame.Ratings, RvGame.GameData.Ratings);
                            CheckAttribute(cGame, dGame.Score, RvGame.GameData.Score);
                            CheckAttribute(cGame, dGame.Players, RvGame.GameData.Players);
                            CheckAttribute(cGame, dGame.Enabled, RvGame.GameData.Enabled);
                            CheckAttribute(cGame, dGame.CRC, RvGame.GameData.CRC);
                            CheckAttribute(cGame, dGame.RelatedTo, RvGame.GameData.RelatedTo);
                            CheckAttribute(cGame, dGame.Source, RvGame.GameData.Source);
                        }
                        nd.Game = cGame;
                    }

                    CopyDir(nDir, nd, rvDat, headerFileType, gameFile || nDir.DGame != null);
                    break;

                case DatFile nFile:
                    RvFile nf = new RvFile(ConvE(nFile.DatFileType))
                    {
                        Name           = nFile.Name,
                        Size           = nFile.Size,
                        CRC            = nFile.CRC,
                        SHA1           = nFile.SHA1,
                        MD5            = nFile.MD5,
                        Merge          = nFile.Merge,
                        Status         = nFile.Status,
                        Dat            = rvDat,
                        DatStatus      = ConvE(nFile.DatStatus),
                        HeaderFileType = headerFileType
                    };
#if dt
                    DateTime dt;
                    if (!string.IsNullOrEmpty(nFile.DateModified) && DateTime.TryParseExact(nFile.DateModified, "yyyy/MM/dd HH:mm:ss", enUS, DateTimeStyles.None, out dt))
                    {
                        nf.DatModTimeStamp = dt.Ticks;
                    }
#endif
                    if (nFile.isDisk)
                    {
                        nf.HeaderFileType = HeaderFileType.CHD;
                    }

                    if (nf.HeaderFileType != HeaderFileType.Nothing)
                    {
                        nf.FileStatusSet(FileStatus.HeaderFileTypeFromDAT);
                    }
                    if (nf.Size != null)
                    {
                        nf.FileStatusSet(FileStatus.SizeFromDAT);
                    }
                    if (nf.CRC != null)
                    {
                        nf.FileStatusSet(FileStatus.CRCFromDAT);
                    }
                    if (nf.SHA1 != null)
                    {
                        nf.FileStatusSet(FileStatus.SHA1FromDAT);
                    }
                    if (nf.MD5 != null)
                    {
                        nf.FileStatusSet(FileStatus.MD5FromDAT);
                    }


                    rvD.ChildAdd(nf);
                    break;
                }
            }
        }
Ejemplo n.º 13
0
        private static bool LoadDisks(DatFileLoader dfl, DatDir parentDir, ReportError errorReport)
        {
            if (dfl.Next.ToLower() != "[disks]")
            {
                errorReport?.Invoke(dfl.Filename, "Looking for [DISKS] but found " + dfl.Next + " , " + dfl.LineNumber);
                return(false);
            }

            while (!dfl.EndOfStream())
            {
                string line = dfl.Gn();

                if (line.Substring(0, 1) == "[")
                {
                    return(true);
                }

                string[] parts = line.Split('¬');

                // 1 parent name         = clone of
                // 2 parent description  = description (from parent)
                // 3 game name           = name (game)
                // 4 game description    = description
                // 5 rom name            = name (rom)
                // 6 rom crc             = crc
                // 7 rom size            = size
                // 8 romof name          = romof
                // 9 merge name          = merge

                string ParentName        = parts[1];
                string ParentDescription = parts[2];
                string GameName          = parts[3];
                string GameDescription   = parts[4];
                string romName           = parts[5];
                string romCRC            = parts[6];
                string romSize           = parts[7];
                string romOf             = parts[8];
                string merge             = parts[9];

                int    index;
                DatDir dDir;
                DatDir searchDir = new DatDir(DatFileType.Dir)
                {
                    Name = GameName
                };
                if (parentDir.ChildNameSearch(searchDir, out index) != 0)
                {
                    dDir = new DatDir(DatFileType.UnSet)
                    {
                        Name = GameName, DGame = new DatGame()
                    };
                    DatGame dGame = dDir.DGame;
                    dGame.Description = GameDescription;
                    if (ParentName != GameName)
                    {
                        dGame.CloneOf = ParentName;
                    }
                    parentDir.ChildAdd(dDir);
                }
                else
                {
                    dDir = (DatDir)parentDir.Child(index);
                    // need to check everything matches
                }

                DatFile dRom = new DatFile(DatFileType.UnSet)
                {
                    isDisk = true,
                    Name   = VarFix.CleanCHD(romName),
                    SHA1   = VarFix.CleanMD5SHA1(romCRC, 40),
                    Merge  = merge
                };
                // dRom.Size = VarFix.ULong(romSize);
                // check romof=ParentName

                dDir.ChildAdd(dRom);
            }
            return(true);
        }
Ejemplo n.º 14
0
        private static void CopyDir(DatDir datD, HeaderFileType headerFileType, RvDat retDat = null, RvGame retGame = null)
        {
            DatBase[] datB = datD.ToArray();
            if (datB == null)
            {
                return;
            }
            foreach (DatBase b in datB)
            {
                switch (b)
                {
                case DatDir nDir:
                    if (nDir.DGame == null)
                    {
                        break;
                    }

                    DatGame dGame = nDir.DGame;
                    RvGame  cGame = new RvGame();

                    cGame.Name         = b.Name;
                    cGame.Description  = dGame.Description;
                    cGame.Manufacturer = dGame.Manufacturer;
                    cGame.CloneOf      = dGame.CloneOf;
                    cGame.RomOf        = dGame.RomOf;
                    cGame.SampleOf     = dGame.SampleOf;
                    cGame.SourceFile   = dGame.SourceFile;
                    cGame.IsBios       = dGame.IsBios;
                    cGame.Board        = dGame.Board;
                    cGame.Year         = dGame.Year;

                    if (dGame.IsEmuArc)
                    {
                        cGame.IsTrurip  = true;
                        cGame.Publisher = dGame.Publisher;
                        cGame.Developer = dGame.Developer;
                        //cGame.Edition
                        //cGame.Version
                        //cGame.Type
                        //cGame.Media
                        //cGame.Language
                        cGame.Players = dGame.Players;
                        cGame.Ratings = dGame.Ratings;
                        cGame.Genre   = dGame.Genre;
                        //cGame.Peripheral
                        //cGame.BarCode
                        //cGame.MediaCatalogNumber
                    }
                    retDat?.AddGame(cGame);
                    CopyDir(nDir, headerFileType, null, cGame);

                    break;

                case DatFile nFile:
                    if (nFile.isDisk)
                    {
                        break;
                    }

                    RvRom nf = new RvRom()
                    {
                        Name    = nFile.Name,
                        Size    = nFile.Size,
                        CRC     = nFile.CRC,
                        SHA1    = nFile.SHA1,
                        MD5     = nFile.MD5,
                        Merge   = nFile.Merge,
                        Status  = nFile.Status,
                        AltType = headerFileType
                    };

                    retGame?.AddRom(nf);
                    break;
                }
            }
        }
Ejemplo n.º 15
0
        private static void writeBase(DatStreamWriter sw, DatDir baseDirIn)
        {
            DatBase[] dirChildren = baseDirIn.ToArray();

            if (dirChildren == null)
            {
                return;
            }
            foreach (DatBase baseObj in dirChildren)
            {
                if (baseObj is DatDir baseDir)
                {
                    if (baseDir.DGame != null)
                    {
                        DatGame g = baseDir.DGame;
                        sw.Write(@"<machine");

                        sw.WriteItem("name", baseDir.Name);

                        if (!g.IsEmuArc)
                        {
                            sw.WriteItem("cloneof", g.CloneOf);
                            sw.WriteItem("romof", g.RomOf);
                        }
                        if (!string.IsNullOrWhiteSpace(g.IsBios) && g.IsBios != "no")
                        {
                            sw.WriteItem("isbios", g.IsBios);
                        }
                        if (!string.IsNullOrWhiteSpace(g.IsDevice) && g.IsDevice != "no")
                        {
                            sw.WriteItem("isdevice", g.IsDevice);
                        }
                        if (!string.IsNullOrWhiteSpace(g.Runnable) && g.Runnable != "yes")
                        {
                            sw.WriteItem("runnable", g.Runnable);
                        }
                        sw.WriteEnd(@">", 1);

                        sw.WriteNode("description", g.Description);
                        sw.WriteNode("year", g.Year);
                        sw.WriteNode("manufacturer", g.Manufacturer);

                        writeBase(sw, baseDir);

                        if (g.device_ref != null)
                        {
                            foreach (string d in g.device_ref)
                            {
                                sw.WriteLine($@"<device_ref name=""{d}""/>");
                            }
                        }

                        sw.WriteLine(@"</machine>", -1);
                    }
                    else
                    {
                        sw.WriteLine(@"<dir name=""" + Etxt(baseDir.Name) + @""">", 1);
                        writeBase(sw, baseDir);
                        sw.WriteLine(@"</dir>", -1);
                    }
                    continue;
                }

                if (baseObj is DatFile baseRom)
                {
                    if (baseRom.isDisk)
                    {
                        sw.Write(@"<disk");
                    }
                    else
                    {
                        sw.Write(@"<rom");
                    }

                    sw.WriteItem("name", baseRom.Name);
                    sw.WriteItem("merge", baseRom.Merge);
                    sw.WriteItem("size", baseRom.Size);
                    sw.WriteItem("crc", baseRom.CRC);
                    sw.WriteItem("sha1", baseRom.SHA1);
                    sw.WriteItem("md5", baseRom.MD5);
                    if (baseRom.DateModified != "1996/12/24 23:32:00")
                    {
                        sw.WriteItem("date", baseRom.DateModified);
                    }
                    if (baseRom.Status != null && baseRom.Status.ToLower() != "good")
                    {
                        sw.WriteItem("status", baseRom.Status);
                    }
                    sw.WriteEnd("/>");
                }
            }
        }