Skip to content

Commit

Permalink
support ASCII escape code in Windows terminals
Browse files Browse the repository at this point in the history
  • Loading branch information
fangq committed Sep 13, 2023
1 parent 9d2d35b commit ffc8ab0
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
32 changes: 32 additions & 0 deletions src/mcx_tictoc.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,3 +220,35 @@ void sleep_ms(int milliseconds) {
usleep(milliseconds * 1000);
#endif
}


#if defined(_WIN32) && defined(USE_OS_TIMER) && !defined(MCX_CONTAINER)

#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#endif

int EnableVTMode() {
// Set output mode to handle virtual terminal sequences
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

if (hOut == INVALID_HANDLE_VALUE) {
return 0;
}

DWORD dwMode = 0;

if (!GetConsoleMode(hOut, &dwMode)) {
return 0;
}

dwMode |= ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING;

if (!SetConsoleMode(hOut, dwMode)) {
return 0;
}

return 1;
}

#endif
4 changes: 4 additions & 0 deletions src/mcx_tictoc.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ unsigned int StartTimer ();
unsigned int GetTimeMillis ();
void sleep_ms(int milliseconds);

#if defined(_WIN32) && defined(USE_OS_TIMER) && !defined(MCX_CONTAINER)
int EnableVTMode();
#endif

#ifdef __cplusplus
}
#endif
Expand Down
8 changes: 8 additions & 0 deletions src/mcx_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@
#include "mcx_bench.h"
#include "mcx_mie.h"

#if defined(_WIN32) && defined(USE_OS_TIMER) && !defined(MCX_CONTAINER)
#include "mmc_tictoc.h"
#endif

#ifndef MCX_CONTAINER
#include "zmat/zmatlib.h"
#include "ubj/ubj.h"
Expand Down Expand Up @@ -4391,6 +4395,10 @@ void mcx_parsecmd(int argc, char* argv[], Config* cfg) {
char logfile[MAX_PATH_LENGTH] = {0};
float np = 0.f;

#if defined(_WIN32) && defined(USE_OS_TIMER) && !defined(MCX_CONTAINER)
EnableVTMode();
#endif

if (argc <= 1) {
mcx_usage(cfg, argv[0]);
exit(0);
Expand Down

0 comments on commit ffc8ab0

Please sign in to comment.