From e2f29c6e438443c3f3def83dbb72effb94f16d94 Mon Sep 17 00:00:00 2001 From: Kazutaka YOKOTA Date: Wed, 12 Jan 2000 12:30:33 +0000 Subject: Make the mouse cursor char code configurable via the CONS_MOUSECTL ioctl. By popular demand. --- sys/dev/syscons/scgfbrndr.c | 16 +++++++--------- sys/dev/syscons/scmouse.c | 18 ++++++++++++++++++ sys/dev/syscons/scvgarndr.c | 16 +++++++--------- sys/dev/syscons/syscons.h | 6 ++++++ 4 files changed, 38 insertions(+), 18 deletions(-) (limited to 'sys/dev/syscons') diff --git a/sys/dev/syscons/scgfbrndr.c b/sys/dev/syscons/scgfbrndr.c index 8a1cdaa87035..7290558f8159 100644 --- a/sys/dev/syscons/scgfbrndr.c +++ b/sys/dev/syscons/scgfbrndr.c @@ -46,10 +46,6 @@ #include -#ifndef SC_MOUSE_CHAR -#define SC_MOUSE_CHAR (0xd0) -#endif - #ifndef SC_RENDER_DEBUG #define SC_RENDER_DEBUG 0 #endif @@ -286,6 +282,7 @@ draw_txtmouse(scr_stat *scp, int x, int y) #ifndef SC_ALT_MOUSE_IMAGE u_char font_buf[128]; u_short cursor[32]; + u_char c; int pos; int xoffset, yoffset; int crtc_addr; @@ -328,17 +325,18 @@ draw_txtmouse(scr_stat *scp, int x, int y) crtc_addr = scp->sc->adp->va_crtc_addr; while (!(inb(crtc_addr + 6) & 0x08)) /* idle */ ; #endif + c = scp->sc->mouse_char; (*vidsw[scp->sc->adapter]->load_font)(scp->sc->adp, 0, 32, font_buf, - SC_MOUSE_CHAR, 4); + c, 4); - sc_vtb_putc(&scp->scr, pos, SC_MOUSE_CHAR, sc_vtb_geta(&scp->scr, pos)); + sc_vtb_putc(&scp->scr, pos, c, sc_vtb_geta(&scp->scr, pos)); /* FIXME: may be out of range! */ - sc_vtb_putc(&scp->scr, pos + scp->xsize, SC_MOUSE_CHAR + 2, + sc_vtb_putc(&scp->scr, pos + scp->xsize, c + 2, sc_vtb_geta(&scp->scr, pos + scp->xsize)); if (x < (scp->xsize - 1)*8) { - sc_vtb_putc(&scp->scr, pos + 1, SC_MOUSE_CHAR + 1, + sc_vtb_putc(&scp->scr, pos + 1, c + 1, sc_vtb_geta(&scp->scr, pos + 1)); - sc_vtb_putc(&scp->scr, pos + scp->xsize + 1, SC_MOUSE_CHAR + 3, + sc_vtb_putc(&scp->scr, pos + scp->xsize + 1, c + 3, sc_vtb_geta(&scp->scr, pos + scp->xsize + 1)); } #else /* SC_ALT_MOUSE_IMAGE */ diff --git a/sys/dev/syscons/scmouse.c b/sys/dev/syscons/scmouse.c index ecaa329ab994..b0663a005f02 100644 --- a/sys/dev/syscons/scmouse.c +++ b/sys/dev/syscons/scmouse.c @@ -31,6 +31,7 @@ #if NSC > 0 +#include #include #include #include @@ -954,6 +955,23 @@ sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, #endif /* SC_NO_CUTPASTE */ break; + case MOUSE_MOUSECHAR: + if (mouse->u.mouse_char < 0) { + mouse->u.mouse_char = scp->sc->mouse_char; + } else { + if (mouse->u.mouse_char >= UCHAR_MAX - 4) + return EINVAL; + s = spltty(); + sc_remove_all_mouse(scp->sc); +#ifndef SC_NO_FONT_LOADING + if (ISTEXTSC(cur_scp) && (cur_scp->font_size != FONT_NONE)) + copy_font(cur_scp, LOAD, cur_scp->font_size, cur_scp->font); +#endif + scp->sc->mouse_char = mouse->u.mouse_char; + splx(s); + } + break; + default: return EINVAL; } diff --git a/sys/dev/syscons/scvgarndr.c b/sys/dev/syscons/scvgarndr.c index 8a1cdaa87035..7290558f8159 100644 --- a/sys/dev/syscons/scvgarndr.c +++ b/sys/dev/syscons/scvgarndr.c @@ -46,10 +46,6 @@ #include -#ifndef SC_MOUSE_CHAR -#define SC_MOUSE_CHAR (0xd0) -#endif - #ifndef SC_RENDER_DEBUG #define SC_RENDER_DEBUG 0 #endif @@ -286,6 +282,7 @@ draw_txtmouse(scr_stat *scp, int x, int y) #ifndef SC_ALT_MOUSE_IMAGE u_char font_buf[128]; u_short cursor[32]; + u_char c; int pos; int xoffset, yoffset; int crtc_addr; @@ -328,17 +325,18 @@ draw_txtmouse(scr_stat *scp, int x, int y) crtc_addr = scp->sc->adp->va_crtc_addr; while (!(inb(crtc_addr + 6) & 0x08)) /* idle */ ; #endif + c = scp->sc->mouse_char; (*vidsw[scp->sc->adapter]->load_font)(scp->sc->adp, 0, 32, font_buf, - SC_MOUSE_CHAR, 4); + c, 4); - sc_vtb_putc(&scp->scr, pos, SC_MOUSE_CHAR, sc_vtb_geta(&scp->scr, pos)); + sc_vtb_putc(&scp->scr, pos, c, sc_vtb_geta(&scp->scr, pos)); /* FIXME: may be out of range! */ - sc_vtb_putc(&scp->scr, pos + scp->xsize, SC_MOUSE_CHAR + 2, + sc_vtb_putc(&scp->scr, pos + scp->xsize, c + 2, sc_vtb_geta(&scp->scr, pos + scp->xsize)); if (x < (scp->xsize - 1)*8) { - sc_vtb_putc(&scp->scr, pos + 1, SC_MOUSE_CHAR + 1, + sc_vtb_putc(&scp->scr, pos + 1, c + 1, sc_vtb_geta(&scp->scr, pos + 1)); - sc_vtb_putc(&scp->scr, pos + scp->xsize + 1, SC_MOUSE_CHAR + 3, + sc_vtb_putc(&scp->scr, pos + scp->xsize + 1, c + 3, sc_vtb_geta(&scp->scr, pos + scp->xsize + 1)); } #else /* SC_ALT_MOUSE_IMAGE */ diff --git a/sys/dev/syscons/syscons.h b/sys/dev/syscons/syscons.h index ac38909ea240..0f3ae5c03d39 100644 --- a/sys/dev/syscons/syscons.h +++ b/sys/dev/syscons/syscons.h @@ -56,6 +56,10 @@ #undef SC_PIXEL_MODE #endif +#ifndef SC_MOUSE_CHAR +#define SC_MOUSE_CHAR (0xd0) +#endif + #ifndef SC_DEBUG_LEVEL #define SC_DEBUG_LEVEL 0 #endif @@ -237,6 +241,8 @@ typedef struct sc_softc { u_char *font_16; #endif + u_char mouse_char; + } sc_softc_t; /* virtual screen */ -- cgit v1.3