Пример #1
0
        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());
        }
Пример #2
0
            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);
            }