static void ProcessFile(String file, IDictionary <String, DefItem> dic) { if (file.IsNullOrEmpty() || !File.Exists(file)) { return; } var lines = File.ReadAllLines(file); foreach (var item in lines) { if (item.IsNullOrEmpty()) { continue; } var line = item.Trim(); if (line.StartsWith("#include")) { } else if (line.StartsWith("#define")) { line = line.Substring("#define".Length).Trim(); //Console.WriteLine(line); var di = DefItem.Parse(line); if (di != null) { dic[di.Name] = di; } } } // 执行表达式计算 foreach (var item in dic) { if (item.Value.IsInt) { continue; } Console.WriteLine(item.Value); if (item.Value.Execute(dic)) { Console.WriteLine(item.Value); } } var sb = new StringBuilder(); foreach (var item in dic) { var di = item.Value; if (!di.IsInt) { continue; } // 只要有Class的 if (di.Class.IsNullOrEmpty()) { continue; } //Console.WriteLine(item.Value); //File.AppendAllText(idc, item.Value + Environment.NewLine); sb.AppendFormat("\tMakeName\t(0x{0:X8}, \"{1}\"\r\n", di.IntValue, di.Name); if (!di.Comment.IsNullOrEmpty()) { sb.AppendFormat("\tMakeRptCmt\t(0x{0:X8}, \"{1}\"\r\n", di.IntValue, di.Comment); } if (!di.Class.IsNullOrEmpty()) { sb.AppendFormat("\tMakeStruct\t(0x{0:X8}, \"{1}\"\r\n", di.IntValue, di.Class); } } var idc = Path.ChangeExtension(file, ".idc"); File.WriteAllText(idc, sb.ToString()); }
public static DefItem Parse(String line) { var p = line.IndexOf(" "); if (p < 0) { p = line.IndexOf("\t"); } if (p <= 0) { return(null); } var di = new DefItem(); di.Name = line.Substring(0, p); // 必须是标准名称 if (!Regex.IsMatch(di.Name, "^\\w+$")) { return(null); } line = line.Substring(p).Trim(); // 分离注释,有两种 if (line.EndsWith("*/") || line.Contains("/*")) { p = line.IndexOf("/*"); if (p == 0) { return(null); } if (p < 0) { return(null); } di.Value = line.Substring(0, p).Trim(); di.Comment = line.Substring(p + 2).TrimEnd("*/").Trim(); } else if (line.Contains("//")) { p = line.IndexOf("//"); if (p == 0) { return(null); } if (p < 0) { return(null); } di.Value = line.Substring(0, p).Trim(); di.Comment = line.Substring(p + 2).Trim(); } else { di.Value = line; } di.Trim(); // 如果斜杠结尾,说明有几行,放弃 if (di.Value.EndsWith("\\")) { return(null); } di.ParseClass(); di.OriValue = di.Value; return(di); }