# HG changeset patch # User Eli Zaretskii # Date 946552829 0 # Node ID e168198350dd63414a878848f2c99b4db5f4a7a5 # Parent ed3145e6ffec97d3e1c896dcbf54eca373957cc4 (IT_write_glyphs): Track last changes to struct glyph. diff -r ed3145e6ffec -r e168198350dd src/msdos.c --- a/src/msdos.c Thu Dec 30 08:26:31 1999 +0000 +++ b/src/msdos.c Thu Dec 30 11:20:29 1999 +0000 @@ -782,11 +782,6 @@ 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 @@ } 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 @@ 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);