talk: Non-ASCII characters.

This commit is contained in:
Mats Erik Andersson
2013-04-05 11:09:50 +02:00
parent 58d533764d
commit 4850ad628e
2 changed files with 22 additions and 3 deletions

View File

@@ -1,3 +1,11 @@
2013-04-05 Mats Erik Andersson <gnu@gisladisker.se>
talk: Non-ASCII characters.
* talk/display.c: Include <ctype.h>.
(display): Check printability with isprint().
Prevent sign extension of char as integer.
2013-04-05 Mats Erik Andersson <gnu@gisladisker.se>
talk: Address resolution.

View File

@@ -54,6 +54,7 @@
#include <config.h>
#include <ctype.h>
#include "talk.h"
xwin_t my_win;
@@ -202,7 +203,18 @@ display (register xwin_t * win, register char *text, int size)
/* check for wraparound */
xscroll (win, 0);
}
if (*text < ' ' && *text != '\t')
/*
* Printable characters, SP, and TAB are printed
* verbatim. Characters beyond the ASCII table
* must be handled. Beware of sign extension!
*
* The locale setting is in effect when testing
* printability of any input character.
*/
if (isprint (*text & 0xff) || *text == '\t')
waddch (win->x_win, *text & 0xff);
else
{
waddch (win->x_win, '^');
getyx (win->x_win, win->x_line, win->x_col);
@@ -211,8 +223,7 @@ display (register xwin_t * win, register char *text, int size)
cch = (*text & 63) + 64;
waddch (win->x_win, cch);
}
else
waddch (win->x_win, *text);
getyx (win->x_win, win->x_line, win->x_col);
text++;
}