-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
74 lines (64 loc) · 1.54 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.Linq;
using System.IO;
using Mono.Options;
using System.Collections.Generic;
namespace patchiron
{
class MainClass
{
enum Action
{
Patch,
Help,
}
public static void Main (string [] args)
{
Action action = Action.Patch;
var os = new OptionSet ()
{
{ "h|?|help", "Displays the help", v => action = Action.Help },
};
var bits = os.Parse (args);
if (bits.Count != 1 || action == Action.Help)
ShowHelp (os);
if (!File.Exists (bits[0]))
Die ($"Unable to find file {bits[0]}");
var lines = File.ReadAllLines (bits [0]);
PatchParser parser = new PatchParser (lines);
Patch patch = parser.Parse ();
Process (patch);
patch.Print ();
}
static void Process (Patch patch)
{
var toRemove = new List<PatchPart>();
foreach (var part in patch.Parts)
{
var conversion = new Conversion();
foreach (var chunk in part.Chunks.ToList ())
{
conversion.ProcessChunk (chunk, part.FileName!);
}
conversion.ProcessPart (part);
if (conversion.ShouldDrop) {
toRemove.Add (part);
}
}
toRemove.ForEach(p => patch.Parts.Remove(p));
}
static void ShowHelp (OptionSet os)
{
Console.WriteLine ("Usage: patch-iron [options] start-patch");
Console.WriteLine ("ProcessDiff will need to be modified to do something useful");
os.WriteOptionDescriptions (Console.Out);
Die ();
}
public static void Die (string? message = null)
{
if (message != null)
Console.Error.WriteLine (message);
System.Environment.Exit (1);
}
}
}