diff src/msdos.c @ 27038:e168198350dd

(IT_write_glyphs): Track last changes to struct glyph.
author Eli Zaretskii <eliz@gnu.org>
date Thu, 30 Dec 1999 11:20:29 +0000
parents 3956e87adf2d
children 872992e41f21
line wrap: on
line diff
--- 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);