示例#1
0
        /// <summary>
        /// Stores a prefix name in this collection
        /// </summary>
        /// <param name="address">Comment address</param>
        /// <param name="comment">Comment text</param>
        public void SetPrefixComment(ushort address, string comment)
        {
            var target = SelectTarget(address);

            target.Annotation.SetPrefixComment(address, comment);
            SaveAnnotations(target.Annotation, target.Filename);
            MergedAnnotations.SetPrefixComment(address, comment);
            if (string.IsNullOrWhiteSpace(comment))
            {
                Remerge();
            }
        }
示例#2
0
        /// <summary>
        /// Stores the label in the annotations
        /// </summary>
        /// <param name="address">Label address</param>
        /// <param name="label">Label text</param>
        public void SetLabel(ushort address, string label, out string validationMessage)
        {
            validationMessage = null;
            var target = SelectTarget(address);
            var result = target.Annotation.SetLabel(address, label);

            if (result)
            {
                SaveAnnotations(target.Annotation, target.Filename);
                MergedAnnotations.SetLabel(address, label);
                if (string.IsNullOrWhiteSpace(label))
                {
                    Remerge();
                }
                return;
            }
            validationMessage = "Label name is invalid/duplicated";
        }
示例#3
0
        /// <summary>
        /// Replaces a literal in the disassembly item for the specified address. If
        /// the named literal does not exists, creates one for the symbol.
        /// </summary>
        /// <param name="disassAddress">Disassembly item address</param>
        /// <param name="literalName">Literal name</param>
        /// <returns>Null, if operation id ok, otherwise, error message</returns>
        /// <remarks>If the literal already exists, it must have the symbol's value.</remarks>
        public string ApplyLiteral(ushort disassAddress, string literalName)
        {
            if (!Parent.LineIndexes.TryGetValue(disassAddress, out int lineIndex))
            {
                return($"No disassembly line is associated with address #{disassAddress:X4}");
            }

            var disassItem = Parent.DisassemblyItems[lineIndex];

            if (!disassItem.Item.HasSymbol)
            {
                return($"Disassembly line #{disassAddress:X4} does not have an associated value to replace");
            }

            var symbolValue = disassItem.Item.SymbolValue;

            if (disassItem.Item.HasLabelSymbol)
            {
                return
                    ($"%L {symbolValue:X4} {literalName}%Disassembly line #{disassAddress:X4} refers to a label. Use the 'L {symbolValue:X4}' command to define a label.");
            }

            var target  = SelectTarget(disassAddress);
            var message = target.Annotation.ApplyLiteral(disassAddress, symbolValue, literalName);

            if (message != null)
            {
                return(message);
            }

            SaveAnnotations(target.Annotation, target.Filename);
            MergedAnnotations.ApplyLiteral(disassAddress, symbolValue, literalName);
            if (string.IsNullOrWhiteSpace(literalName))
            {
                Remerge();
            }
            return(null);
        }