Skip to content

Commit

Permalink
Merge pull request #62 from revam/fix-console-pipe-on-windows
Browse files Browse the repository at this point in the history
Fix output redirection on windows + more
  • Loading branch information
DvdKhl authored Mar 10, 2024
2 parents ebab6b1 + 768061e commit 7fa2c1a
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions AVDump3CL/AVD3Console.cs
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ public class AVD3Console : IDisposable, IAVD3Console {

private readonly bool canManipulateCursor;
private int displaySkipCount;
private int maxTopCursorPos;
private int maxTopCursorPos = 0;
private int jitterDisplayUpdateCount;
private readonly Stopwatch perfWatch = new();

Expand Down Expand Up @@ -177,12 +177,13 @@ public void StopProgressDisplay() {
progressBuilder.MarkFinished();

progressBuilder.Reset(this);
var cursorTop = Console.CursorTop;
var cursorTop = canManipulateCursor ? Console.CursorTop : 0;
for(int i = cursorTop; i < maxTopCursorPos; i++) {
progressBuilder.AppendLine();
}
Console.Write(progressBuilder.Buffer);
Console.SetCursorPosition(0, cursorTop);
if (canManipulateCursor)
Console.SetCursorPosition(0, cursorTop);
}
}
}
Expand All @@ -208,8 +209,11 @@ private void OnWriteProgress(object? _) {
var progressLineCountPrev = progressBuilder.ProgressLineCount;
progressBuilder.Reset(this);

maxTopCursorPos = Math.Max(maxTopCursorPos, Console.CursorTop);
Console.SetCursorPosition(0, Math.Max(0, Console.CursorTop - progressLineCountPrev));
if (canManipulateCursor)
{
maxTopCursorPos = Math.Max(maxTopCursorPos, Console.CursorTop);
Console.SetCursorPosition(0, Math.Max(0, Console.CursorTop - progressLineCountPrev));
}

string[] toWrite;
lock(this.toWrite) {
Expand All @@ -231,7 +235,7 @@ private void OnWriteProgress(object? _) {
//}
if(lines[j].Length < progressBuilder.DisplayWidth) {
progressBuilder.Buffer.Append(' ', progressBuilder.DisplayWidth - lines[j].Length);
} else if(lines[j].Length >= progressBuilder.ConsoleWidth) {
} else if(progressBuilder.DisplayWidth != 0 && lines[j].Length >= progressBuilder.ConsoleWidth) {
progressBuilder.Buffer.Append(' ', Math.Max(0, progressBuilder.DisplayWidth - 2 - lines[j].Length % progressBuilder.DisplayWidth));
}

Expand Down Expand Up @@ -290,10 +294,12 @@ public void WriteLine(IEnumerable<string> values) {
public IDisposable LockConsole() {
progressTimer.Change(Timeout.Infinite, Timeout.Infinite);
Monitor.Enter(progressWriteLock);
Console.SetCursorPosition(0, maxTopCursorPos);
if (canManipulateCursor)
Console.SetCursorPosition(0, maxTopCursorPos);

return new ProxyDisposable(() => {
maxTopCursorPos = Math.Max(maxTopCursorPos, Console.CursorTop);
if (canManipulateCursor)
maxTopCursorPos = Math.Max(maxTopCursorPos, Console.CursorTop);
Monitor.Exit(progressWriteLock);
progressTimer.Change(500, TickPeriod);
});
Expand Down

0 comments on commit 7fa2c1a

Please sign in to comment.