Skip to content

Commit

Permalink
Overall Windows implementation improvements from Leonard Hecker, than…
Browse files Browse the repository at this point in the history
…k you

Signed-off-by: Christian Parpart <[email protected]>
  • Loading branch information
christianparpart committed Mar 24, 2024
1 parent 8572ddd commit 2d1af59
Showing 1 changed file with 26 additions and 7 deletions.
33 changes: 26 additions & 7 deletions tb/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ using namespace std::placeholders;
#include <Windows.h>
#endif

#ifndef STDOUT_FILENO
#define STDOUT_FILENO 1
#endif

#define STDOUT_FASTPATH_FD 3

using termbench::TerminalSize;
Expand All @@ -55,8 +59,15 @@ TerminalSize getTerminalSize() noexcept
return DefaultSize;
return { ws.ws_col, ws.ws_row };
#else
// TODO: Windows
return DefaultSize;
CONSOLE_SCREEN_BUFFER_INFOEX info {
.cbSize = sizeof(info),
};
if (!GetConsoleScreenBufferInfoEx(GetStdHandle(STD_OUTPUT_HANDLE), &info))
return DefaultSize;
return {
static_cast<unsigned short>(info.srWindow.Right - info.srWindow.Left + 1),
static_cast<unsigned short>(info.srWindow.Bottom - info.srWindow.Top + 1),
};
#endif
}

Expand Down Expand Up @@ -205,7 +216,7 @@ bool addTestsToBenchmark(termbench::Benchmark& tb, BenchSettings const& settings
cerr << std::format("Failed to load file '{}'.\n", test.string());
return false;
}
tb.add(termbench::tests::crafted(test.filename(), "", std::move(content)));
tb.add(termbench::tests::crafted(test.filename().string(), "", std::move(content)));
}

if (settings.columnByColumn)
Expand Down Expand Up @@ -254,11 +265,15 @@ struct WithScopedTerminalSize
int main(int argc, char const* argv[])
{
#if defined(_WIN32)
{
HANDLE stdoutHandle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleMode(stdoutHandle, ENABLE_VIRTUAL_TERMINAL_PROCESSING);
}
const auto stdoutHandle = GetStdHandle(STD_OUTPUT_HANDLE);
const auto stdoutCP = GetConsoleOutputCP();
DWORD stdoutMode;
GetConsoleMode(stdoutHandle, &stdoutMode);
SetConsoleMode(stdoutHandle,
ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
SetConsoleOutputCP(CP_UTF8);
#endif

auto const initialTerminalSize = getTerminalSize();
auto const settings = parseArguments(argc, argv, initialTerminalSize);

Expand Down Expand Up @@ -294,5 +309,9 @@ int main(int argc, char const* argv[])
tb.summarize(writerToFile);
}

#if defined(_WIN32)
SetConsoleMode(stdoutHandle, stdoutMode);
SetConsoleOutputCP(stdoutCP);
#endif
return EXIT_SUCCESS;
}

0 comments on commit 2d1af59

Please sign in to comment.