Ejemplo n.º 1
0
        private static string processArgs()
        {
            int    patched = 0;
            string ret     = " ";

            switch (args[1])
            {
            case "e":
            case "-e":
            case "/e":
                for (int i = 0; i < settings.Count; i++)
                {
                    if (doPatch(settings[i][1], settings[i][2], settings[i][3], settings[i][4]))
                    {
                        patched++;
                    }
                    else if (isconsole == 2)
                    {
                        Console.WriteLine(settings[i][0] + " patch failed. (Nothing written.)");
                    }
                }
                break;

            case "x":
            case "-x":
            case "/x":
                if (args.Length != 6)
                {
                    goto default;
                }
                if (doPatch(args[2], args[3], args[4], args[5]))
                {
                    return("All done. " + args[2] + " successfully patched.\n");
                }
                break;

            case "r":
            case "-r":
            case "/r":
                for (int i = 0; i < settings.Count; i++)
                {
                    restore(settings[i][1]);
                }
                break;

            case "m":
            case "-m":
            case "/m":
                if (args.Length != 5)
                {
                    goto default;
                }
                if (!File.Exists(args[3]) || !File.Exists(args[4]))
                {
                    break;
                }
                if ((new FileInfo(args[3])).Length != (new FileInfo(args[4])).Length)
                {
                    if (isconsole == 2)
                    {
                        Console.WriteLine("Not equal size!");
                    }
                    break;
                }
                Spinner.Start();
                byte[] bytes1 = File.ReadAllBytes(args[3]);
                byte[] bytes2 = File.ReadAllBytes(args[4]);
                if (args[2].Length > gz.Length && args[2].Substring(args[2].Length - gz.Length) == gz)
                {
                    CompressINI(args[2], Patcher.Format4Ini(Patcher.FindDiffs(ref bytes1, ref bytes2), args[3], "Patch"));
                }
                else
                {
                    File.WriteAllText(args[2], Patcher.Format4Ini(Patcher.FindDiffs(ref bytes1, ref bytes2), args[3], "Patch"));
                }
                Spinner.Stop();
                ret = args[2] + " written.\n";
                break;

            default:
                return("Command line options:\n\n" +
                       iam + " [e [ini_file]]\n" +
                       "\tRun all patches specified in the inifile.\n\n" +
                       iam + " [x file search_pattern offset replace_pattern]\n" +
                       "\tRun patch given by arguments.\n\n" +
                       iam + " [r [ini_file]]\n" +
                       "\tRestore all files mentioned in inifile from their backups.\n\n" +
                       iam + " [m out_ini_file[" + gz + "] original_file changed_file]\n" +
                       "\tTry to create a pattern based patch for original_file. (Don't get your hopes up.)\n");
            }
            if (patched > 0)
            {
                ret = "All done. " + patched.ToString() + " patches executed.\n";
            }
            return(ret);
        }