Esempio n. 1
0
        public static Watch FromString(string line, IMemoryDomains domains)
        {
            try
            {
                var parts = line.Split(new[] { '\t' }, 6);

                if (parts.Length < 6)
                {
                    if (parts.Length >= 3 && parts[2] == "_")
                    {
                        return(SeparatorWatch.Instance);
                    }

                    return(null);
                }

                var address   = long.Parse(parts[0], NumberStyles.HexNumber);
                var size      = Watch.SizeFromChar(parts[1][0]);
                var type      = Watch.DisplayTypeFromChar(parts[2][0]);
                var bigEndian = parts[3] == "0" ? false : true;
                var domain    = domains[parts[4]];
                var notes     = parts[5].Trim(new[] { '\r', '\n' });

                return(Watch.GenerateWatch(
                           domain,
                           address,
                           size,
                           type,
                           notes,
                           bigEndian
                           ));
            }
            catch
            {
                return(null);
            }
        }
Esempio n. 2
0
        public bool Load(string path, bool append)
        {
            var file = new FileInfo(path);

            if (file.Exists == false)
            {
                return(false);
            }

            if (!append)
            {
                _currentFileName = path;
            }

            using (var sr = file.OpenText())
            {
                if (!append)
                {
                    Clear();
                }

                string s;
                while ((s = sr.ReadLine()) != null)
                {
                    try
                    {
                        if (s == "----")
                        {
                            _cheatList.Add(Cheat.Separator);
                        }
                        else
                        {
                            int?compare;
                            var size      = WatchSize.Byte;
                            var type      = DisplayType.Hex;
                            var bigendian = false;
                            Cheat.CompareType comparisonType = Cheat.CompareType.None;

                            if (s.Length < 6)
                            {
                                continue;
                            }

                            var vals    = s.Split('\t');
                            var address = int.Parse(vals[0], NumberStyles.HexNumber);
                            var value   = int.Parse(vals[1], NumberStyles.HexNumber);

                            if (vals[2] == "N")
                            {
                                compare = null;
                            }
                            else
                            {
                                compare = int.Parse(vals[2], NumberStyles.HexNumber);
                            }

                            var domain  = Global.Emulator.AsMemoryDomains()[vals[3]];
                            var enabled = vals[4] == "1";
                            var name    = vals[5];

                            // For backwards compatibility, don't assume these values exist
                            if (vals.Length > 6)
                            {
                                size      = Watch.SizeFromChar(vals[6][0]);
                                type      = Watch.DisplayTypeFromChar(vals[7][0]);
                                bigendian = vals[8] == "1";
                            }

                            // For backwards compatibility, don't assume these values exist
                            if (vals.Length > 9)
                            {
                                if (!Enum.TryParse <Cheat.CompareType>(vals[9], out comparisonType))
                                {
                                    continue;                                     // Not sure if this is the best answer, could just resort to ==
                                }
                            }

                            var watch = Watch.GenerateWatch(
                                domain,
                                address,
                                size,
                                type,
                                bigendian,
                                name);

                            Add(new Cheat(watch, value, compare, !Global.Config.DisableCheatsOnLoad && enabled, comparisonType));
                        }
                    }
                    catch
                    {
                        continue;
                    }
                }
            }

            Changes = false;
            return(true);
        }