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