BSPGenerationTools.StartupFileGenerator.InterruptVectorTable.Save C# (CSharp) Метод

Save() приватный Метод

private Save ( string fn ) : void
fn string
Результат void
            internal void Save(string fn)
            {
                Directory.CreateDirectory(Path.GetDirectoryName(fn));
                using (var sw = File.CreateText(fn))
                {
                    if (Vectors[0].Name != "_estack" || Vectors[1].Name != "Reset_Handler")
                        throw new Exception("Unexpected vector table layout");

                    var templateLines = File.ReadAllLines("StartupFileTemplate.c");
                    for (int l = 0; l < templateLines.Length; l++ )
                    {
                        var line = templateLines[l];
                        if (line.Contains("$$EXTRA_RESET_HANDLER_CODE$$"))
                        {
                            if (AdditionalResetHandlerLines != null)
                                foreach (var l2 in AdditionalResetHandlerLines)
                                    sw.WriteLine(line.Replace("$$EXTRA_RESET_HANDLER_CODE$$", l2));
                        }
                        else if (line.Contains("$$VECTOR$$"))
                        {
                            List<string> lines = new List<string>();
                            int extraLines = 0;
                            int idx = line.IndexOf("$@+");
                            if (idx != -1)
                            {
                                extraLines = int.Parse(line.Substring(idx + 3));
                                line = line.Substring(0, idx);
                            }

                            for (int i = 2; i < Vectors.Length; i++)
                            {
                                if (Vectors[i] != null && Vectors[i].SpecialVectorValue == null)
                                {
                                    lines.Add(line.Replace("$$VECTOR$$", Vectors[i].Name));
                                    for (int j = 1; j <= extraLines; j++)
                                        lines.Add(templateLines[l + j].Replace("$$VECTOR$$", Vectors[i].Name));
                                }
                            }

                            if (line.Contains("$$ALIGN_SPACE_OFFSET$$"))
                                lines = AlignSpaceOffset(lines);

                            foreach (var l2 in lines)
                                sw.WriteLine(l2);

                            l += extraLines;
                        }
                        else if (line.Contains("$$VECTOR_TABLE_SIZE$$"))
                        {
                            sw.WriteLine(line.Replace("$$VECTOR_TABLE_SIZE$$", string.Format("0x{0:x}", Vectors.Length)));
                        }
                        else if (line.Contains("$$VECTOR_POINTER$$"))
                        {
                            for (int i = 2; i < Vectors.Length; i++)
                            {
                                if (Vectors[i] == null)
                                    sw.WriteLine(line.Replace("$$VECTOR_POINTER$$", "NULL"));
                                else if (Vectors[i].SpecialVectorValue == null)
                                    sw.WriteLine(line.Replace("$$VECTOR_POINTER$$", "&" + Vectors[i].Name));
                                else
                                    sw.WriteLine(line.Replace("$$VECTOR_POINTER$$", "(void *)" + Vectors[i].SpecialVectorValue + " /* " + Vectors[i].Name + " */"));
                            }
                        }
                        else
                            sw.WriteLine(line);
                    }
                }
            }
StartupFileGenerator.InterruptVectorTable