> Good catch. We use the isgraph() function to test whether a
> character has a printable representation, and isgraph() says that
> blanks do not have a printable representation.
Or, rather, it says that blanks aren't graphical characters.
"isprint()", however, should say that blanks are printable:
isprint() tests for any printing character, including
space (" ").
isgraph() tests for any printing character, except
space.
(from Solaris 2.5.1, but the ANSI C standard says
The "isprint" function tests for any printing character
including space (' ').
and says earlier
The term "printing character" refers to a member of a
implementation-defined set of characters, each of which occupies
one printing position on a display device; ...
so presumably that would *not* include tabs and form feeds and vertical
tabs and so on - it doesn't do so on Solaris 2.5.1, at least).
Attached is a patch that uses "isprint()" (rather than "isgraph()" plus
a check for space), and also uses, as per my other mail, "guchar" rather
than "gchar" for characters in "packet_hex_print()" (which should keep
it from exhibiting random behavior on bytes with the 8th bit set).
Index: proto_draw.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/gtk/proto_draw.c,v
retrieving revision 1.16
diff -c -r1.16 proto_draw.c
*** proto_draw.c 2000/04/27 17:04:37 1.16
--- proto_draw.c 2000/04/27 20:32:05
***************
*** 88,94 ****
packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen,
char_enc encoding) {
gint i = 0, j, k, cur;
! gchar line[128], hexchars[] = "0123456789abcdef", c = '\0';
GdkFont *cur_font, *new_font;
gint bend = -1;
--- 88,94 ----
packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen,
char_enc encoding) {
gint i = 0, j, k, cur;
! guchar line[128], hexchars[] = "0123456789abcdef", c = '\0';
GdkFont *cur_font, *new_font;
gint bend = -1;
***************
*** 155,161 ****
else {
g_assert_not_reached();
}
! line[cur++] = (isgraph(c) || c == ' ') ? c : '.';
} else {
line[cur++] = ' ';
}
--- 155,161 ----
else {
g_assert_not_reached();
}
! line[cur++] = (isprint(c)) ? c : '.';
} else {
line[cur++] = ' ';
}