Exemple #1
0
        private static void WriteToStream(DatStreamWriter sw, DatHeader datHeader, bool newStyle)
        {
            sw.WriteLine("<?xml version=\"1.0\"?>");
            if (newStyle)
            {
                sw.WriteLine("<RVDatFile>", 1);
            }
            else
            {
                sw.WriteLine("<DatFile>", 1);
            }

            WriteHeader(sw, datHeader);

            writeBase(sw, datHeader.BaseDir, newStyle);

            if (newStyle)
            {
                sw.WriteLine("</RVDatFile>", -1);
            }
            else
            {
                sw.WriteLine("</DatFile>", -1);
            }
        }
Exemple #2
0
 public static void WriteDat(System.IO.Stream strOut, DatHeader datHeader, bool newStyle = false)
 {
     using (DatStreamWriter sw = new DatStreamWriter(strOut))
     {
         WriteToStream(sw, datHeader, newStyle);
     }
 }
Exemple #3
0
        public static void WriteDat(string strFilename, DatHeader datHeader, bool newStyle = false)
        {
            string dir = Path.GetDirectoryName(strFilename);

            if (!string.IsNullOrWhiteSpace(dir) && !Directory.Exists(dir))
            {
                System.IO.Directory.CreateDirectory(dir);
            }

            using (DatStreamWriter sw = new DatStreamWriter(strFilename))
            {
                sw.WriteLine("<?xml version=\"1.0\"?>");
                if (newStyle)
                {
                    sw.WriteLine("<RVDatFile>", 1);
                }
                else
                {
                    sw.WriteLine("<DatFile>", 1);
                }

                WriteHeader(sw, datHeader);

                writeBase(sw, datHeader.BaseDir, newStyle);

                if (newStyle)
                {
                    sw.WriteLine("</RVDatFile>", -1);
                }
                else
                {
                    sw.WriteLine("</DatFile>", -1);
                }
            }
        }
Exemple #4
0
 public static void WriteDat(System.IO.Stream strOut, DatHeader datHeader)
 {
     using (DatStreamWriter sw = new DatStreamWriter(strOut))
     {
         WriteToStream(sw, datHeader);
     }
 }
Exemple #5
0
        public static void WriteDat(string strFilename, DatHeader datHeader, bool newStyle = false)
        {
            string dir = Path.GetDirectoryName(strFilename);

            if (!string.IsNullOrWhiteSpace(dir) && !Directory.Exists(dir))
            {
                System.IO.Directory.CreateDirectory(dir);
            }

            using (DatStreamWriter sw = new DatStreamWriter(strFilename))
            {
                WriteToStream(sw, datHeader, newStyle);
            }
        }
Exemple #6
0
        private static void WriteToStream(DatStreamWriter sw, DatHeader datHeader)
        {
            sw.WriteLine("<?xml version=\"1.0\"?>");
            sw.WriteLine(
                @"<!DOCTYPE mame [
<!ELEMENT mame (machine+)>
	<!ATTLIST mame build CDATA #IMPLIED>
	<!ATTLIST mame debug (yes|no) ""no"">
	<!ELEMENT machine (description, year?, manufacturer?, biosset*, rom*, disk*, device_ref*, sample*, chip*, display*, sound?, input?, dipswitch*, configuration*, port*, adjuster*, driver?, feature*, device*, slot*, softwarelist*, ramoption*)>
		<!ATTLIST machine name CDATA #REQUIRED>
		<!ATTLIST machine isbios (yes|no) ""no"">
		<!ATTLIST machine isdevice (yes|no) ""no"">
		<!ATTLIST machine runnable (yes|no) ""yes"">
		<!ATTLIST machine cloneof CDATA #IMPLIED>
		<!ATTLIST machine romof CDATA #IMPLIED>
		<!ELEMENT description (#PCDATA)>
		<!ELEMENT year (#PCDATA)>
		<!ELEMENT manufacturer (#PCDATA)>
		<!ELEMENT rom EMPTY>
			<!ATTLIST rom name CDATA #REQUIRED>
			<!ATTLIST rom bios CDATA #IMPLIED>
			<!ATTLIST rom size CDATA #REQUIRED>
			<!ATTLIST rom crc CDATA #IMPLIED>
			<!ATTLIST rom sha1 CDATA #IMPLIED>
			<!ATTLIST rom merge CDATA #IMPLIED>
			<!ATTLIST rom region CDATA #IMPLIED>
			<!ATTLIST rom offset CDATA #IMPLIED>
			<!ATTLIST rom status (baddump|nodump|good) ""good"">
			<!ATTLIST rom optional (yes|no) ""no"">
		<!ELEMENT disk EMPTY>
			<!ATTLIST disk name CDATA #REQUIRED>
			<!ATTLIST disk sha1 CDATA #IMPLIED>
			<!ATTLIST disk merge CDATA #IMPLIED>
			<!ATTLIST disk region CDATA #IMPLIED>
			<!ATTLIST disk index CDATA #IMPLIED>
			<!ATTLIST disk writable (yes|no) ""no"">
			<!ATTLIST disk status (baddump|nodump|good) ""good"">
			<!ATTLIST disk optional (yes|no) ""no"">
		<!ELEMENT device_ref EMPTY>
			<!ATTLIST device_ref name CDATA #REQUIRED>
]>

");

            sw.WriteLine($@"<mame build=""{datHeader.Name}"">");

            writeBase(sw, datHeader.BaseDir);

            sw.WriteLine("</mame>", -1);
        }
Exemple #7
0
 private static void WriteHeader(DatStreamWriter sw, DatHeader datHeader)
 {
     sw.WriteLine("<header>", 1);
     sw.WriteNode("name", datHeader.Name);
     sw.WriteNode("rootdir", datHeader.RootDir);
     sw.WriteNode("header", datHeader.Header);
     sw.WriteNode("type", datHeader.Type);
     sw.WriteNode("description", datHeader.Description);
     sw.WriteNode("category", datHeader.Category);
     sw.WriteNode("version", datHeader.Version);
     sw.WriteNode("date", datHeader.Date);
     sw.WriteNode("author", datHeader.Author);
     sw.WriteNode("email", datHeader.Email);
     sw.WriteNode("homepage", datHeader.Homepage);
     sw.WriteNode("url", datHeader.URL);
     sw.WriteNode("comment", datHeader.Comment);
     sw.Write(@"<romvault");
     sw.WriteItem("forcepacking", datHeader.Compression);
     sw.WriteEnd(@"/>");
     sw.WriteLine("</header>", -1);
 }
Exemple #8
0
        private static void writeBase(DatStreamWriter sw, DatDir baseDirIn, bool newStyle)
        {
            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(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);
                        }
                        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);
                        //if (newStyle && !string.IsNullOrWhiteSpace(g.Comments))
                        //    sw.WriteNode("comments", g.Comments);
                        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);

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

                        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.DateModified != "1996/12/24 23:32:00")
                        {
                            sw.WriteItem("date", baseRom.DateModified);
                        }
                        sw.WriteEnd("/>");
                    }
                    else
                    {
                        if (baseRom.isDisk)
                        {
                            sw.Write(@"<disk");
                        }
                        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.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("/>");
                    }
                }
            }
        }
Exemple #9
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("/>");
                }
            }
        }