private async void RunByStep(object sender, RoutedEventArgs e)
{
if (_firstStep)
{
var tmp = Path.GetTempFileName();
await File.WriteAllTextAsync(tmp, PCode.Text);
Input.IsReadOnly = false;
var buffer = new StringBuilder();
var stepOutput = "";
var curIns = "";
var pc = 0;
_firstStep = false;
await RunAsync(
tmp,
(_, e) =>
{
// Console.Out.WriteLine(e.Data);
if (e.Data?.StartsWith("**") ?? false)
{
var output = stepOutput;
var ins = curIns;
Dispatcher.Invoke(() =>
{
Stack.Text = buffer.ToString();
Exec.Text += output;
PCode.Focus();
//Console.Out.WriteLine(pc);
if (pc == -99)
{
return;
}
var idx = PCode.GetCharacterIndexFromLineIndex(pc);
PCode.Select(idx, ins.Length);
}, DispatcherPriority.Render);
buffer.Clear();
stepOutput = "";
curIns = "";
}
else if (e.Data?.StartsWith("print") ?? false)
{
stepOutput = e.Data + "\n";
}
else if (e.Data?.StartsWith("Press") ?? false)
{
// do nothing
}
else
{
if (e.Data?.StartsWith("-->") ?? false)
{
curIns = e.Data.Substring(9); // catch ins
}
if (e.Data?.StartsWith("PC =") ?? false)
{
Console.Out.WriteLine(e.Data.Substring(5));
pc = int.Parse(e.Data.Substring(5)); // catch PC
}
buffer.AppendLine(e.Data);
}
},
true
);
}
await(_inputWriter?.WriteLineAsync("c") ?? Task.FromResult(1));
}