/// <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(); } }
/// <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"; }
/// <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); }