コード例 #1
0
ファイル: Program.cs プロジェクト: poizan42/ManagedNtApi
        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);
              }
        }