aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/syscons
diff options
context:
space:
mode:
authorKazutaka YOKOTA <yokota@FreeBSD.org>2000-01-12 12:30:33 +0000
committerKazutaka YOKOTA <yokota@FreeBSD.org>2000-01-12 12:30:33 +0000
commite2f29c6e438443c3f3def83dbb72effb94f16d94 (patch)
tree9505ae7d8249e6750e42e1f00eba4cfad4d669c4 /sys/dev/syscons
parentd404cb51eeaa1f9c4e5fc9c16ef38bba0a0d785e (diff)
Notes
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 8a1cdaa87035..7290558f8159 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 ecaa329ab994..b0663a005f02 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 8a1cdaa87035..7290558f8159 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 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 */