static void Main(string[] args) { //Console.ReadLine(); try { var argumentOptions = new HashSet<string>(new string[] { "-out" }); Dictionary<string, string> options; List<string> positional; ParseArgs(args, argumentOptions, out options, out positional); string sourceFile = positional[0]; bool is64Bit = options.ContainsKey("-64"); TextWriter outWriter; string outFile; var version = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location); Console.WriteLine("StructFlattener v. " + version.ProductVersion); Console.WriteLine("Input file: {0}, source files: {1}", sourceFile, String.Join(", ", positional.Skip(1))); if (options.TryGetValue("-out", out outFile)) { DateTime thisTime = File.GetLastWriteTimeUtc(Assembly.GetExecutingAssembly().Location); DateTime dstTime = DateTime.MinValue; if (File.Exists(outFile)) dstTime = File.GetLastWriteTimeUtc(outFile); DateTime srcTime = File.GetLastWriteTimeUtc(sourceFile); if (dstTime >= srcTime && dstTime >= thisTime && !options.ContainsKey("-force")) { Console.WriteLine("File already up to date (use -force to override)"); return; } outWriter = new StreamWriter(outFile, false); } else outWriter = Console.Out; Flattener flattener = new Flattener(sourceFile, is64Bit); for (int i = 1; i < positional.Count; i++) flattener.AddFile(positional[i]); string code = flattener.FlattenStructsInFile(); outWriter.WriteLine("// Generated by StructFlattener v. " + version.ProductVersion); outWriter.WriteLine("// Based on " + sourceFile); outWriter.WriteLine("// Commandline: " + Environment.CommandLine); outWriter.WriteLine("// CHANGES TO THIS FILE WILL BE LOST. Modify the input file, or improve StructFlattener if necessary. "); outWriter.WriteLine(is64Bit ? "#if X64" : "#if X86"); outWriter.WriteLine(code); outWriter.WriteLine("#endif"); outWriter.Flush(); } catch (Exception e) { Console.WriteLine(e); } }