Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ mouse(7) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought



mouse(7)               DEVICES AND MODULES               mouse(7)



NAME
     mouse - NEWS mouse device interface

SYNOPSIS
     /dev/mouse

     #include <sys/time.h>
     #include <io/mouse.h>

DESCRIPTION
     Mouse is the mouse device interface on NEWS.

     The interface provides two modes, sample or event. In  event
     mode, the inteface maintains a queue of mouse event reports.
     When mouse is opened, the interface is set  to  sample  mode
     and mouse coordinates is set to (0, 0).  Mode can be changed
     using ioctl() described below.  When mouse  is  closed,  the
     interface  is  reset  to  sample mode.  When the mode of the
     interface is set from event mode to sample mode, mouse event
     queue is flushed.

     In sample mode, mouse data returned by read() system call is
     defined in headef file <newsiop/msreg.h> as follows,
          struct ms_data {
              int     md_sw;  /* mouse button */
          #define     MS_BUTNL    0x04
          #define     MS_BUTNM    0x02
          #define     MS_BUTNR    0x01
              int     md_x;   /* x coordinate */
              int     md_y;   /* y coordinate */
          };
     md_sw encodes the mouse button status and down  position  is
     encoded as '1'(i.e, if ( md_sw & MS_BUTNL) is true, the left
     button is in down positon and so on).  The number  of  mouse
     data   returned   is  multiple  of  sizeof(struct  ms_data),
     although request for multiple mouse data at a  time  is  not
     useful in this mode.

     In event mode, mouse data returned by read() system call  is
     mouse event report defined as follows,
          /*
           * mouse event report
           *   event report is queued when mouse is put in event mode
           *   by using MSIOCSETEM ioctl()
           */
          struct ms_event {
              struct ms_data    mse_data;   /* mouse X, Y and button status */
              char              mse_trig;   /* trigger that caused this event */
          #define MSE_MOTION    0           /* mouse movement */
          #define MSE_BUTTON    1           /* mouse buttons */
          #define MSE_KEY       2           /* keyboard keys */
              char              mse_dir;    /* key or button direction */



Sony NEWS Distribution                                          1





mouse(7)               DEVICES AND MODULES               mouse(7)



          #define MSE_DOWN      0           /* down */
          #define MSE_UP        1           /* up */
          #define MSE_UNKOWN    2           /* unkown */
              char              mse_code;   /* key or button code */
          #define MSE_BUTNR     0           /* right button */
          #define MSE_BUTNM     1           /* middle button */
          #define MSE_BUTNL     2           /* left button */
              struct timeval    mse_time;   /* time when this event occurred */
          };
     The number of mouse event reports returned by read()  system
     call is multiple of sizeof(struct ms_event).  Currently, the
     number of mouse event report queue maintained in the  inter-
     face  is  128.  Mse_data is a mouse data same as returned in
     sample mode.  Mse_trig is a trigger  which  has  caused  the
     event,  and  one  of mouse motion (MSE_MOTION), mouse button
     status changed (MSE_BUTTUN), or keyborad key status  changed
     (MSE_KEY).   Mse_dir  is the direction (up or down) of mouse
     button or  keyboard  key  change  and  not  meaningful  when
     mse_trig  is MSE_MOTION.  mse_code is a code of mouse button
     (if mse_trig is MSE_BUTTON) or keyboard key (if mse_trig  is
     MSE_KEY).  See <io/mouse.h> for key code.  Finally, mse_time
     is the time when this event occurred.  The format of time is
     defined in <sys/time.h>

     You can simulate mouse motion by writing to mouse. Data for-
     mat for mouse position to write is,
          struct ms_coord {
              int     mc_x;   /* x coordinate */
              int     mc_y;   /* y coordinate */
          } ms_coord;

IOCTL
     MSIOCSETEM     exchanges between two modes  and  defines  an
                    event mask.

          #define     MS_EMEVENT  0x80    /* 1 -> event mode */
          #define     MS_EMKEY    0x40    /* keyboard key changes -> event */
          #define     MS_EMMOTION 0x10    /* coordinates changes -> event */
          #define     MS_EMBUTNL  0x04    /* left button changes -> event */
          #define     MS_EMBUTNM  0x02    /* mid button changes -> event */
          #define     MS_EMBUTNR  0x01    /* right button changes -> event */

          int eventmask;
          ioctl(fildes, MSIOCSETEM, &eventmask);

     MS_EMEVENT controls mode.  If MS_EMEVENT is OFF, the  inter-
     face  is  set to sample mode, and if it is ON, the interface
     is set to event mode.  When MS_EMEVENT is ON, the other bits
     specified which trigger will cause events.

     MSIOCGETEM     get current setting of event mask.




Sony NEWS Distribution                                          2





mouse(7)               DEVICES AND MODULES               mouse(7)



                    int eventmask;
                    ioctl(fildes, MSIOCGETEM, &eventmask);


     MSIOCSETXY     set current mouse position.

                    struct ms_coord ms_coord;
                    ioctl(fildes, MSIOCSETXY, &ms_coord);


     MSIOCFLUSH     flush the event queue.
                    ioctl(fildes, MSIOCFLUSH);

     MSIOCSETPARAM  set mouse parameter.  A  mouse  paramter  has
                    two  componets,  mp_delta  and mp_mag. When a
                    mouse is moved  more  than  mp_delta,  amount
                    that   exceeds   mp_delta  is  multiplied  by
                    mp_mag. The initial setting of mp_delta is  5
                    and mp_mag 3.

          /* strct ms_param:
           *   when mouse is moved more than mp_delta, amount that exceeds
           *   the mp_delta is magnified by mp_mag(>0)
           */
          struct ms_param {
              int    mp_delta;     /* threshold for magnification */
              int      mp_mag;     /* magnifying factor */
          };

          struct msparam msparam;
          ioctl(fildes, MSIOCSETPARAM, &msparam);


FILES
     /dev/mouse




















Sony NEWS Distribution                                          3



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026