static void compile(string src) { var output = Path.ChangeExtension(src, ".exe"); if (File.Exists(output)) return; Console.WriteLine(); var s = DateTime.Now; Console.WriteLine("パースしています..."); var root = new Root(); readDir(root, "lib-Core"); //readDir(root, "lib-System"); parse(root, src); Console.WriteLine("コンパイルしています..."); var module = new Girl.PE.Module(); module.Specific.SubSystem = Girl.PE.IMAGE_SUBSYSTEM.WINDOWS_CUI; var codes = OpModule.Create(module); root.AddCodes(codes); module.Text.OpCodes = codes.ToArray(); Console.WriteLine("リンクしています..."); module.Link(output); Console.WriteLine("出力しました: {0}", output); var e = DateTime.Now; Console.WriteLine("所要時間: {0}", e - s); }
static void readDir(Root root, string dir) { var dirs = new List<string>(Directory.GetDirectories(dir)); dirs.Sort(Compare); for (int i = 0; i < dirs.Count; i++) readDir(root, dirs[i]); var files = new List<string>(Directory.GetFiles(dir)); files.Sort(Compare); for (int i = 0; i < files.Count; i++) { var file = files[i]; if (Path.GetExtension(file).ToLower() == ".adm") parse(root, file); } }
static void parse(Root root, string src) { var src2 = src.Replace("\\", "/"); //Console.WriteLine("パースしています: {0}", src2); using (var sr = new StreamReader(src)) root.ReadText(src2, sr.ReadToEnd()); }