private void loadStartMenu() { startToolStripMenuItem.DropDownItems.Clear(); for (int i = 0; i < file.Labels.Count; i++) { LabelInst label = file.Labels[i]; ToolStripMenuItem menuItem = new ToolStripMenuItem(label.Op); menuItem.Click += (sender, e) => run(label); // yay for syntactic sugar if (i < FKeys.Length) { menuItem.ShortcutKeys = Keys.Control | FKeys[i]; } startToolStripMenuItem.DropDownItems.Add(menuItem); } }
private bool run(LabelInst label) { if (InitStack == null) { MessageBox.Show("Initial stack has not been set yet!", "StackFish", MessageBoxButtons.OK, MessageBoxIcon.Warning); return(false); } // Recreate return address to rename callee to current label & set return address -1 StackItem lastItem = InitStack[InitStack.Count - 1]; if (lastItem is ReturnAddress) { ReturnAddress ra = lastItem as ReturnAddress; InitStack[InitStack.Count - 1] = new ReturnAddress(ra.CallerName, label.Name, -1); } // Create simulator this.simulator = new Simulator(file, InitStack); // TODO initial registers simulator.OnInstructionReady += Simulator_OnInstructionReady; simulator.Registers.OnRegisterChanged += Registers_OnRegisterChanged; simulator.Registers.OnPointerChanged += Registers_OnPointerChanged; simulator.Registers.OnFlagChanged += Registers_OnFlagChanged; simulator.Stack.OnStackChanged += Stack_OnStackChanged; simulator.Start(label.Index); // Update controls startToolStripMenuItem.Visible = false; runningToolStripMenuItem.Visible = true; updateRegisters(); updateFlags(); drawStack(); executed = 0; updateExecuted(); setStatus("Started at " + label.Name + "! Press F5 to step forward, Shift+F5 to step backward"); return(true); }