Erast Benson wrote:
This is a nice feature. But this is not what I wanted. I'd like to have
some way to distribute "cooked" mouse events to text only applications,
like screen, ncurses-based apps, generic console, etc.

You'ld just need to put code into curses or another library to read the
VUID events from /dev/mouse, which are pretty cooked already.   All the
details of handling USB vs. PS2 vs. SPARC serial mouse are hidden in the
kernel modules, as is handling multiple mice in S10U1 & Nevada, and all
you need to know is to open /dev/mouse and read the motion and button
events.

For example, if you look in Xorg 6.9's Solaris mouse code in
xc/programs/Xserver/hw/xfree86/os-support/sunos/sun_mouse.c
the event decoding is simply reading from /dev/mouse in chunks
the size of the Firm_event defined in <sys/vuid_event.h> and
parsing the simple event types:

if (pVuidMse->event.id >= BUT_FIRST && pVuidMse->event.id <= BUT_LAST) { /* button */
            int butnum = pVuidMse->event.id - BUT_FIRST;

            if (butnum < 3)
                butnum = 2 - butnum;
            if (!pVuidMse->event.value)
                buttons &= ~(1 << butnum);
            else
                buttons |= (1 << butnum);
        } else if (pVuidMse->event.id >= VLOC_FIRST &&
                   pVuidMse->event.id <= VLOC_LAST) {
            /* axis */
            int delta = pVuidMse->event.value;
            switch(pVuidMse->event.id) {
            case LOC_X_DELTA:
                dx += delta;
                break;
            case LOC_Y_DELTA:
                dy -= delta;
                break;
            case LOC_X_ABSOLUTE:
                if (absXset) {
                    vuidFlushAbsEvents(pInfo, absX, absY, &absXset, &absYset);
                }
                absX = delta;
                absXset = TRUE;
                break;
            case LOC_Y_ABSOLUTE:
                if (absYset) {
                    vuidFlushAbsEvents(pInfo, absX, absY, &absXset, &absYset);
                }
                absY = delta;
                absYset = TRUE;
                break;
            }
        }

Should be trivial to translate into the appropriate code in curses or similar
libraries.  There's even events for wheels on wheel mice.

--
        -Alan Coopersmith-           [EMAIL PROTECTED]
         Sun Microsystems, Inc. - X Window System Engineering
_______________________________________________
opensolaris-discuss mailing list
[email protected]

Reply via email to