コード例 #1
0
        /// <summary>
        /// Функция, вызываемая при изменении пользователем текста в ячейке памяти.
        /// Помещает новое значение ячейки в память или выводит сообщение об ощибке, если введено некорректное число.
        /// </summary>
        /// <param name="row">Строка измененной ячейки.</param>
        /// <param name="collumn">Столбец измененной ячейки.</param>
        /// <param name="s">Строка, введенная в ячейку.</param>
        public void MemoryChanged(int row, int collumn, string s)
        {
            int num;

            try {
                num = Convert.ToInt32(s, 16);
                if (num > 255 || num < 0)
                {
                    _forms.First()?.ShowMessage("Число должно быть от 0 до FF");
                    _forms.ForEach(x => x.SetMemory(row, collumn, MemoryHex(row, collumn)));
                    return;
                }
            } catch {
                _forms.First()?.ShowMessage("Введено некорректное число");
                _forms.ForEach(x => x.SetMemory(row, collumn, MemoryHex(row, collumn)));
                return;
            }
            var bitArray = new ExtendedBitArray();

            CompilerSupport.FillBitArray(null, bitArray, num, 8);
            _memory[row * MemoryForm.ColumnCount + collumn] = bitArray;
            if (s.Length == 1)
            {
                s = "0" + s;
            }
            s = s.ToUpper();
            _forms.ForEach(x => x.SetMemory(row, collumn, s));
        }
コード例 #2
0
        public CompilerSupport GetCompilerSupport(CSharpLanguageVersion version)
        {
            CompilerSupport result = CompilerSupport.FullSupport ^ (CompilerSupport.Win32Resources | CompilerSupport.PrimaryInteropEmbedding | CompilerSupport.StructuralTyping);

            if (((int)version) >= (int)CSharpLanguageVersion.Version4)
            {
                result |= CompilerSupport.PrimaryInteropEmbedding;
            }
            return(result);
        }
コード例 #3
0
        public CompilerSupport GetCompilerSupport(VisualBasicVersion version)
        {
            CompilerSupport result = CompilerSupport.FullSupport ^ (CompilerSupport.Win32Resources | CompilerSupport.PrimaryInteropEmbedding | CompilerSupport.StructuralTyping | Compilers.CompilerSupport.Unsafe);

            if (((int)version) >= (int)VisualBasicVersion.Version10)
            {
                result |= CompilerSupport.PrimaryInteropEmbedding;
            }
            return(result);
        }
コード例 #4
0
        public void VideomemoryChange(int row, int column, object o)
        {
            if (o == null)

            {
                _form2.ShowMessage("Должно быть введено число от 0 до FF");
                _form2.SetMemory(row, column, VideomemoryHex(row, column));
                return;
            }
            string s = o.ToString();

            if (s.Length > 2)
            {
                _form2.ShowMessage("Должно быть введено число от 0 до FF");
                _form2.SetMemory(row, column, VideomemoryHex(row, column));
                return;
            }

            int num;

            try
            {
                num = Convert.ToInt32(s, 16);
                if (num > 255 || num < 0)
                {
                    _form2.SetMemory(row, column, VideomemoryHex(row, column));
                    return;
                }
            }
            catch
            {
                _form2.ShowMessage("Должно быть введено число от 0 до FF");
                _form2.SetMemory(row, column, VideomemoryHex(row, column));
                return;
            }
            var bitArray = new ExtendedBitArray();

            CompilerSupport.FillBitArray(null, bitArray, num, 8);
            _videomemory[row * VideomemoryForm.ColumnCount + column] = bitArray;
            if (s.Length == 1)
            {
                s = "0" + s;
            }
            s = s.ToUpper();
            _form2.SetMemory(row, column, s);


            if (IsRedraw())
            {
                ChangeTwoPixels(row, column);
                Draw();
            }

            UpdateForm();
        }
コード例 #5
0
        public void FillAddressTest()
        {
            var inputs = new List <int> {
                8, 12, 43, 263
            };

            var lowOutputs = new List <ExtendedBitArray> {
                new ExtendedBitArray()
                {
                    [3] = true
                },
                new ExtendedBitArray()
                {
                    [2] = true, [3] = true
                },
                new ExtendedBitArray()
                {
                    [5] = true, [3] = true, [1] = true, [0] = true
                },
                new ExtendedBitArray()
                {
                    [2] = true, [1] = true, [0] = true
                }
            };

            var highOutputs = new List <ExtendedBitArray> {
                new ExtendedBitArray(),
                new ExtendedBitArray(),
                new ExtendedBitArray(),
                new ExtendedBitArray()
                {
                    [0] = true
                }
            };

            for (int i = 0; i < lowOutputs.Count; i++)
            {
                var highBitArray = new ExtendedBitArray();
                var lowBitArray  = new ExtendedBitArray();

                CompilerSupport.FillBitArray(highBitArray, lowBitArray, inputs[i], 10);

                for (int j = 0; j < 8; j++)
                {
                    Assert.AreEqual(lowOutputs[i][j], lowBitArray[j], $"low: i = {i}, j = {j}");
                    Assert.AreEqual(highOutputs[i][j], highBitArray[j], $"high: i = {i}, j = {j}");
                }
            }
        }
コード例 #6
0
        public void RegisterTest()
        {
            var inputs = new List <string> {
                "R1",
                "r2+",
                "R3-",
                "+r4",
                "-R5",
                "@r6",
                "@R7+",
                "@r8-",
                "+@R9",
                "-@ra",

                "RS",
                "sf",
                "+r2+",
                "+r4-",
                "-R2-",
                "-r4+",
                "R2+-",
                "@R@2"
            };

            var outputs = new List <CompilerSupport.Register?> {
                new CompilerSupport.Register()
                {
                    IsChange = false,
                    Number   = 1,
                    IsDirect = true
                },
                new CompilerSupport.Register()
                {
                    IsChange     = true,
                    IsIncrement  = true,
                    IsPostchange = true,
                    Number       = 2,
                    IsDirect     = true
                },
                new CompilerSupport.Register()
                {
                    IsChange     = true,
                    IsIncrement  = false,
                    IsPostchange = true,
                    Number       = 3,
                    IsDirect     = true
                },
                new CompilerSupport.Register()
                {
                    IsChange     = true,
                    IsIncrement  = true,
                    IsPostchange = false,
                    Number       = 4,
                    IsDirect     = true
                },
                new CompilerSupport.Register()
                {
                    IsChange     = true,
                    IsIncrement  = false,
                    IsPostchange = false,
                    Number       = 5,
                    IsDirect     = true
                },
                new CompilerSupport.Register()
                {
                    IsChange = false,
                    Number   = 6,
                    IsDirect = false
                },
                new CompilerSupport.Register()
                {
                    IsChange     = true,
                    IsIncrement  = true,
                    IsPostchange = true,
                    Number       = 7,
                    IsDirect     = false
                },
                new CompilerSupport.Register()
                {
                    IsChange     = true,
                    IsIncrement  = false,
                    IsPostchange = true,
                    Number       = 8,
                    IsDirect     = false
                },
                new CompilerSupport.Register()
                {
                    IsChange     = true,
                    IsIncrement  = true,
                    IsPostchange = false,
                    Number       = 9,
                    IsDirect     = false
                },
                new CompilerSupport.Register()
                {
                    IsChange     = true,
                    IsIncrement  = false,
                    IsPostchange = false,
                    Number       = 10,
                    IsDirect     = false
                },
                null,
                null,
                null,
                null,
                null,
                null,
                null,
                null
            };

            for (int i = 0; i < inputs.Count; i++)
            {
                var register = CompilerSupport.ConvertToRegister(inputs[i]);
                if (!outputs[i].HasValue)
                {
                    Assert.IsFalse(register.HasValue);
                    continue;
                }
                Assert.IsTrue(register.HasValue, $"Строка: {inputs[i]}, регистр null");
                var r        = register.Value;
                var expected = outputs[i].Value;
                Assert.AreEqual(r.Number, expected.Number, $"Строка: {inputs[i]}, регистр {r}, ожидалось {expected}");
                Assert.AreEqual(r.IsDirect, expected.IsDirect, $"Строка: {inputs[i]}, регистр {r}, ожидалось {expected}");
                Assert.AreEqual(r.IsChange, expected.IsChange, $"Строка: {inputs[i]}, регистр {r}, ожидалось {expected}");
                Assert.AreEqual(r.IsIncrement, expected.IsIncrement, $"Строка: {inputs[i]}, регистр {r}, ожидалось {expected}");
                Assert.AreEqual(r.IsPostchange, expected.IsPostchange, $"Строка: {inputs[i]}, регистр {r}, ожидалось {expected}");
            }
        }
コード例 #7
0
ファイル: AsmLexer.cs プロジェクト: Arckhipova/8bitFonNeiman
        public void Style(int startPos, int endPos)
        {
            var line = _scintilla.LineFromPosition(startPos);

            startPos = _scintilla.Lines[line].Position;

            var lastDivider = startPos;

            _scintilla.StartStyling(startPos);
            while (startPos < endPos)
            {
                int divider = FirstDivider(startPos, _scintilla.Text);
                if (divider == -1)
                {
                    divider = endPos;
                }
                if (divider - lastDivider == 1)
                {
                    startPos++;
                    lastDivider = divider;
                    continue;
                }
                string word = _scintilla.Text.Substring(lastDivider, divider - lastDivider - 1);
                if (_keywords.Contains(word.ToUpper()))
                {
                    if (word.ToUpper().Equals("EQL"))
                    {
                        _isEql = true;
                    }
                    ProcessLastWord();
                    SetStyle(word.Length, StyleKeyword);
                }
                else if (word[0] <= '9' && word[0] >= '0')
                {
                    try {
                        CompilerSupport.ConvertToInt(word);
                        ProcessLastWord();
                        SetStyle(word.Length, StyleNumber);
                    } catch {
                        lastDivider = _scintilla.Text.IndexOf(Environment.NewLine, divider + 1, StringComparison.Ordinal);
                        if (lastDivider == -1)
                        {
                            startPos = endPos;
                        }
                        else
                        {
                            startPos = lastDivider + 1;
                        }
                        SetStyle(word.Length, StyleError);
                        SetStyle(lastDivider - divider, StyleDefault);
                        continue;
                    }
                }
                else if (_identities.Contains(word))
                {
                    ProcessLastWord();
                    SetStyle(word.Length, StyleIdentifier);
                }
                else
                {
                    ProcessLastWord();
                    _lastWord = word;
                }
                if (divider >= _scintilla.Text.Length)
                {
                    break;
                }
                if (_scintilla.Text[divider] == ';')
                {
                    int newLine = _scintilla.Text.IndexOf(Environment.NewLine, divider + 1, StringComparison.Ordinal);
                    if (newLine == -1)
                    {
                        newLine = endPos;
                    }
                    SetStyle(newLine - divider, StyleComment);
                    divider = newLine;
                }
                lastDivider = divider;
                startPos    = lastDivider + 1;
            }
        }