summaryrefslogtreecommitdiffstats
path: root/sys/dev/syscons
diff options
context:
space:
mode:
authoryokota <yokota@FreeBSD.org>2000-01-12 12:30:33 +0000
committeryokota <yokota@FreeBSD.org>2000-01-12 12:30:33 +0000
commitd7a68849c148b5b010836c7f0204f35e8c609465 (patch)
tree0bb4b6407b3d6a985d895dff3260d28e567fa771 /sys/dev/syscons
parent639e3cda8a1ad1f67c22408c63e3a929b4d7ebb2 (diff)
downloadFreeBSD-src-d7a68849c148b5b010836c7f0204f35e8c609465.zip
FreeBSD-src-d7a68849c148b5b010836c7f0204f35e8c609465.tar.gz
Make the mouse cursor char code configurable via the CONS_MOUSECTL
ioctl. By popular demand.
Diffstat (limited to 'sys/dev/syscons')
-rw-r--r--sys/dev/syscons/scgfbrndr.c16
-rw-r--r--sys/dev/syscons/scmouse.c18
-rw-r--r--sys/dev/syscons/scvgarndr.c16
-rw-r--r--sys/dev/syscons/syscons.h6
4 files changed, 38 insertions, 18 deletions
diff --git a/sys/dev/syscons/scgfbrndr.c b/sys/dev/syscons/scgfbrndr.c
index 8a1cdaa..7290558 100644
--- a/sys/dev/syscons/scgfbrndr.c
+++ b/sys/dev/syscons/scgfbrndr.c
@@ -46,10 +46,6 @@
#include <isa/isareg.h>
-#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 ecaa329..b0663a0 100644
--- a/sys/dev/syscons/scmouse.c
+++ b/sys/dev/syscons/scmouse.c
@@ -31,6 +31,7 @@
#if NSC > 0
+#include <limits.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/conf.h>
@@ -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 8a1cdaa..7290558 100644
--- a/sys/dev/syscons/scvgarndr.c
+++ b/sys/dev/syscons/scvgarndr.c
@@ -46,10 +46,6 @@
#include <isa/isareg.h>
-#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 ac38909..0f3ae5c 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 */
OpenPOWER on IntegriCloud