void CheckAndUpdateValue(string newValue) { try { long magnitude = 0; Word.Signs sign = Word.Signs.Positive; if (newValue == "" || newValue == "-") { if (MinValue > 0) { magnitude = MinValue; } } else { int offset = 0; if (newValue[0] == '-') { sign = Word.Signs.Negative; offset = 1; } magnitude = long.Parse(newValue.Substring(offset)); } CheckAndUpdateValue(sign, magnitude); } catch (FormatException) { CheckAndUpdateValue(mLastValidText); } }
public WordEditor(int byteCount, bool includeSign) { mWord = new Word(byteCount); mIncludeSign = includeSign; mReadOnly = false; mLastRenderedMagnitude = unrendered; mLastRenderedSign = Word.Signs.Positive; mSignButton = new Button { Location = new Point(0, 0), Name = "SignButton", Size = new Size(18, 21), TabIndex = 0, TabStop = false, Text = "" + mWord.Sign.ToChar(), FlatStyle = FlatStyle.Flat, Enabled = !ReadOnly }; mSignButton.Click += MSignButton_Click; mSignButton.KeyPress += Editor_KeyPress; mSignButton.KeyDown += This_KeyDown; InitializeComponent(); }
void MListView_SelectedIndexChanged(object sender, EventArgs e) { ListView.SelectedListViewItemCollection selectedItems = mListView.SelectedItems; if (selectedItems.Count == 0) { return; } ListViewItem selectedItem = selectedItems[0]; mSymbolNameTextBox.Text = selectedItem.SubItems[nameFieldIndex].Text; long magnitude = 0; Word.Signs sign = Word.Signs.Positive; try { string valueText = selectedItem.SubItems[valueFieldIndex].Text; if (valueText[0] == '-') { sign = Word.Signs.Negative; valueText = valueText.Substring(1); } magnitude = long.Parse(valueText); } catch (FormatException) { } mSymbolValueTextBox.Magnitude = magnitude; mSymbolValueTextBox.Sign = sign; SetEnabledStates(false); }
public ValueChangedEventArgs(Word.Signs oldSign, long oldMagnitude, Word.Signs newSign, long newMagnitude) { OldMagnitude = oldMagnitude; NewMagnitude = newMagnitude; OldSign = oldSign; NewSign = newSign; }
public LongValueTextBox(bool supportsSign, long minValue, long maxValue, Word.Signs sign, long magnitude) { SupportSign = true; BorderStyle = BorderStyle.FixedSingle; UpdateLayout(); KeyDown += This_KeyDown; KeyPress += This_KeyPress; Leave += This_Leave; TextChanged += This_TextChanged; Enter += LongValueTextBox_Enter; SetMinValue(minValue); SetMaxValue(maxValue); CheckAndUpdateValue(sign, magnitude); CheckAndUpdateMaxLength(); mUpdating = false; mEditMode = false; ClearZero = true; mLastCaretPos = SelectionStart + SelectionLength; mLastValidText = mMagnitude.ToString(); }
void SetEditMode() { SuspendLayout(); ForeColor = mEditingTextColor; if (TextLength > 0) { int selectionStart = SelectionStart; int selectionLength = SelectionLength; Select(0, TextLength); SelectionColor = ForeColor; Select(selectionStart, selectionLength); } ResumeLayout(); mCaption = null; mToolTip?.SetToolTip(this, null); ContextMenu = null; mLastRenderedMagnitude = unrendered; mLastRenderedSign = Word.Signs.Positive; mEditMode = true; }
LiteralConstantSymbol(Word.Signs literalSign, long literalMagnitude, string name) : base(name) { mLiteralSign = literalSign; mLiteralMagnitude = literalMagnitude; mMagnitude = -1L; mSign = Word.Signs.Positive; mValueDefined = false; }
void HandleNoInstructionSet() { ShowNonInstruction("No instructionset loaded"); ContextMenu = null; mUpdating = false; mLastRenderedMagnitude = unrendered; mLastRenderedSign = Word.Signs.Positive; }
void ByteValueChanged(MixByteTextBox textBox, MixByteTextBox.ValueChangedEventArgs args) { var oldValue = new Word(mWord.Magnitude, mWord.Sign); mWord[textBox.Index] = args.NewValue; mLastRenderedMagnitude = mWord.MagnitudeLongValue; mLastRenderedSign = mWord.Sign; var newValue = new Word(mWord.Magnitude, mWord.Sign); OnValueChanged(new WordEditorValueChangedEventArgs(oldValue, newValue)); }
void NegateSign() { Word.Signs sign = mWord.Sign; mWord.InvertSign(); mLastRenderedMagnitude = mWord.MagnitudeLongValue; mLastRenderedSign = mWord.Sign; mSignButton.Text = "" + mWord.Sign.ToChar(); var oldValue = new Word(mWord.Magnitude, sign); var newValue = new Word(mWord.Magnitude, mWord.Sign); OnValueChanged(new WordEditorValueChangedEventArgs(oldValue, newValue)); }
public NumberValue(long value) { if (value < 0) { Sign = Word.Signs.Negative; value = -value; } else { Sign = Word.Signs.Positive; } Magnitude = value; }
void MSetButton_Click(object sender, EventArgs e) { if (mSymbols == null) { mSymbols = new SymbolCollection(); } string symbolName = mSymbolNameTextBox.Text; long symbolMagnitude = mSymbolValueTextBox.Magnitude; Word.Signs symbolSign = mSymbolValueTextBox.Sign; SymbolBase symbol = mSymbols[symbolName]; ValueSymbol valueSymbol = null; if (symbol != null) { valueSymbol = symbol as ValueSymbol; if (valueSymbol == null) { return; } valueSymbol.SetValue(symbolSign, symbolMagnitude); var valueText = symbolMagnitude.ToString(); if (symbolSign.IsNegative()) { valueText = '-' + valueText; } mListView.Items[symbolName].SubItems[valueFieldIndex].Text = valueText; } else { valueSymbol = ValueSymbol.ParseDefinition(symbolName) as ValueSymbol; if (valueSymbol == null) { return; } valueSymbol.SetValue(symbolSign, symbolMagnitude); mSymbols.Add(valueSymbol); ShowSymbol(valueSymbol); } SetEnabledStates(); }
public new void Update() { if (mLastRenderedMagnitude != mWord.MagnitudeLongValue || mLastRenderedSign != mWord.Sign || mLastRenderedMagnitude == unrendered) { mSignButton.Text = "" + mWord.Sign.ToChar(); foreach (MixByteTextBox box in mByteTextBoxes) { box.MixByteValue = mWord[box.Index]; } base.Update(); mLastRenderedMagnitude = mWord.MagnitudeLongValue; mLastRenderedSign = mWord.Sign; } }
public InstructionInstanceTextBox(IFullWord instructionWord) { if (instructionWord == null) { instructionWord = new FullWord(); } mInstructionWord = instructionWord; UpdateLayout(); DetectUrls = false; TextChanged += This_TextChanged; KeyPress += This_KeyPress; KeyDown += This_KeyDown; LostFocus += This_LostFocus; Enter += This_Enter; ReadOnlyChanged += This_ReadOnlyChanged; mShowAddressMenuItem = new MenuItem("Show address", ShowAddressMenuItem_Click); mShowIndexedAddressMenuItem = new MenuItem("Show indexed address", ShowIndexedAddressMenuItem_Click); mContextMenu = new ContextMenu(); mContextMenu.MenuItems.Add(mShowAddressMenuItem); mContextMenu.MenuItems.Add(mShowIndexedAddressMenuItem); ContextMenu = mContextMenu; mUpdating = false; mEditMode = false; MemoryAddress = 0; mLastRenderedMagnitude = unrendered; mLastRenderedSign = Word.Signs.Positive; mLastRenderedSourceLine = null; mNoInstructionRendered = true; Update(); }
public NumberValue(Word.Signs sign, long magnitude) { Sign = sign; Magnitude = magnitude; }
public override void SetValue(Word.Signs sign, long magnitude) => mAddresses.Add(magnitude);
public new void Update() { var memoryFullWord = mInstructionWord as IMemoryFullWord; string sourceLine = memoryFullWord?.SourceLine; if (mEditMode || (mLastRenderedMagnitude == mInstructionWord.MagnitudeLongValue && mLastRenderedSign == mInstructionWord.Sign && mLastRenderedSourceLine == sourceLine)) { return; } mUpdating = true; mEditMode = false; mCaption = null; mToolTip?.SetToolTip(this, null); mLastRenderedSourceLine = sourceLine; BackColor = mLastRenderedSourceLine != null ? mLoadedInstructionBackgroundColor : mEditorBackgroundColor; string sourceCaption = mLastRenderedSourceLine != null ? "Original source: " + mLastRenderedSourceLine : null; mLastRenderedMagnitude = mInstructionWord.MagnitudeLongValue; mLastRenderedSign = mInstructionWord.Sign; var instruction = InstructionSet.Instance.GetInstruction(mInstructionWord[MixInstruction.OpcodeByte], new FieldSpec(mInstructionWord[MixInstruction.FieldSpecByte])); if (instruction == null) { HandleNoInstruction(sourceCaption); return; } var instance = instruction.CreateInstance(mInstructionWord); var errors = instance.Validate(); var text = new InstructionText(instance); SuspendLayout(); base.Text = ""; ForeColor = mLastRenderedSourceLine != null ? mLoadedInstructionTextColor : mRenderedTextColor; AddTextElement(text.Mnemonic + " ", false); AddTextElement(text.Address, ItemInErrors(errors, InstanceValidationError.Sources.Address)); AddTextElement(text.Index, ItemInErrors(errors, InstanceValidationError.Sources.Index)); AddTextElement(text.Field, ItemInErrors(errors, InstanceValidationError.Sources.FieldSpec)); if (TextLength > 0) { Select(TextLength, 0); } var caption = GetAddressErrorsCaption(errors); if (sourceCaption != null) { caption = caption == null ? sourceCaption : string.Concat(sourceCaption, Environment.NewLine, caption); } mCaption = caption; mToolTip?.SetToolTip(this, caption); var address = GetAddress(); mShowAddressMenuItem.Enabled = address >= MemoryMinIndex && address <= MemoryMaxIndex; mShowIndexedAddressMenuItem.Enabled = IndexedAddressCalculatorCallback?.Invoke(address, mInstructionWord[MixInstruction.IndexByte]) != int.MinValue; ContextMenu = mContextMenu; base.Update(); ResumeLayout(); mNoInstructionRendered = false; mUpdating = false; }
public override void SetValue(Word.Signs sign, long magnitude) { mSign = sign; mMagnitude = magnitude; mValueDefined = true; }
public ValueSymbol(string name) : base(name) { mIsDefined = false; Sign = Word.Signs.Positive; }
static string GetName(Word.Signs literalSign, long literalMagnitude, int count) => string.Concat("=", (literalSign.IsNegative() ? "-" : ""), literalMagnitude, '=', count);
public override void SetValue(long value) { mSign = value.GetSign(); mMagnitude = value.GetMagnitude(); mValueDefined = true; }
public abstract void SetValue(Word.Signs sign, long magnitude);
public static Word.Signs Invert(this Word.Signs sign) => sign == Word.Signs.Positive ? Word.Signs.Negative : Word.Signs.Positive;
public static char ToChar(this Word.Signs sign) => sign == Word.Signs.Positive ? '+' : '-';
void CheckAndUpdateValue(Word.Signs newSign, long newMagnitude) => CheckAndUpdateValue(newSign, newMagnitude, false);
public static bool IsPositive(this Word.Signs sign) => sign == Word.Signs.Positive;
void CheckAndUpdateValue(Word.Signs newSign, long newMagnitude, bool suppressEvent) { mEditMode = false; var newValue = newSign.ApplyTo(newMagnitude); if (newValue < MinValue) { newValue = MinValue; newMagnitude = MinValue; if (newMagnitude < 0) { newSign = Word.Signs.Negative; newMagnitude = -newMagnitude; } } if (!SupportSign && (newValue < 0L)) { newValue = -newValue; newSign = Word.Signs.Positive; } if (newValue > MaxValue) { newValue = MaxValue; newMagnitude = MaxValue; if (newMagnitude < 0) { newSign = Word.Signs.Negative; newMagnitude = -newMagnitude; } } mUpdating = true; SuspendLayout(); ForeColor = mRenderedTextColor; mLastValidText = newMagnitude.ToString(); if (newSign == Word.Signs.Negative && (mSupportNegativeZero || newMagnitude != 0)) { mLastValidText = '-' + mLastValidText; } base.Text = mLastValidText; mLastCaretPos = SelectionStart + SelectionLength; Select(TextLength, 0); ResumeLayout(); mUpdating = false; if (newMagnitude != mMagnitude || newSign != mSign) { long magnitude = mMagnitude; mMagnitude = newMagnitude; Word.Signs sign = mSign; mSign = newSign; if (!suppressEvent) { OnValueChanged(new ValueChangedEventArgs(sign, magnitude, newSign, newMagnitude)); } } }
public static bool IsNegative(this Word.Signs sign) => sign == Word.Signs.Negative;
public static long ApplyTo(this Word.Signs sign, long magnitude) => sign == Word.Signs.Negative ? -magnitude : magnitude;
public static long Apply(this long magnitude, Word.Signs sign) => sign.ApplyTo(magnitude);