private static void PrintMenu() { Lint.MsgBanner("====== INTERACTIVE MENU ====="); Lint.MsgBanner(" A - {0} mod_assets loading (now {1})", (definitionParsing ? "disable" : "enable"), (definitionParsing ? "enabled" : "disabled")); Lint.MsgBanner(" R - {0} reports (now {1})", (reportsEnabled ? "disable" : "enable"), (reportsEnabled ? "enabled" : "disabled")); Lint.MsgBanner(" M - change analysis mode to {0} (now {1})", GetModeString(!deepAnalysis), GetModeString(deepAnalysis)); Lint.MsgBanner("Enter - run analysis"); Lint.MsgBanner("Q/Esc - quit"); }
private static void Exec() { Lint.MsgBanner("==============================================================================="); Lint.MsgBanner("ANALYSIS DONE AT: {0} - {1} - MODE = {2} - REPORTS = {3}", DateTime.Now.ToLongDateString(), DateTime.Now.ToLongTimeString(), GetModeString(deepAnalysis), reportsEnabled); Lint.MsgBanner("==============================================================================="); IDungeonReader reader = (deepAnalysis) ? new LuaDungeonReader() as IDungeonReader : new LineDungeonReader() as IDungeonReader; string dir = Path.GetDirectoryName(pathToDungeon); Assets assets = new Assets(); assets.LoadXml("Data\\assets.xml"); if (definitionParsing) { Lint.MsgProfileStart("init.lua", "Loading definitions from init.lua..."); DefinitionsLoader defs = new DefinitionsLoader(assets, dir); defs.LoadLuaAssets(); assets.CreateAssetsFromDefs(); Lint.MsgProfileEnd("init.lua", "Definitions loaded in"); } assets.LoadXml("Data\\mod_assets.xml"); Dungeon D = new Dungeon(dir); D.Assets = assets; Lint.MsgProfileStart("dungeon.lua", "Loading dungeon from dungeon.lua..."); reader.Load(D); Lint.MsgProfileEnd("dungeon.lua", "dungeon.lua loaded in"); foreach (Rule R in GetAllRules()) { string rulename = R.GetRuleName(); if (Config.IsRuleEnabled(rulename)) { Lint.MsgProfileStart(rulename, "Running {0}...", rulename); R.Run(D); Lint.MsgProfileEnd(rulename, rulename + " completed in"); } } if (reportsEnabled) { foreach (Report R in GetAllReports()) { string reportname = R.GetReportName(); Lint.MsgProfileStart(reportname, "Running {0}...", reportname); R.Process(D); Lint.MsgProfileEnd(reportname, reportname + " completed in"); } } }
static void RunMain(string[] args) { Lint.MsgBanner("GrimLint v1.1 - Static Analysis for GrimRock mods"); Lint.MsgBanner("Program by Marco Mastropaolo"); Config.LoadXml("Data\\config.xml"); foreach (string arg in args) { if (arg == "-c") { interactive = false; } else if (arg == "-d") { deepAnalysis = true; } else if (arg == "-a") { definitionParsing = false; } else if (arg == "-r") { reportsEnabled = true; } else if (arg == "-h" || arg == "-H" || arg == "--help" || arg == "-?" || arg == "/?") { ShowHelp(); return; } else { pathToDungeon = arg; } } if (pathToDungeon == null) { if (interactive) { OpenFileDialog ofd = new OpenFileDialog(); ofd.DefaultExt = "*.dungeon_editor"; ofd.Filter = "Dungeon Editor files|*.dungeon_editor"; if (ofd.ShowDialog() == DialogResult.OK) { pathToDungeon = ofd.FileName; } else { return; } } else { Lint.MsgErr("You must specify a dungeon filename"); return; } } if (!interactive) { Exec(); return; } while (true) { PrintMenu(); while (true) { ConsoleKeyInfo cki = Console.ReadKey(true); if (cki.KeyChar.ToString().ToUpper() == "Q" || cki.Key == ConsoleKey.Escape) { return; } else if (cki.KeyChar.ToString().ToUpper() == "M") { deepAnalysis = !deepAnalysis; break; } else if (cki.KeyChar.ToString().ToUpper() == "A") { definitionParsing = !definitionParsing; break; } else if (cki.KeyChar.ToString().ToUpper() == "R") { reportsEnabled = !reportsEnabled; break; } else if (cki.Key == ConsoleKey.Spacebar || cki.Key == ConsoleKey.Enter) { Exec(); break; } } } }