diff options
Diffstat (limited to 'src/msdos.c')
-rw-r--r-- | src/msdos.c | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/src/msdos.c b/src/msdos.c index 6c534d6d2d9..da7fab89c7e 100644 --- a/src/msdos.c +++ b/src/msdos.c @@ -951,8 +951,8 @@ static void IT_write_glyphs (struct glyph *str, int str_len) { unsigned char *screen_buf, *screen_bp, *screen_buf_end, *bp; - int unsupported_face = FAST_GLYPH_FACE (Vdos_unsupported_char_glyph); - unsigned unsupported_char= FAST_GLYPH_CHAR (Vdos_unsupported_char_glyph); + int unsupported_face = 0; + unsigned unsupported_char = '\177'; int offset = 2 * (new_pos_X + screen_size_X * new_pos_Y); register int sl = str_len; register int tlen = GLYPH_TABLE_LENGTH; @@ -978,6 +978,13 @@ IT_write_glyphs (struct glyph *str, int str_len) if (str_len <= 0) return; + /* Set up the unsupported character glyph */ + if (!NILP (Vdos_unsupported_char_glyph)) + { + unsupported_char = FAST_GLYPH_CHAR (XINT (Vdos_unsupported_char_glyph)); + unsupported_face = FAST_GLYPH_FACE (XINT (Vdos_unsupported_char_glyph)); + } + screen_buf = screen_bp = alloca (str_len * 2); screen_buf_end = screen_buf + str_len * 2; sf = SELECTED_FRAME(); @@ -1042,7 +1049,7 @@ IT_write_glyphs (struct glyph *str, int str_len) if (! CHAR_VALID_P (ch, 0)) { g = !NILP (Vdos_unsupported_char_glyph) - ? Vdos_unsupported_char_glyph + ? XINT (Vdos_unsupported_char_glyph) : MAKE_GLYPH (sf, '\177', GLYPH_FACE (sf, g)); ch = FAST_GLYPH_CHAR (g); } @@ -1572,7 +1579,7 @@ IT_note_mouse_highlight (struct frame *f, int x, int y) { extern Lisp_Object Qmouse_face; Lisp_Object mouse_face, overlay, position, *overlay_vec; - int len, noverlays, obegv, ozv;; + int noverlays, obegv, ozv;; struct buffer *obuf; /* If we get an out-of-range value, return now; avoid an error. */ @@ -1591,20 +1598,8 @@ IT_note_mouse_highlight (struct frame *f, int x, int y) /* Is this char mouse-active or does it have help-echo? */ XSETINT (position, pos); - /* Put all the overlays we want in a vector in overlay_vec. - Store the length in len. If there are more than 10, make - enough space for all, and try again. */ - len = 10; - overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); - noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL, 0); - if (noverlays > len) - { - len = noverlays; - overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); - noverlays = overlays_at (pos, - 0, &overlay_vec, &len, NULL, NULL, 0); - } - + /* Put all the overlays we want in a vector in overlay_vec. */ + GET_OVERLAYS_AT (pos, overlay_vec, noverlays, NULL, 0); /* Sort overlays into increasing priority order. */ noverlays = sort_overlays (overlay_vec, noverlays, w); @@ -5292,7 +5287,7 @@ syms_of_msdos () DEFVAR_LISP ("dos-unsupported-char-glyph", &Vdos_unsupported_char_glyph, doc: /* *Glyph to display instead of chars not supported by current codepage. This variable is used only by MSDOS terminals. */); - Vdos_unsupported_char_glyph = '\177'; + Vdos_unsupported_char_glyph = make_number ('\177'); #endif #ifndef subprocesses |