summaryrefslogtreecommitdiff
path: root/src/msdos.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>1999-12-30 11:21:53 +0000
committerEli Zaretskii <eliz@gnu.org>1999-12-30 11:21:53 +0000
commit04ee4f45e1368119d95c98453b2f755728d50f81 (patch)
tree10a6551a52b1dfc87dc004b7cb62791d5de19960 /src/msdos.c
parent23bdfc9af669002b44b41982432f7118b1fd3b12 (diff)
downloademacs-04ee4f45e1368119d95c98453b2f755728d50f81.tar.gz
(IT_write_glyphs): Track last changes to struct glyph.
Diffstat (limited to 'src/msdos.c')
-rw-r--r--src/msdos.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/src/msdos.c b/src/msdos.c
index b1cbb6b5580..cd969127fe1 100644
--- a/src/msdos.c
+++ b/src/msdos.c
@@ -782,11 +782,6 @@ IT_write_glyphs (struct glyph *str, int str_len)
int cf, chlen, enclen;
unsigned char workbuf[MAX_MULTIBYTE_LENGTH], *buf;
unsigned ch;
- register GLYPH g = GLYPH_FROM_CHAR_GLYPH (*str);
-
- /* Find the actual glyph to display by traversing the entire
- aliases chain for this glyph. */
- GLYPH_FOLLOW_ALIASES (tbase, tlen, g);
/* Glyphs with GLYPH_MASK_PADDING bit set are actually there
only for the redisplay code to know how many columns does
@@ -798,19 +793,35 @@ IT_write_glyphs (struct glyph *str, int str_len)
}
else
{
+ register GLYPH g = GLYPH_FROM_CHAR_GLYPH (*str);
+ int glyph_not_in_table = 0;
+
+ if (g < 0 || g >= tlen)
+ {
+ /* This glyph doesn't have an entry in Vglyph_table. */
+ ch = str->u.ch;
+ glyph_not_in_table = 1;
+ }
+ else
+ {
+ /* This glyph has an entry in Vglyph_table, so process
+ any aliases before testing for simpleness. */
+ GLYPH_FOLLOW_ALIASES (tbase, tlen, g);
+ ch = FAST_GLYPH_CHAR (g);
+ }
+
/* Convert the character code to multibyte, if they
- requested display via language environment. */
- ch = FAST_GLYPH_CHAR (g);
- /* We only want to convert unibyte characters to multibyte
- in unibyte buffers! Otherwise, the 8-bit code might come
- from the display table set up to display foreign characters. */
+ requested display via language environment. We only want
+ to convert unibyte characters to multibyte in unibyte
+ buffers! Otherwise, the 8-bit value in CH came from the
+ display table set up to display foreign characters. */
if (SINGLE_BYTE_CHAR_P (ch) && convert_unibyte_characters
&& (ch >= 0240
|| (ch >= 0200 && !NILP (Vnonascii_translation_table))))
ch = unibyte_char_to_multibyte (ch);
/* Invalid characters are displayed with a special glyph. */
- if (! GLYPH_CHAR_VALID_P (ch))
+ if (! CHAR_VALID_P (ch, 0))
{
g = !NILP (Vdos_unsupported_char_glyph)
? Vdos_unsupported_char_glyph
@@ -824,7 +835,7 @@ IT_write_glyphs (struct glyph *str, int str_len)
if (cf != screen_face)
IT_set_face (cf); /* handles invalid faces gracefully */
- if (GLYPH_SIMPLE_P (tbase, tlen, g))
+ if (glyph_not_in_table || GLYPH_SIMPLE_P (tbase, tlen, g))
{
/* We generate the multi-byte form of CH in WORKBUF. */
chlen = CHAR_STRING (ch, workbuf);