Example #1
0
		public static List<Program> GetPrograms(string iniFileName)
		{
			var ini = new Ini(iniFileName);
			var sections = ini.GetSections();
			var programs = new List<Program>();
			foreach (var section in sections)
			{
				var program = new Program();
				program.FileName = section;
				program.FileProductName = ini.GetValue(section, "Name") ?? "";
				var hmString = ini.GetValue(section, "HookMask");
				int hookMask;
				// If hook mask is hexadecimal then....
				bool success = hmString.StartsWith("0x")
					? int.TryParse(hmString.Substring(2), System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture.NumberFormat, out hookMask)
					: int.TryParse(hmString, out hookMask);
				if (success)
				{
					program.HookMask = hookMask;
					programs.Add(program);
				}
			}
			return programs;
		}
		void LoadProgramsFromLocalGdbFile()
		{
			var path = GameDatabaseManager.Current.GdbFile.FullName;
			var ini = new Ini(path);
			var sections = ini.GetSections();
			foreach (var section in sections)
			{
				var program = SettingManager.Programs.Items.FirstOrDefault(x => x.FileName.ToLower() == section.ToLower());
				if (program == null)
				{
					program = new Engine.Data.Program();
					program.FileName = section;
					program.HookMask = 0x00000002;
					program.XInputMask = 0x00000004;
					SettingManager.Programs.Items.Add(program);
				}
				program.FileProductName = ini.GetValue(section, "Name", section);
				int hookMask;
				var hookMaskValue = ini.GetValue(section, "HookMask", "0x00000002");
				if (int.TryParse(hookMaskValue, out hookMask))
				{
					program.HookMask = hookMask;
				}
			}
		}
Example #3
0
        public void SetPrograms(IEnumerable <Program> programs, IEnumerable <Game> games)
        {
            // Clean file. INI files support only UTF16-little endian format.
            var file = new System.IO.FileInfo(GdbFile.FullName);

            if (!file.Directory.Exists)
            {
                file.Directory.Create();
            }
            System.IO.File.WriteAllText(GdbFile.FullName, "", Encoding.Unicode);
            var ini = new Ini(GdbFile.FullName);
            // Get unique section names.
            var names     = programs.Select(x => x.FileName.ToLower()).ToList();
            var gameNames = games.Select(x => x.FileName.ToLower()).ToList();

            names.AddRange(gameNames);
            names = names.Distinct().OrderBy(x => x).ToList();
            // Write INI
            foreach (var name in names)
            {
                string section     = "";
                string productName = "";
                string hookMask    = "";
                string fakeVid     = null;
                string fakePid     = null;
                string dinputMask  = null;
                string dinputFile  = null;
                string timeout     = null;
                var    program     = programs.FirstOrDefault(x => x.FileName.ToLower() == name);
                var    game        = games.FirstOrDefault(x => x.FileName.ToLower() == name);
                if (game != null)
                {
                    section     = game.FileName;
                    productName = game.FileProductName;
                    hookMask    = string.Format("0x{0:X8}", game.HookMask);
                    if (game.DInputMask > 0)
                    {
                        dinputMask = string.Format("0x{0:X8}", game.DInputMask);
                    }
                    if (!string.IsNullOrEmpty(game.DInputFile))
                    {
                        dinputFile = game.DInputFile;
                    }
                    if (game.FakeVID > 0)
                    {
                        fakeVid = string.Format("0x{0:X4}", game.FakeVID);
                    }
                    if (game.FakePID > 0)
                    {
                        fakePid = string.Format("0x{0:X4}", game.FakePID);
                    }
                    if (game.Timeout >= 0)
                    {
                        timeout = game.Timeout.ToString();
                    }
                }
                // Use default settings as an alternative.
                else if (program != null)
                {
                    section     = program.FileName;
                    productName = program.FileProductName;
                    hookMask    = string.Format("0x{0:X8}", program.HookMask);
                    if (program.DInputMask > 0)
                    {
                        dinputMask = string.Format("0x{0:X8}", program.DInputMask);
                    }
                    if (!string.IsNullOrEmpty(program.DInputFile))
                    {
                        dinputFile = program.DInputFile;
                    }
                    if (program.FakeVID > 0)
                    {
                        fakeVid = string.Format("0x{0:X4}", program.FakeVID);
                    }
                    if (program.FakePID > 0)
                    {
                        fakePid = string.Format("0x{0:X4}", program.FakePID);
                    }
                    if (program.Timeout >= 0)
                    {
                        timeout = program.Timeout.ToString();
                    }
                }
                ini.SetValue(section, "Name", productName);
                ini.SetValue(section, "HookMask", hookMask);
                ini.SetValue(section, "DinputMask", dinputMask);
                ini.SetValue(section, "DinputFile", dinputFile);
                ini.SetValue(section, "FakeVID", fakeVid);
                ini.SetValue(section, "FakePID", fakePid);
                ini.SetValue(section, "Timeout", timeout);
            }
            Refresh();
            var hash    = string.Join("", Checksum.ToByteArray().Select(x => x.ToString("X2")));
            var md5line = string.Format("{0} *{1}", hash, GdbFile.Name);

            System.IO.File.WriteAllText(Md5File.FullName, md5line);
        }
Example #4
0
		public void SetPrograms(IEnumerable<Program> programs, IEnumerable<Game> games)
		{
			// Clean file. INI files support only UTF16-little endian format.
			var file = new System.IO.FileInfo(GdbFile.FullName);
			if (!file.Directory.Exists) file.Directory.Create();
			System.IO.File.WriteAllText(GdbFile.FullName, "", Encoding.Unicode);
			var ini = new Ini(GdbFile.FullName);
			// Get unique section names.
			var names = programs.Select(x => x.FileName.ToLower()).ToList();
			var gameNames = games.Select(x => x.FileName.ToLower()).ToList();
			names.AddRange(gameNames);
			names = names.Distinct().OrderBy(x => x).ToList();
			// Write INI
			foreach (var name in names)
			{
				string section = "";
				string productName = "";
				string hookMask = "";
				string fakeVid = null;
				string fakePid = null;
				string dinputMask = null;
				string dinputFile = null;
				string timeout = null;
				var program = programs.FirstOrDefault(x => x.FileName.ToLower() == name);
				var game = games.FirstOrDefault(x => x.FileName.ToLower() == name);
				if (game != null)
				{
					section = game.FileName;
					productName = game.FileProductName;
					hookMask = string.Format("0x{0:X8}", game.HookMask);
					if (game.DInputMask > 0) dinputMask = string.Format("0x{0:X8}", game.DInputMask);
					if (!string.IsNullOrEmpty(game.DInputFile)) dinputFile = game.DInputFile;
					if (game.FakeVID > 0) fakeVid = string.Format("0x{0:X4}", game.FakeVID);
					if (game.FakePID > 0) fakePid = string.Format("0x{0:X4}", game.FakePID);
					if (game.Timeout >= 0) timeout = game.Timeout.ToString();
				}
				// Use default settings as an alternative.
				else if (program != null)
				{
					section = program.FileName;
					productName = program.FileProductName;
					hookMask = string.Format("0x{0:X8}", program.HookMask);
					if (program.DInputMask > 0) dinputMask = string.Format("0x{0:X8}", program.DInputMask);
					if (!string.IsNullOrEmpty(program.DInputFile)) dinputFile = program.DInputFile;
					if (program.FakeVID > 0) fakeVid = string.Format("0x{0:X4}", program.FakeVID);
					if (program.FakePID > 0) fakePid = string.Format("0x{0:X4}", program.FakePID);
					if (program.Timeout >= 0) timeout = program.Timeout.ToString();
				}
				ini.SetValue(section, "Name", productName);
				ini.SetValue(section, "HookMask", hookMask);
				ini.SetValue(section, "DinputMask", dinputMask);
				ini.SetValue(section, "DinputFile", dinputFile);
				ini.SetValue(section, "FakeVID", fakeVid);
				ini.SetValue(section, "FakePID", fakePid);
				ini.SetValue(section, "Timeout", timeout);
			}
			Refresh();
			var hash = string.Join("", Checksum.ToByteArray().Select(x => x.ToString("X2")));
			var md5line = string.Format("{0} *{1}", hash, GdbFile.Name);
			System.IO.File.WriteAllText(Md5File.FullName, md5line);
		}