diff options
author | yokota <yokota@FreeBSD.org> | 2000-01-15 15:25:43 +0000 |
---|---|---|
committer | yokota <yokota@FreeBSD.org> | 2000-01-15 15:25:43 +0000 |
commit | 5db3ba7b9b236e9d8bbec14080167428916e1668 (patch) | |
tree | 17ba6cb453aac84fa60f284601f3294270a28946 /sys/dev/syscons/scmouse.c | |
parent | 164674f31b90b79c19ca15d4ee3fac064d785c59 (diff) | |
download | FreeBSD-src-5db3ba7b9b236e9d8bbec14080167428916e1668.zip FreeBSD-src-5db3ba7b9b236e9d8bbec14080167428916e1668.tar.gz |
This is the 3rd stage of syscons code reorganization.
- Split terminal emulation code from the main part of the driver so
that we can have alternative terminal emulator modules if we like in
the future. (We are not quite there yet, though.)
- Put sysmouse related code in a separate file, thus, simplifying the
main part of the driver.
As some files are added to the source tree, you need to run config(8)
before you compile a new kernel next time.
You shouldn't see any functional change by this commit; this is only
internal code reorganization.
Diffstat (limited to 'sys/dev/syscons/scmouse.c')
-rw-r--r-- | sys/dev/syscons/scmouse.c | 216 |
1 files changed, 15 insertions, 201 deletions
diff --git a/sys/dev/syscons/scmouse.c b/sys/dev/syscons/scmouse.c index b0663a0..e55946c 100644 --- a/sys/dev/syscons/scmouse.c +++ b/sys/dev/syscons/scmouse.c @@ -38,7 +38,6 @@ #include <sys/signalvar.h> #include <sys/proc.h> #include <sys/tty.h> -#include <sys/kernel.h> #include <sys/malloc.h> #include <machine/console.h> @@ -73,16 +72,13 @@ typedef struct old_mouse_info { } u; } old_mouse_info_t; -/* local variables */ #ifndef SC_NO_SYSMOUSE -static int mouse_level; /* sysmouse protocol level */ -static mousestatus_t mouse_status = { 0, 0, 0, 0, 0, 0 }; + +/* local variables */ static int cut_buffer_size; static u_char *cut_buffer; -#endif /* SC_NO_SYSMOUE */ /* local functions */ -#ifndef SC_NO_SYSMOUSE static void set_mouse_pos(scr_stat *scp); #ifndef SC_NO_CUTPASTE static int skip_spc_right(scr_stat *scp, int p); @@ -95,7 +91,6 @@ static void mouse_cut_line(scr_stat *scp); static void mouse_cut_extend(scr_stat *scp); static void mouse_paste(scr_stat *scp); #endif /* SC_NO_CUTPASTE */ -#endif /* SC_NO_SYSMOUE */ #ifndef SC_NO_CUTPASTE /* allocate a cut buffer */ @@ -120,15 +115,6 @@ sc_alloc_cut_buffer(scr_stat *scp, int wait) } #endif /* SC_NO_CUTPASTE */ -#ifndef SC_NO_SYSMOUSE - -/* modify the sysmouse software level */ -void -sc_mouse_set_level(int level) -{ - mouse_level = level; -} - /* move mouse */ void sc_mouse_move(scr_stat *scp, int x, int y) @@ -612,39 +598,21 @@ int sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, struct proc *p) { - + mouse_info_t *mouse; + mouse_info_t buf; + scr_stat *cur_scp; scr_stat *scp; int s; - int i; + int f; - /* scp == NULL, if tp == sc_get_mouse_tty() (/dev/sysmouse) */ scp = SC_STAT(tp->t_dev); switch (cmd) { case CONS_MOUSECTL: /* control mouse arrow */ case OLD_CONS_MOUSECTL: - { - /* MOUSE_BUTTON?DOWN -> MOUSE_MSC_BUTTON?UP */ - static int butmap[8] = { - MOUSE_MSC_BUTTON1UP | MOUSE_MSC_BUTTON2UP | MOUSE_MSC_BUTTON3UP, - MOUSE_MSC_BUTTON2UP | MOUSE_MSC_BUTTON3UP, - MOUSE_MSC_BUTTON1UP | MOUSE_MSC_BUTTON3UP, - MOUSE_MSC_BUTTON3UP, - MOUSE_MSC_BUTTON1UP | MOUSE_MSC_BUTTON2UP, - MOUSE_MSC_BUTTON2UP, - MOUSE_MSC_BUTTON1UP, - 0, - }; - mouse_info_t *mouse = (mouse_info_t*)data; - mouse_info_t buf; - scr_stat *cur_scp; - struct tty *mtty; - int f; - - if (scp == NULL) - return ENOTTY; + mouse = (mouse_info_t*)data; if (cmd == OLD_CONS_MOUSECTL) { static u_char swapb[] = { 0, 4, 2, 6, 1, 5, 3, 7 }; old_mouse_info_t *old_mouse = (old_mouse_info_t *)data; @@ -767,45 +735,9 @@ sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, } splx(s); - mouse_status.dx += mouse->u.data.x; - mouse_status.dy += mouse->u.data.y; - mouse_status.dz += mouse->u.data.z; - if (mouse->operation == MOUSE_ACTION) - mouse_status.button = mouse->u.data.buttons; - mouse_status.flags |= - ((mouse->u.data.x || mouse->u.data.y || mouse->u.data.z) ? - MOUSE_POSCHANGED : 0) - | (mouse_status.obutton ^ mouse_status.button); - if (mouse_status.flags == 0) + if (sysmouse_event(mouse) == 0) return 0; - mtty = sc_get_mouse_tty(); - if (mtty->t_state & TS_ISOPEN) { - u_char buf[MOUSE_SYS_PACKETSIZE]; - - /* the first five bytes are compatible with MouseSystems' */ - buf[0] = MOUSE_MSC_SYNC - | butmap[mouse_status.button & MOUSE_STDBUTTONS]; - i = imax(imin(mouse->u.data.x, 255), -256); - buf[1] = i >> 1; - buf[3] = i - buf[1]; - i = -imax(imin(mouse->u.data.y, 255), -256); - buf[2] = i >> 1; - buf[4] = i - buf[2]; - for (i = 0; i < MOUSE_MSC_PACKETSIZE; i++) - (*linesw[mtty->t_line].l_rint)(buf[i], mtty); - if (mouse_level >= 1) { /* extended part */ - i = imax(imin(mouse->u.data.z, 127), -128); - buf[5] = (i >> 1) & 0x7f; - buf[6] = (i - (i >> 1)) & 0x7f; - /* buttons 4-10 */ - buf[7] = (~mouse_status.button >> 3) & 0x7f; - for (i = MOUSE_MSC_PACKETSIZE; - i < MOUSE_SYS_PACKETSIZE; i++) - (*linesw[mtty->t_line].l_rint)(buf[i], mtty); - } - } - /* * If any buttons are down or the mouse has moved a lot, * stop the screen saver. @@ -862,30 +794,13 @@ sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, if (SC_VTY(tp->t_dev) != SC_CONSOLECTL) return ENOTTY; #endif - if (mouse->u.event.value > 0) { + if (mouse->u.event.value > 0) cur_scp->mouse_buttons |= mouse->u.event.id; - mouse_status.button |= mouse->u.event.id; - } else { + else cur_scp->mouse_buttons &= ~mouse->u.event.id; - mouse_status.button &= ~mouse->u.event.id; - } - mouse_status.flags |= mouse_status.obutton ^ mouse_status.button; - if (mouse_status.flags == 0) - return 0; - mtty = sc_get_mouse_tty(); - if (mtty->t_state & TS_ISOPEN) { - u_char buf[MOUSE_SYS_PACKETSIZE]; - - buf[0] = MOUSE_MSC_SYNC - | butmap[mouse_status.button & MOUSE_STDBUTTONS]; - buf[7] = (~mouse_status.button >> 3) & 0x7f; - buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0; - for (i = 0; - i < ((mouse_level >= 1) ? MOUSE_SYS_PACKETSIZE - : MOUSE_MSC_PACKETSIZE); i++) - (*linesw[mtty->t_line].l_rint)(buf[i], mtty); - } + if (sysmouse_event(mouse) == 0) + return 0; /* if a button is held down, stop the screen saver */ if (mouse->u.event.value > 0) @@ -961,11 +876,12 @@ sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, } else { if (mouse->u.mouse_char >= UCHAR_MAX - 4) return EINVAL; - s = spltty(); + 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); + sc_load_font(cur_scp, 0, cur_scp->font_size, cur_scp->font, + cur_scp->sc->mouse_char, 4); #endif scp->sc->mouse_char = mouse->u.mouse_char; splx(s); @@ -979,108 +895,6 @@ sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, return 0; } - /* MOUSE_XXX: /dev/sysmouse ioctls */ - case MOUSE_GETHWINFO: /* get device information */ - { - mousehw_t *hw = (mousehw_t *)data; - - if (tp != sc_get_mouse_tty()) - return ENOTTY; - hw->buttons = 10; /* XXX unknown */ - hw->iftype = MOUSE_IF_SYSMOUSE; - hw->type = MOUSE_MOUSE; - hw->model = MOUSE_MODEL_GENERIC; - hw->hwid = 0; - return 0; - } - - case MOUSE_GETMODE: /* get protocol/mode */ - { - mousemode_t *mode = (mousemode_t *)data; - - if (tp != sc_get_mouse_tty()) - return ENOTTY; - mode->level = mouse_level; - switch (mode->level) { - case 0: - /* at this level, sysmouse emulates MouseSystems protocol */ - mode->protocol = MOUSE_PROTO_MSC; - mode->rate = -1; /* unknown */ - mode->resolution = -1; /* unknown */ - mode->accelfactor = 0; /* disabled */ - mode->packetsize = MOUSE_MSC_PACKETSIZE; - mode->syncmask[0] = MOUSE_MSC_SYNCMASK; - mode->syncmask[1] = MOUSE_MSC_SYNC; - break; - - case 1: - /* at this level, sysmouse uses its own protocol */ - mode->protocol = MOUSE_PROTO_SYSMOUSE; - mode->rate = -1; - mode->resolution = -1; - mode->accelfactor = 0; - mode->packetsize = MOUSE_SYS_PACKETSIZE; - mode->syncmask[0] = MOUSE_SYS_SYNCMASK; - mode->syncmask[1] = MOUSE_SYS_SYNC; - break; - } - return 0; - } - - case MOUSE_SETMODE: /* set protocol/mode */ - { - mousemode_t *mode = (mousemode_t *)data; - - if (tp != sc_get_mouse_tty()) - return ENOTTY; - if ((mode->level < 0) || (mode->level > 1)) - return EINVAL; - sc_mouse_set_level(mode->level); - return 0; - } - - case MOUSE_GETLEVEL: /* get operation level */ - if (tp != sc_get_mouse_tty()) - return ENOTTY; - *(int *)data = mouse_level; - return 0; - - case MOUSE_SETLEVEL: /* set operation level */ - if (tp != sc_get_mouse_tty()) - return ENOTTY; - if ((*(int *)data < 0) || (*(int *)data > 1)) - return EINVAL; - sc_mouse_set_level(*(int *)data); - return 0; - - case MOUSE_GETSTATUS: /* get accumulated mouse events */ - if (tp != sc_get_mouse_tty()) - return ENOTTY; - s = spltty(); - *(mousestatus_t *)data = mouse_status; - mouse_status.flags = 0; - mouse_status.obutton = mouse_status.button; - mouse_status.dx = 0; - mouse_status.dy = 0; - mouse_status.dz = 0; - splx(s); - return 0; - -#if notyet - case MOUSE_GETVARS: /* get internal mouse variables */ - case MOUSE_SETVARS: /* set internal mouse variables */ - if (tp != sc_get_mouse_tty()) - return ENOTTY; - return ENODEV; -#endif - - case MOUSE_READSTATE: /* read status from the device */ - case MOUSE_READDATA: /* read data from the device */ - if (tp != sc_get_mouse_tty()) - return ENOTTY; - return ENODEV; - } - return ENOIOCTL; } |