// Constructor, initialize important components and variables public Form1() { InitializeComponent(); menuStrip1.Renderer = new ToolStripProfessionalRenderer(new CustomColorTable()); rM = new RegisterMachine(new List <string>() { "" }); register = new Registers(); dt = new DataTable(); saved = true; compiled = false; ifMode = false; // Columns dt.Columns.Add("Index"); dt.Columns.Add("Value"); // set columns dataGridView2.DataSource = dt; // disable sorting of columns foreach (DataGridViewColumn column in dataGridView2.Columns) { column.SortMode = DataGridViewColumnSortMode.NotSortable; } }
// Event Handler for StepByStep ToolStripMenuItem, executes one line of code per click private void StepByStepToolStripMenuItem_Click(object sender, EventArgs e) { try { // Don't compile twice if code is already compiled if (!compiled) { errorBox.Text = ""; rM = new RegisterMachine(textEditorBox.Text.Split('\n').ToList()); compiled = true; } Highlight(); // Check if there are more steps available or end of code is reached if (rM.ExecuteOneStep() == false) { UpdateLabels(); UpdateDataGridView(); errorBox.Text = "Program execution finished!"; rM.ResetState(); } else { UpdateLabels(); UpdateDataGridView(); } } catch (Exception exc) { errorBox.Text = exc.Message; } }
// Event Handler for StepByStep ToolStripMenuItem, executes one line of code per click private void StepByStepToolStripMenuItem_Click(object sender, EventArgs e) { if (!waitingForInput) { StepByStep = true; try { // Don't compile twice if code is already compiled if (!compiled) { errorBox.Text = ""; rM = new RegisterMachine(textEditorBox.Text.Split('\n').ToList(), ifMode); compiled = true; } Highlight(); // Check if there are more steps available or end of code is reached RegisterMachine.ReturnType T = rM.ExecuteOneStep(ref OutputString); switch (T) { case RegisterMachine.ReturnType.OUTPUT: errorBox.Text = OutputString; break; case RegisterMachine.ReturnType.INPUT: UpdateLabels(); UpdateDataGridView(); waitingForInput = true; inputTextBox.ReadOnly = false; inputTextBox.Enabled = true; inputTextBox.Text = "Waiting for Input"; return; case RegisterMachine.ReturnType.END: UpdateLabels(); UpdateDataGridView(); errorBox.Text = "Program execution finished!"; rM.ResetState(); break; default: UpdateLabels(); UpdateDataGridView(); break; } } catch (Exception exc) { errorBox.Text = exc.Message; } } }
//Event Handler for the "Run" item in the MenuStrip, compiles and runs the program private void RunToolStripMenuItemClick(object sender, EventArgs e) { waitingForInput = false; StepByStep = false; UpdateCodelines(); errorBox.Text = ""; try { rM = new RegisterMachine(textEditorBox.Text.Split('\n').ToList(), ifMode); compiled = true; RegisterMachine.ReturnType T = RegisterMachine.ReturnType.RUNNING; // Execute code until end or input/output command while (T != RegisterMachine.ReturnType.END) { T = rM.ExecuteRegisterMachine(ref OutputString); // Show output if asked for if (T == RegisterMachine.ReturnType.OUTPUT) { errorBox.Text = OutputString; } // Set register machine to "wait"-state and request input if (T == RegisterMachine.ReturnType.INPUT) { UpdateLabels(); UpdateDataGridView(); waitingForInput = true; inputTextBox.ReadOnly = false; inputTextBox.Enabled = true; inputTextBox.Text = "Waiting for Input"; return; } } } catch (Exception exception) { errorBox.Text = exception.Message; } UpdateLabels(); UpdateDataGridView(); rM.ResetState(); }
//Event Handler for the "Run" item in the MenuStrip, compiles and runs the program private void RunToolStripMenuItemClick(object sender, System.EventArgs e) { errorBox.Text = ""; try { // TODO: IMPLEMENT OPTIMISATION (compiled bool)!!! rM = new RegisterMachine(textEditorBox.Text.Split('\n').ToList()); compiled = true; rM.ExecuteRegisterMachine(false); } catch (Exception exception) { errorBox.Text = exception.Message; } UpdateLabels(); UpdateDataGridView(); rM.ResetState(); }