#endif
#if defined(WIN32) || defined(CYGWIN)
# include <io.h> /* for setmode() */
-#else
-# ifdef UNIX
-# include <unistd.h>
-# endif
+# include <windows.h>
+#endif
+#ifdef UNIX
+# include <unistd.h>
#endif
#include <stdlib.h>
#include <string.h> /* for strncmp() */
# endif
#endif
-char version[] = "xxd 2023-08-31 by Juergen Weigert et al.";
+char version[] = "xxd 2023-09-01 by Juergen Weigert et al.";
#ifdef WIN32
char osver[] = " (Win32)";
#else
"", "");
#endif
fprintf(stderr, " -u use upper case hex letters.\n");
- fprintf(stderr, " -R [WHEN] colorize the output; WHEN can be 'always', 'auto' or 'never'. Default: 'auto'.\n"),
+ fprintf(stderr, " -R when colorize the output; <when> can be 'always', 'auto' or 'never'. Default: 'auto'.\n"),
fprintf(stderr, " -v show version: \"%s%s\".\n", version, osver);
exit(1);
}
0070,0071,0372,0373,0374,0375,0376,0377
};
- static void
+ static void
begin_coloring_char (char *l, int *c, int e, int ebcdic)
{
if (ebcdic)
l[(*c)++] = 'm';
}
+ static int
+enable_color(void)
+{
+#ifdef WIN32
+ DWORD mode;
+ HANDLE out;
+
+ if (!isatty(1))
+ return 0;
+
+ out = GetStdHandle(STD_OUTPUT_HANDLE);
+ GetConsoleMode(out, &mode);
+ mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+ return (int)SetConsoleMode(out, mode);
+#elif defined(UNIX)
+ return isatty(STDOUT_FILENO);
+#else
+ return 0;
+#endif
+}
+
int
main(int argc, char *argv[])
{
char *varname = NULL;
int addrlen = 9;
int color = 0;
+ char *no_color;
-#ifdef UNIX
- color = isatty(STDOUT_FILENO);
-#endif
+ no_color = getenv("NO_COLOR");
+ if (no_color == NULL || no_color[0] == '\0')
+ color = enable_color();
#ifdef AMIGA
/* This program doesn't work when started from the Workbench */
}
else if (!STRNCMP(pp, "-R", 2))
{
- if (!argv[2])
+ char *pw = pp + 2;
+ if (!pw[0])
+ {
+ pw = argv[2];
+ argv++;
+ argc--;
+ }
+ if (!pw)
exit_with_usage();
- if (!STRNCMP(argv[2], "always", 2))
- color = 1;
- else if (!STRNCMP(argv[2], "never", 1))
+ if (!STRNCMP(pw, "always", 6))
+ {
+ (void)enable_color();
+ color = 1;
+ }
+ else if (!STRNCMP(pw, "never", 5))
color = 0;
- argv++;
- argc--;
+ else if (!STRNCMP(pw, "auto", 4))
+ ; /* Do nothing. */
+ else
+ exit_with_usage();
}
else if (!strcmp(pp, "--")) /* end of options */
{