Example #1
0
        private bool LoadEmulator(DatFileLoader dfl)
        {
            dfl.Gn();
            if (dfl.Next != "(")
            {
                _errorReport?.Invoke(dfl.Filename, "( not found after emulator, on line " + dfl.LineNumber);
                return(false);
            }

            dfl.Gn();
            while (dfl.Next != ")")
            {
                switch (dfl.Next.ToLower())
                {
                case "name":
                    dfl.GnRest();
                    break;

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

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

                default:
                    _errorReport?.Invoke(dfl.Filename, "Error: key word '" + dfl.Next + "' not known in emulator, on line " + dfl.LineNumber);
                    break;
                }
                dfl.Gn();
            }
            return(true);
        }
Example #2
0
        private bool LoadDirFromDat(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();
            if (dfl.Next.ToLower() != "name")
            {
                _errorReport?.Invoke(dfl.Filename, "Name not found as first object in ( ), on line " + dfl.LineNumber);
                return(false);
            }
            DatDir dir = new DatDir(DatFileType.UnSet)
            {
                Name = dfl.GnRest()
            };

            dfl.Gn();
            parentDir.ChildAdd(dir);

            while (dfl.Next != ")")
            {
                bool res = ReadNextBlock(dfl, dir);
                if (!res)
                {
                    return(false);
                }
            }
            return(true);
        }
Example #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);
        }
Example #4
0
        private bool ReadNextBlock(DatFileLoader dfl, DatDir parentDir)
        {
            switch (dfl.Next.ToLower())
            {
            case "dir":
                if (!LoadDirFromDat(dfl, parentDir))
                {
                    return(false);
                }
                break;

            case "game":
            case "machine":
                if (!LoadGameFromDat(dfl, parentDir))
                {
                    return(false);
                }
                break;

            case "resource":
                if (!LoadGameFromDat(dfl, parentDir))
                {
                    return(false);
                }
                break;

            case "emulator":
                if (!LoadEmulator(dfl))
                {
                    return(false);
                }
                break;

            case "#":     // comments

                dfl.GnRest();
                break;

            default:
                _errorReport?.Invoke(dfl.Filename, "Error Keyword " + dfl.Next + " not know in dir, on line " + dfl.LineNumber);
                break;
            }
            dfl.Gn();
            return(true);
        }
Example #5
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);
        }
Example #6
0
        private bool LoadHeaderFromDat(DatFileLoader dfl, DatHeader datHeader)
        {
            dfl.Gn();
            if (dfl.Next != "(")
            {
                _errorReport?.Invoke(dfl.Filename, "( not found after clrmamepro, on line " + dfl.LineNumber);
                return(false);
            }
            dfl.Gn();

            datHeader.Filename = _filename;

            while (dfl.Next != ")")
            {
                switch (dfl.Next.ToLower())
                {
                case "name":
                    datHeader.Name = dfl.GnRest();
                    break;

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

                case "category":
                    datHeader.Category = dfl.GnRest();
                    break;

                case "version":
                    datHeader.Version = dfl.GnRest();
                    break;

                case "date":
                    datHeader.Date = dfl.GnRest();
                    break;

                case "author":
                    datHeader.Author = dfl.GnRest();
                    break;

                case "email":
                    datHeader.Email = dfl.GnRest();
                    break;

                case "homepage":
                    datHeader.Homepage = dfl.GnRest();
                    break;

                case "url":
                    datHeader.URL = dfl.GnRest();
                    break;

                case "comment":
                    datHeader.Comment = dfl.GnRest();
                    break;

                case "header":
                    datHeader.Header = dfl.GnRest();
                    break;

                case "forcezipping":
                    datHeader.Compression = dfl.GnRest();
                    break;

                case "forcepacking":
                    datHeader.Compression = dfl.GnRest();
                    break;     // incorrect usage

                case "forcemerging":
                    datHeader.MergeType = dfl.GnRest();
                    break;

                case "forcenodump":
                    datHeader.NoDump = dfl.GnRest();
                    break;

                case "dir":
                    datHeader.Dir = dfl.GnRest();
                    break;

                default:
                    _errorReport?.Invoke(dfl.Filename, "Error: key word '" + dfl.Next + "' not known in clrmamepro, on line " + dfl.LineNumber);
                    break;
                }
                dfl.Gn();
            }

            return(true);
        }
Example #7
0
        private bool LoadHeaderFromDat(DatFileLoader dfl, DatHeader datHeader)
        {
            if (dfl.Next != "(")
            {
                _errorReport?.Invoke(dfl.Filename, "( not found after DOSCenter, on line " + dfl.LineNumber);
                return(false);
            }
            dfl.Gn();

            datHeader.Filename = _filename;

            while (dfl.Next != ")")
            {
                string nextstr = dfl.Next.ToLower();
                if ((nextstr.Length > 5) && (nextstr.Substring(0, 5) == "name:"))  // this is needed as there is no space after 'name:'
                {
                    datHeader.Name = (dfl.Next.Substring(5) + " " + dfl.GnRest()).Trim();
                    dfl.Gn();
                }
                else
                {
                    switch (nextstr)
                    {
                    case "name":
                    case "name:":
                        datHeader.Name = dfl.GnRest();
                        dfl.Gn();
                        break;

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

                    case "version":
                    case "version:":
                        datHeader.Version = dfl.GnRest();
                        dfl.Gn();
                        break;

                    case "date":
                    case "date:":
                        datHeader.Date = dfl.GnRest();
                        dfl.Gn();
                        break;

                    case "author":
                    case "author:":
                        datHeader.Author = dfl.GnRest();
                        dfl.Gn();
                        break;

                    case "homepage":
                    case "homepage:":
                        datHeader.Homepage = dfl.GnRest();
                        dfl.Gn();
                        break;

                    case "comment":
                    case "comment:":
                        datHeader.Comment = dfl.GnRest();
                        dfl.Gn();
                        break;

                    default:
                        _errorReport?.Invoke(dfl.Filename, "Error: key word '" + dfl.Next + "' not known in DOSReader, on line " + dfl.LineNumber);
                        dfl.Gn();
                        break;
                    }
                }
            }
            return(true);
        }
Example #8
0
        private static bool LoadGameFromDat(DatFileLoader dfl, DatDir parentDir, ReportError errorReport)
        {
            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();
            int    nameLength = name.Length;

            if (nameLength > 4 && name.ToLower().Substring(nameLength - 4, 4) == ".zip")
            {
                name = name.Substring(0, nameLength - 4);
            }

            dfl.Gn();

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

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

                case "rom":
                    dfl.Gn();
                    if (!LoadFileFromDat(dfl, dDir, errorReport))
                    {
                        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);
        }