From 63f2f555277c8a4b2b992367aa26d497931deaeb Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Fri, 7 Jul 2023 14:16:41 +0100 Subject: win32: more console input character conversions Add wrappers for the following input functions with conversions for console input. Applications suitable for testing these changes are appended in brackets. - getchar (xargs) - fgetc (tac) - getline (shuf) - fgets (rev) Costs 112-120 bytes. --- include/mingw.h | 5 +++++ win32/winansi.c | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/mingw.h b/include/mingw.h index a95bf2e91..f11316205 100644 --- a/include/mingw.h +++ b/include/mingw.h @@ -172,6 +172,8 @@ int winansi_write(int fd, const void *buf, size_t count); int winansi_read(int fd, void *buf, size_t count); size_t winansi_fread(void *ptr, size_t size, size_t nmemb, FILE *stream); int winansi_getc(FILE *stream); +int winansi_getchar(void); +char *winansi_fgets(char *s, int size, FILE *stream); #define putchar winansi_putchar #define puts winansi_puts @@ -189,6 +191,9 @@ int winansi_getc(FILE *stream); #define read winansi_read #define fread winansi_fread #define getc winansi_getc +#define fgetc winansi_getc +#define getchar winansi_getchar +#define fgets winansi_fgets /* * stdlib.h diff --git a/win32/winansi.c b/win32/winansi.c index ad0d92698..818ab1793 100644 --- a/win32/winansi.c +++ b/win32/winansi.c @@ -26,6 +26,7 @@ static BOOL charToConA(LPSTR s); #undef read #undef fread #undef getc +#undef fgets #define FOREGROUND_ALL (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE) #define BACKGROUND_ALL (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE) @@ -1169,6 +1170,25 @@ int winansi_getc(FILE *stream) return rv; } +int winansi_getchar(void) +{ + return winansi_getc(stdin); +} + +char *winansi_fgets(char *s, int size, FILE *stream) +{ + char *rv; + + rv = fgets(s, size, stream); + if (!is_console_in(fileno(stream))) + return rv; + + if (rv) + conToCharBuffA(s, strlen(s)); + + return rv; +} + /* Ensure that isatty(fd) returns 0 for the NUL device */ int mingw_isatty(int fd) { -- cgit v1.2.3-55-g6feb