Example #1
0
        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);
        }
Example #2
0
        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;
                }
            }
        }