Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 public ValueChangedEventArgs(Word.Signs oldSign, long oldMagnitude, Word.Signs newSign, long newMagnitude)
 {
     OldMagnitude = oldMagnitude;
     NewMagnitude = newMagnitude;
     OldSign      = oldSign;
     NewSign      = newSign;
 }
Exemplo n.º 5
0
        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();
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
 LiteralConstantSymbol(Word.Signs literalSign, long literalMagnitude, string name) : base(name)
 {
     mLiteralSign      = literalSign;
     mLiteralMagnitude = literalMagnitude;
     mMagnitude        = -1L;
     mSign             = Word.Signs.Positive;
     mValueDefined     = false;
 }
Exemplo n.º 8
0
        void HandleNoInstructionSet()
        {
            ShowNonInstruction("No instructionset loaded");

            ContextMenu            = null;
            mUpdating              = false;
            mLastRenderedMagnitude = unrendered;
            mLastRenderedSign      = Word.Signs.Positive;
        }
Exemplo n.º 9
0
        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));
        }
Exemplo n.º 10
0
        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));
        }
Exemplo n.º 11
0
        public NumberValue(long value)
        {
            if (value < 0)
            {
                Sign  = Word.Signs.Negative;
                value = -value;
            }
            else
            {
                Sign = Word.Signs.Positive;
            }

            Magnitude = value;
        }
Exemplo n.º 12
0
        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();
        }
Exemplo n.º 13
0
        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;
            }
        }
Exemplo n.º 14
0
        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();
        }
Exemplo n.º 15
0
 public NumberValue(Word.Signs sign, long magnitude)
 {
     Sign      = sign;
     Magnitude = magnitude;
 }
Exemplo n.º 16
0
 public override void SetValue(Word.Signs sign, long magnitude) => mAddresses.Add(magnitude);
Exemplo n.º 17
0
        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;
        }
Exemplo n.º 18
0
 public override void SetValue(Word.Signs sign, long magnitude)
 {
     mSign         = sign;
     mMagnitude    = magnitude;
     mValueDefined = true;
 }
Exemplo n.º 19
0
 public ValueSymbol(string name) : base(name)
 {
     mIsDefined = false;
     Sign       = Word.Signs.Positive;
 }
Exemplo n.º 20
0
 static string GetName(Word.Signs literalSign, long literalMagnitude, int count) =>
 string.Concat("=", (literalSign.IsNegative() ? "-" : ""), literalMagnitude, '=', count);
Exemplo n.º 21
0
 public override void SetValue(long value)
 {
     mSign         = value.GetSign();
     mMagnitude    = value.GetMagnitude();
     mValueDefined = true;
 }
Exemplo n.º 22
0
 public abstract void SetValue(Word.Signs sign, long magnitude);
Exemplo n.º 23
0
 public static Word.Signs Invert(this Word.Signs sign) => sign == Word.Signs.Positive ? Word.Signs.Negative : Word.Signs.Positive;
Exemplo n.º 24
0
 public static char ToChar(this Word.Signs sign) => sign == Word.Signs.Positive ? '+' : '-';
Exemplo n.º 25
0
 void CheckAndUpdateValue(Word.Signs newSign, long newMagnitude) => CheckAndUpdateValue(newSign, newMagnitude, false);
Exemplo n.º 26
0
 public static bool IsPositive(this Word.Signs sign) => sign == Word.Signs.Positive;
Exemplo n.º 27
0
        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));
                }
            }
        }
Exemplo n.º 28
0
 public static bool IsNegative(this Word.Signs sign) => sign == Word.Signs.Negative;
Exemplo n.º 29
0
 public static long ApplyTo(this Word.Signs sign, long magnitude) => sign == Word.Signs.Negative ? -magnitude : magnitude;
Exemplo n.º 30
0
 public static long Apply(this long magnitude, Word.Signs sign) => sign.ApplyTo(magnitude);