private string FindZoneFromLine(int LineIndex) { string zone = ""; while (LineIndex >= 0) { int globalLineIndex = -1; if (MainForm.ParserASM.ASMFileInfo.FindGlobalLineIndex(LineIndex, DocumentInfo.FullPath, out globalLineIndex)) { if (MainForm.ParserASM.ASMFileInfo.LineInfo.ContainsKey(globalLineIndex)) { Types.ASM.LineInfo lineInfo = MainForm.ParserASM.ASMFileInfo.LineInfo[globalLineIndex]; zone = lineInfo.Zone; break; } } --LineIndex; } return(zone); }
internal void InsertLines(int GlobalLineIndex, int LocalLineIndex, int LineCount) { // move all infos/symbols below down List <Tupel <int, int> > lineAddressesToMove = new List <Tupel <int, int> >(); foreach (var entry in AddressToLine) { if (entry.Value >= GlobalLineIndex) { lineAddressesToMove.Add(new Tupel <int, int>(entry.Key, entry.Value)); } } foreach (var entry in lineAddressesToMove) { AddressToLine.Remove(entry.first); } foreach (var entry in lineAddressesToMove) { AddressToLine.Add(entry.first, entry.second + LineCount); } foreach (var bank in Banks) { if (bank.StartLine >= GlobalLineIndex) { bank.StartLine += LineCount; } } foreach (var label in Labels) { if (label.Value.LineIndex >= GlobalLineIndex) { label.Value.LineIndex += LineCount; label.Value.LocalLineIndex += LineCount; } } List <LineInfo> linesToMove = new List <ASM.LineInfo>(); foreach (var line in LineInfo) { if (line.Key >= GlobalLineIndex) { linesToMove.Add(line.Value); line.Value.LineIndex += LineCount; } } foreach (var lineToMove in linesToMove) { LineInfo.Remove(lineToMove.LineIndex - LineCount); } foreach (var lineToMove in linesToMove) { LineInfo.Add(lineToMove.LineIndex, lineToMove); } // insert new lines for (int i = 0; i < LineCount; ++i) { if ((!LineInfo.ContainsKey(LocalLineIndex + i)) && (LineInfo.ContainsKey(LocalLineIndex - 1))) { var info = new LineInfo() { AddressStart = LineInfo[LocalLineIndex - 1].AddressStart }; info.LineIndex = LocalLineIndex + i; LineInfo.Add(LocalLineIndex + i, info); } } List <SourceInfo> sourceInfosToMove = new List <ASM.SourceInfo>(); foreach (var sourceInfo in SourceInfo) { // Grow or move if ((sourceInfo.Value.GlobalStartLine < GlobalLineIndex) && (sourceInfo.Value.GlobalStartLine + sourceInfo.Value.LineCount >= GlobalLineIndex + LineCount)) { sourceInfo.Value.LineCount += LineCount; } if (sourceInfo.Value.GlobalStartLine >= GlobalLineIndex) { sourceInfosToMove.Add(sourceInfo.Value); } } foreach (var sourceInfoToMove in sourceInfosToMove) { SourceInfo.Remove(sourceInfoToMove.GlobalStartLine); } foreach (var sourceInfoToMove in sourceInfosToMove) { sourceInfoToMove.GlobalStartLine += LineCount; sourceInfoToMove.LocalStartLine += LineCount; SourceInfo.Add(sourceInfoToMove.GlobalStartLine, sourceInfoToMove); } foreach (var tempLabel in TempLabelInfo) { if (tempLabel.LineIndex >= GlobalLineIndex) { tempLabel.LineIndex += LineCount; } } foreach (var unparsedLabel in UnparsedLabels) { if (unparsedLabel.Value.LineIndex >= GlobalLineIndex) { unparsedLabel.Value.LineIndex += LineCount; } } foreach (var virtualBP in VirtualBreakpoints) { if (virtualBP.Value.LineIndex >= GlobalLineIndex) { virtualBP.Value.LineIndex += LineCount; } } foreach (var zone in Zones) { // Grow or move if ((zone.Value.LineIndex < GlobalLineIndex) && (zone.Value.LineIndex + zone.Value.LineCount >= GlobalLineIndex + LineCount)) { zone.Value.LineCount += LineCount; } if (zone.Value.LineIndex >= GlobalLineIndex) { zone.Value.LineIndex += LineCount; } } }