Atmel_bsp_generator.Program.ParseStartupFiles C# (CSharp) Метод

ParseStartupFiles() статический приватный Метод

static private ParseStartupFiles ( string startupFileName, MCUFamilyBuilder fam ) : IEnumerable
startupFileName string
fam MCUFamilyBuilder
Результат IEnumerable
        static IEnumerable<StartupFileGenerator.InterruptVectorTable> ParseStartupFiles(string startupFileName, MCUFamilyBuilder fam)
        {
            string aStartNewName;
                string strPrefFam;
            if (fam.Definition.Name.StartsWith("AT"))
                strPrefFam = fam.Definition.Name.Substring(2, fam.Definition.Name.Length - 2);
            else
                strPrefFam = fam.Definition.Name;
            if(strPrefFam != "SAMG51")
                strPrefFam = strPrefFam.Substring(0, strPrefFam.Length - 1);

            if (strPrefFam == "SAM4cm3")
                strPrefFam = strPrefFam.Substring(0, strPrefFam.Length - 1);

            foreach (var fl in Directory.GetFiles(Path.GetDirectoryName(startupFileName), strPrefFam + "*.h", SearchOption.AllDirectories/* TopDirectoryOnly*/))
            {
                if (fl.Contains("\\pio\\"))
                    continue;
                string aNameFl = fl.Substring(fl.LastIndexOf("\\")+1, fl.Length - fl.LastIndexOf("\\")-1);
                if (Path.GetFileNameWithoutExtension(aNameFl).ToUpper() == strPrefFam.ToUpper())
                    continue;
                if (aNameFl.EndsWith("_1.h"))
                    continue;
                if (aNameFl.EndsWith("_0.h"))
                    aNameFl = aNameFl.Replace("_0.h", ".h");

                 aStartNewName = "startup_" + aNameFl;

                List<StartupFileGenerator.InterruptVector[]> list = new List<StartupFileGenerator.InterruptVector[]>();
                list.Add(StartupFileGenerator.ParseInterruptVectors(fl,
                         @"^typedef struct _DeviceVectors.*",
                         @"} DeviceVectors;.*",
                         @"[ \t]+void\*[ ]+([\w]+).*",
                         @"([^ \t,]+)[,]?.*",
                         @"^[ \t]*[/{]+.*",
                         null,
                         1,
                         2));
                List<StartupFileGenerator.InterruptVector> vectors = new List<StartupFileGenerator.InterruptVector>(list[0]);
                list.RemoveAt(0);

                //Fix the vector names from comments
                for (int i = 0; i < vectors.Count; i++)
                {
                    if (vectors[i] == null)
                        continue;

                    if (i == 0)
                    {
                        vectors[i].Name = "_estack";
                        continue;
                    }
                    else if (i == 1)
                    {
                        vectors[i].Name = "Reset_Handler";
                        continue;
                    }
                    else if (vectors[i].Name.StartsWith("pvReserved"))
                    {
                        vectors[i] = null;
                        continue;
                    }
                    else
                    {
                        if (vectors[i] == null)
                            continue;

                        if (!vectors[i].Name.StartsWith("pfn"))
                            throw new Exception("no pfn Func Startup Header");

                        vectors[i].Name = vectors[i].Name.Substring(3, vectors[i].Name.Length - 3);
                    }

                }
                yield return new StartupFileGenerator.InterruptVectorTable
                {
                    FileName = Path.ChangeExtension(Path.GetFileName(aStartNewName), ".c"),
                    MatchPredicate = m =>(Path.GetFileNameWithoutExtension(aNameFl).ToUpper() == m.Name.Substring(2).ToUpper()),
                    Vectors = vectors.ToArray()
                };
            }
        }