diff --git a/src/oping.c b/src/oping.c
index 0cb084f18ec3634ddc97e9a23798d933c03f9c10..eb16469fb0b4c2043b39383e2edd896d94594c05 100644 (file)
--- a/src/oping.c
+++ b/src/oping.c
#endif
#include <locale.h>
+#include <langinfo.h>
#if USE_NCURSES
# define NCURSES_OPAQUE 1
# define _X_OPEN_SOURCE_EXTENDED
# include <ncursesw/ncurses.h>
-/* some evilness: ncurses knows how to detect unicode, but won't
- expose it, yet there's this function that does what we want, so we
- steal it away from it */
-extern int _nc_unicode_locale(void);
-
# define OPING_GREEN 1
# define OPING_YELLOW 2
# define OPING_RED 3
static int opt_count = -1;
static int opt_send_ttl = 64;
static uint8_t opt_send_qos = 0;
+static int opt_utf8 = 0;
static int host_num = 0;
while (1)
{
- optchar = getopt (argc, argv, "46c:hi:I:t:Q:f:D:");
+ optchar = getopt (argc, argv, "46uUc:hi:I:t:Q:f:D:");
if (optchar == -1)
break;
opt_addrfamily = (optchar == '4') ? AF_INET : AF_INET6;
break;
+ case 'u':
+ opt_utf8 = 2;
+ break;
+ case 'U':
+ opt_utf8 = 1;
+ break;
+
case 'c':
{
int new_count;
} /* }}} void time_calc */
#if USE_NCURSES
+static _Bool has_utf8() /* {{{ */
+{
+ if (!opt_utf8)
+ {
+ /* Automatically determine */
+ if (strcasecmp ("UTF-8", nl_langinfo (CODESET)) == 0)
+ opt_utf8 = 2;
+ else
+ opt_utf8 = 1;
+ }
+ return ((_Bool) (opt_utf8 - 1));
+} /* }}} _Bool has_utf8 */
+
static int update_prettyping_graph (ping_context_t *ctx, /* {{{ */
double latency, unsigned int sequence)
{
x_max = getmaxx (ctx->window);
x_pos = ((sequence - 1) % (x_max - 4)) + 2;
- if (_nc_unicode_locale())
+ if (has_utf8())
{
hist_symbols_num = hist_symbols_utf8_num;
}
assert (index_colors < hist_colors_num);
index_symbols = intensity % hist_symbols_num;
- if (_nc_unicode_locale())
+ if (has_utf8())
{
color = hist_colors_utf8[index_colors];
symbol = hist_symbols_utf8[index_symbols];
wattron (ctx->window, A_BOLD);
wattron (ctx->window, COLOR_PAIR(color));
- if (_nc_unicode_locale())
+ if (has_utf8())
{
mvwprintw (ctx->window,
/* y = */ 3,