projects
/
liboping.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for both, ncurses and ncursesw.
[liboping.git]
/
src
/
oping.c
diff --git
a/src/oping.c
b/src/oping.c
index
c8d3cdf
..
4a60553
100644
(file)
--- a/
src/oping.c
+++ b/
src/oping.c
@@
-75,17
+75,18
@@
#endif
#include <locale.h>
#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
#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
# define OPING_GREEN 1
# define OPING_YELLOW 2
@@
-159,8
+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;
static int opt_count = -1;
static int opt_send_ttl = 64;
static uint8_t opt_send_qos = 0;
-static int opt_utf8_force = 0;
-static int opt_utf8_disable = 0;
+#if USE_NCURSES
+static int opt_utf8 = 0;
+#endif
static int host_num = 0;
static int host_num = 0;
@@
-305,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"
" -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"
"\noping "PACKAGE_VERSION", http://verplant.org/liboping/\n"
"by Florian octo Forster <octo@verplant.org>\n"
@@
-507,7
+512,11
@@
static int read_options (int argc, char **argv) /* {{{ */
while (1)
{
while (1)
{
- optchar = getopt (argc, argv, "46uUc: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;
if (optchar == -1)
break;
@@
-519,13
+528,6
@@
static int read_options (int argc, char **argv) /* {{{ */
opt_addrfamily = (optchar == '4') ? AF_INET : AF_INET6;
break;
opt_addrfamily = (optchar == '4') ? AF_INET : AF_INET6;
break;
- case 'u':
- opt_utf8_force = 1;
- break;
- case 'U':
- opt_utf8_disable = 1;
- break;
-
case 'c':
{
int new_count;
case 'c':
{
int new_count;
@@
-585,6
+587,15
@@
static int read_options (int argc, char **argv) /* {{{ */
set_opt_send_qos (optarg);
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;
case 'h':
usage_exit (argv[0], 0);
break;
@@
-593,9
+604,6
@@
static int read_options (int argc, char **argv) /* {{{ */
}
}
}
}
- if (opt_utf8_disable && opt_utf8_force)
- fprintf (stderr, "Ignoring contradictory unicode flags\n");
-
return (optind);
} /* }}} read_options */
return (optind);
} /* }}} read_options */
@@
-647,10
+655,22
@@
static void time_calc (struct timespec *ts_dest, /* {{{ */
} /* }}} void time_calc */
#if USE_NCURSES
} /* }}} void time_calc */
#if USE_NCURSES
-static
int unicode_locale
() /* {{{ */
+static
_Bool has_utf8
() /* {{{ */
{
{
- return ( _nc_unicode_locale() || opt_utf8_force ) && !opt_utf8_disable;
-} /* }}} 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)
static int update_prettyping_graph (ping_context_t *ctx, /* {{{ */
double latency, unsigned int sequence)
@@
-667,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;
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;
}
{
hist_symbols_num = hist_symbols_utf8_num;
}
@@
-693,7
+713,7
@@
static int update_prettyping_graph (ping_context_t *ctx, /* {{{ */
assert (index_colors < hist_colors_num);
index_symbols = intensity % hist_symbols_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];
{
color = hist_colors_utf8[index_colors];
symbol = hist_symbols_utf8[index_symbols];
@@
-708,7
+728,7
@@
static int update_prettyping_graph (ping_context_t *ctx, /* {{{ */
wattron (ctx->window, A_BOLD);
wattron (ctx->window, COLOR_PAIR(color));
wattron (ctx->window, A_BOLD);
wattron (ctx->window, COLOR_PAIR(color));
- if (
unicode_locale
())
+ if (
has_utf8
())
{
mvwprintw (ctx->window,
/* y = */ 3,
{
mvwprintw (ctx->window,
/* y = */ 3,