X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Foping.c;h=4a605534e7e608694d475443ca615328c42b5156;hb=94a8bf0d6c869b1e6bde637dd25666d2f4cb7052;hp=aa99ef9d87a7d7ac1cf9673518166004c8db05fa;hpb=2dcbbf2cd80f1f2c5b9ce1aed67d28093929ccaa;p=liboping.git diff --git a/src/oping.c b/src/oping.c index aa99ef9..4a60553 100644 --- a/src/oping.c +++ b/src/oping.c @@ -75,17 +75,18 @@ #endif #include +#include #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 -/* 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 +# elif HAVE_NCURSES_H +# include +# endif # define OPING_GREEN 1 # define OPING_YELLOW 2 @@ -159,6 +160,9 @@ static char *opt_filename = NULL; 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; @@ -303,6 +307,9 @@ static void usage_exit (const char *name, int status) /* {{{ */ " -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 \n" @@ -505,7 +512,11 @@ static int read_options (int argc, char **argv) /* {{{ */ 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; @@ -576,6 +587,15 @@ static int read_options (int argc, char **argv) /* {{{ */ 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; @@ -635,10 +655,22 @@ static void time_calc (struct timespec *ts_dest, /* {{{ */ } /* }}} 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) @@ -655,7 +687,7 @@ static int update_prettyping_graph (ping_context_t *ctx, /* {{{ */ 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; } @@ -681,7 +713,7 @@ static int update_prettyping_graph (ping_context_t *ctx, /* {{{ */ 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]; @@ -696,7 +728,7 @@ static int update_prettyping_graph (ping_context_t *ctx, /* {{{ */ wattron (ctx->window, A_BOLD); wattron (ctx->window, COLOR_PAIR(color)); - if (unicode_locale()) + if (has_utf8()) { mvwprintw (ctx->window, /* y = */ 3,