#endif
#include <locale.h>
+#include <langinfo.h>
#if USE_NCURSES
# define NCURSES_OPAQUE 1
/* http://newsgroups.derkeiler.com/Archive/Rec/rec.games.roguelike.development/2010-09/msg00050.html */
# 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);
+# if HAVE_NCURSESW_NCURSES_H
+# include <ncursesw/ncurses.h>
+# elif HAVE_NCURSES_H
+# include <ncurses.h>
+# endif
# define OPING_GREEN 1
# define OPING_YELLOW 2
static int opt_count = -1;
static int opt_send_ttl = 64;
static uint8_t opt_send_qos = 0;
+#if USE_NCURSES
+static int opt_utf8 = 0;
+#endif
static int host_num = 0;
" -I srcaddr source address\n"
" -D device outgoing interface name\n"
" -f filename filename to read hosts from\n"
+#if USE_NCURSES
+ " -u / -U force / disable UTF-8 output\n"
+#endif
"\noping "PACKAGE_VERSION", http://verplant.org/liboping/\n"
"by Florian octo Forster <octo@verplant.org>\n"
while (1)
{
- optchar = getopt (argc, argv, "46c:hi:I:t:Q:f:D:");
+ optchar = getopt (argc, argv, "46c:hi:I:t:Q:f:D:"
+#if USE_NCURSES
+ "uU"
+#endif
+ );
if (optchar == -1)
break;
set_opt_send_qos (optarg);
break;
+#if USE_NCURSES
+ case 'u':
+ opt_utf8 = 2;
+ break;
+ case 'U':
+ opt_utf8 = 1;
+ break;
+#endif
+
case 'h':
usage_exit (argv[0], 0);
break;
} /* }}} void time_calc */
#if USE_NCURSES
-static int unicode_locale() /* {{{ */
+static _Bool has_utf8() /* {{{ */
{
- return _nc_unicode_locale();
-} /* }}} int unicode_locale */
+# if HAVE_NCURSESW_NCURSES_H
+ 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));
+# else
+ return (0);
+# endif
+} /* }}} _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 (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 (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 (unicode_locale())
+ if (has_utf8())
{
mvwprintw (ctx->window,
/* y = */ 3,