Annotation of Net2/arch/vax/uba/qduser.h, revision 1.1

1.1     ! root        1: /*-
        !             2:  * Copyright (c) 1982, 1986 The Regents of the University of California.
        !             3:  * All rights reserved.
        !             4:  *
        !             5:  * Redistribution and use in source and binary forms, with or without
        !             6:  * modification, are permitted provided that the following conditions
        !             7:  * are met:
        !             8:  * 1. Redistributions of source code must retain the above copyright
        !             9:  *    notice, this list of conditions and the following disclaimer.
        !            10:  * 2. Redistributions in binary form must reproduce the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer in the
        !            12:  *    documentation and/or other materials provided with the distribution.
        !            13:  * 3. All advertising materials mentioning features or use of this software
        !            14:  *    must display the following acknowledgement:
        !            15:  *     This product includes software developed by the University of
        !            16:  *     California, Berkeley and its contributors.
        !            17:  * 4. Neither the name of the University nor the names of its contributors
        !            18:  *    may be used to endorse or promote products derived from this software
        !            19:  *    without specific prior written permission.
        !            20:  *
        !            21:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            25:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            31:  * SUCH DAMAGE.
        !            32:  *
        !            33:  *     @(#)qduser.h    7.1 (Berkeley) 5/9/91
        !            34:  */
        !            35: 
        !            36: /* derived from: @(#)qduser.h  6.1     (ULTRIX)        11/24/87       */
        !            37: /************************************************************************
        !            38:  *                                                                     *
        !            39:  *                     Copyright (c) 1986 by                           *
        !            40:  *             Digital Equipment Corporation, Maynard, MA              *
        !            41:  *                     All rights reserved.                            *
        !            42:  *                                                                     *
        !            43:  *   This software is furnished under a license and may be used and    *
        !            44:  *   copied  only  in accordance with the terms of such license and    *
        !            45:  *   with the  inclusion  of  the  above  copyright  notice.   This    *
        !            46:  *   software  or  any  other copies thereof may not be provided or    *
        !            47:  *   otherwise made available to any other person.  No title to and    *
        !            48:  *   ownership of the software is hereby transferred.                  *
        !            49:  *                                                                     *
        !            50:  *   The information in this software is subject to change  without    *
        !            51:  *   notice  and should not be construed as a commitment by Digital    *
        !            52:  *   Equipment Corporation.                                            *
        !            53:  *                                                                     *
        !            54:  *   Digital assumes no responsibility for the use  or  reliability    *
        !            55:  *   of its software on equipment which is not supplied by Digital.    *
        !            56:  *                                                                     *
        !            57:  ************************************************************************/
        !            58: 
        !            59: /***************************************************************************
        !            60: *
        !            61: *      QDUSER...
        !            62: *      This file defines values shared between the driver and a client
        !            63: *
        !            64: ***************************************************************************/
        !            65: 
        !            66: /***************************************************************************
        !            67: *      revision history:
        !            68: ****************************************************************************
        !            69: *
        !            70: * 21 jul 86  ram    fixed define of CURSOR_MIN_Y
        !            71: * 25 nov 85  longo  added macro and bit defines for DMA error flags
        !            72: * 11 nov 85  longo  renamed _vs_eventqueue to "qdinput" struct
        !            73: * 23 oct 85  longo  added more defines to the DMA stuff
        !            74: * 17 oct 85  longo  changed "struct rgb" chars to be unsigned
        !            75: * 16 oct 85  longo  added new TABLET support definitions
        !            76: * 15 oct 85  longo  re-wrote DMA queue access macros
        !            77: * 08 oct 85  longo  added status flag manipulation macros to DMA stuff
        !            78: * 02 oct 85  longo  added support for color map write buffer loading
        !            79: * 26 sep 85  longo  removed adder sertup params from DMA request struct
        !            80: * 23 sep 85  longo  added DMA queue access macros
        !            81: * 30 aug 85  longo  fixed crock in "qdiobuf" struct compile-time sizing. Also
        !            82: *                  removed DMAcontrol struct from DMA buffer for field test
        !            83: * 26 aug 85  longo  put in conditional include of "qevent.h" for user prg's
        !            84: * 18 jul 85  longo  changed semantics so that head is tail and tail is head
        !            85: * 12 jul 85  longo  moved "mouse_report" struct and defs over to qd_data.c
        !            86: * 11 jul 85  longo  added device coordinate to gate array cursor coordinate
        !            87: *                  transformation macros
        !            88: * 03 jul 85  longo  changed kernel typdef's for data types to long-hand
        !            89: * 10 may 85  longo  created
        !            90: *
        !            91: ***************************************************************************/
        !            92: 
        !            93: #ifdef KERNEL
        !            94: #include "../uba/qevent.h"             /* include event struct defs */
        !            95: #else
        !            96: #include <vax/uba/qevent.h>
        !            97: #endif
        !            98: 
        !            99: /*---------------------
        !           100: * QDSS device map */
        !           101: 
        !           102:        struct qdmap {                  /* map of register blocks in QDSS */
        !           103: 
        !           104:            char *template;
        !           105:            char *adder;
        !           106:            char *dga;
        !           107:            char *duart;
        !           108:            char *memcsr;
        !           109:            char *red;
        !           110:            char *blue;
        !           111:            char *green;
        !           112:        };
        !           113: 
        !           114: /*--------------------------------------------
        !           115: * DGA CSR bit definitions and register map */
        !           116: 
        !           117: #define DMADONE                0x8000          /* DMA done status */
        !           118: #define SET_DONE_FIFO  0x4000          /* set DMADONE when FIFO empty.. */
        !           119:                                        /* ..AND count = 0 */
        !           120: 
        !           121: #define PTOB_ENB       0x0600          /* host-to-bitmap DMA xfer */
        !           122: #define BTOP_ENB       0x0400          /* bitmap-to-host DMA xfer */
        !           123: #define DL_ENB         0x0200          /* display list DMA xfer */
        !           124: #define HALT           0x0000          /* halt DGA */
        !           125: 
        !           126: #define BYTE_DMA       0x0100          /* byte/word DMA xfer */
        !           127: 
        !           128: #define DMA_ERR                0x0080          /* DMA error bits */
        !           129: #define PARITY_ERR     0x0040          /* memory parity error in DMA */
        !           130: #define BUS_ERR                0x0020          /* bus timeout error in DMA */
        !           131: 
        !           132: #define GLOBAL_IE      0x0004          /* global interrupt enable */
        !           133: #define DMA_IE         0x0002          /* DMA interrupt enable */
        !           134: #define CURS_ENB       0x0001          /* cursor enable */
        !           135: 
        !           136: /* QDSS memcsr bit definitions */
        !           137: 
        !           138: #define        UNBLANK                 0x0020
        !           139: #define SYNC_ON                        0x0008
        !           140: 
        !           141:        struct dga {
        !           142: 
        !           143:            unsigned short csr;
        !           144:            unsigned short adrs_lo;     /* destination address of bitmap to */
        !           145:            unsigned short adrs_hi;     /*   host DMA */
        !           146:            unsigned short bytcnt_lo;   /* byte length of requested DMA */
        !           147:            unsigned short bytcnt_hi;   /* (WO = bytcnt) (RO = fifo count) */
        !           148:            unsigned short fifo;        /* FIFO register */
        !           149:            unsigned short x_cursor;    /* cursor position registers */
        !           150:            unsigned short y_cursor;
        !           151:            unsigned short ivr;         /* interrupt vector register */
        !           152:            unsigned short memadr;      /* memory base address register */
        !           153:        };
        !           154: 
        !           155: /*-------------------------------------------------------------------------
        !           156: * macros to transform device coordinates to hardware cursor coordinates */
        !           157: 
        !           158: #define CURS_MIN_X     232     /* device coordinate x = 0 */
        !           159: #define CURS_MIN_Y     16      /* device coordinate y = 0 */
        !           160: 
        !           161: #define TRANX(x) ( -(((int)(x)+CURS_MIN_X) & ~0x0003) | \
        !           162:                   (((int)(x)+CURS_MIN_X) & 0x0003) )
        !           163: 
        !           164: #define TRANY(y) ( -((y)+CURS_MIN_Y) )
        !           165: 
        !           166: /*********************************************************************
        !           167: *
        !           168: *      EVENT QUEUE DEFINITIONS
        !           169: *
        !           170: **********************************************************************
        !           171: * most of the event queue definitions are found in "qevent.h".  But a
        !           172: * few things not found there are here.  */     
        !           173: 
        !           174: /* The event queue header */
        !           175:        
        !           176: typedef struct qdinput {
        !           177: 
        !           178:            struct _vs_eventqueue header;  /* event queue ring handling */
        !           179: 
        !           180:            /* for VS100 and QVSS compatability reasons, additions to this
        !           181:            *  structure must be made below this point.  */
        !           182: 
        !           183:            struct _vs_cursor curs_pos; /* current mouse position */
        !           184:            struct _vs_box curs_box;    /* cursor reporting box */
        !           185: 
        !           186:        };
        !           187:        
        !           188: /* vse_key field.  definitions for mouse buttons */
        !           189: 
        !           190: #define VSE_LEFT_BUTTON                0
        !           191: #define VSE_MIDDLE_BUTTON      1
        !           192: #define VSE_RIGHT_BUTTON       2
        !           193: 
        !           194: /* vse_key field.  definitions for mouse buttons */
        !           195: 
        !           196: #define VSE_T_LEFT_BUTTON      0
        !           197: #define VSE_T_FRONT_BUTTON     1
        !           198: #define VSE_T_RIGHT_BUTTON     2
        !           199: #define VSE_T_BACK_BUTTON      4
        !           200: 
        !           201: #define VSE_T_BARREL_BUTTON    VSE_T_LEFT_BUTTON
        !           202: #define VSE_T_TIP_BUTTON       VSE_T_FRONT_BUTTON
        !           203: 
        !           204: /*--------------------------------------------------------------------------
        !           205: *   These are the macros to be used for loading and extracting from the event
        !           206: * queue.  It is presumed that the macro user will only use the access macros
        !           207: * if the event queue is non-empty ( ISEMPTY(eq) == FALSE ), and that the
        !           208: * driver will only load the event queue after checking that it is not full
        !           209: * ( ISFULL(eq) == FALSE ).  ("eq" is a pointer to the event queue header.)
        !           210: *
        !           211: *   Before an event access session for a particular event, the macro users
        !           212: * must use the xxxBEGIN macro, and the xxxEND macro after an event is through
        !           213: * with.  As seen below, the xxxBEGIN and xxxEND macros maintain the event
        !           214: * queue access mechanism.
        !           215: *
        !           216: * First, the macros to be used by the event queue reader 
        !           217: */
        !           218: 
        !           219: #define ISEMPTY(eq)      ((eq)->header.head == (eq)->header.tail)
        !           220: #define GETBEGIN(eq)     (&(eq)->header.events[(eq)->header.head]) 
        !           221: 
        !           222: #define GET_X(event)     ((event)->vse_x)           /* get x position */
        !           223: #define GET_Y(event)     ((event)->vse_y)           /* get y position */
        !           224: #define GET_TIME(event)          ((event)->vse_time)        /* get time */
        !           225: #define GET_TYPE(event)          ((event)->vse_type)        /* get entry type */
        !           226: #define GET_KEY(event)   ((event)->vse_key)         /* get keycode */
        !           227: #define GET_DIR(event)   ((event)->vse_direction)     /* get direction */
        !           228: #define GET_DEVICE(event) ((event)->vse_device)        /* get device */
        !           229: 
        !           230: #define GETEND(eq)        (++(eq)->header.head >= (eq)->header.size ? \
        !           231:                           (eq)->header.head = 0 : 0 )
        !           232: 
        !           233: /*------------------------------------------------
        !           234: * macros to be used by the event queue loader  */
        !           235: 
        !           236:        /* ISFULL yields TRUE if queue is full */
        !           237: 
        !           238: #define ISFULL(eq)     ((eq)->header.tail+1 == (eq)->header.head ||   \
        !           239:                         ((eq)->header.tail+1 == (eq)->header.size &&  \
        !           240:                          (eq)->header.head == 0))
        !           241: 
        !           242:        /* get address of the billet for NEXT event */
        !           243: 
        !           244: #define PUTBEGIN(eq)   (&(eq)->header.events[(eq)->header.tail])
        !           245: 
        !           246: #define PUT_X(event, value)    ((event)->vse_x = value)    /* put X pos */
        !           247: #define PUT_Y(event, value)    ((event)->vse_y = value)    /* put Y pos */
        !           248: #define PUT_TIME(event, value) ((event)->vse_time = value)   /* put time */
        !           249: #define PUT_TYPE(event, value) ((event)->vse_type = value) /* put type */
        !           250: #define PUT_KEY(event, value)  ((event)->vse_key = value) /* put input key */
        !           251: #define PUT_DIR(event, value)  ((event)->vse_direction = value) /* put dir */
        !           252: #define PUT_DEVICE(event, value) ((event)->vse_device = value)   /* put dev */
        !           253: 
        !           254: #define PUTEND(eq)     (++(eq)->header.tail >= (eq)->header.size ?  \
        !           255:                        (eq)->header.tail = 0 : 0) 
        !           256: 
        !           257: /******************************************************************
        !           258: *
        !           259: *      DMA I/O DEFINITIONS
        !           260: *
        !           261: ******************************************************************/
        !           262: 
        !           263: /*---------------------------------------------------------------------
        !           264: * The DMA request queue is implemented as a ring buffer of "DMAreq"
        !           265:   structures.  The queue is accessed using ring indices located in the
        !           266:   "DMAreq_header" structure.  Access is implemented using access macros
        !           267:   similar to the event queue access macros above.  */
        !           268: 
        !           269:        struct DMAreq {
        !           270: 
        !           271:            short DMAtype;              /* DMA type code (for QDSS) */
        !           272:            short DMAdone;              /* DMA done parameter */
        !           273:            char  *bufp;                /* virtual adrs of buffer */
        !           274:            int   length;               /* transfer buffer length */
        !           275:        };
        !           276: 
        !           277: /* DMA type command codes */
        !           278: 
        !           279: #define DISPLIST       1       /* display list DMA */
        !           280: #define PTOB           2       /* 1 plane Qbus to bitmap DMA */
        !           281: #define BTOP           3       /* 1 plane bitmap to Qbus DMA */
        !           282: 
        !           283: /* DMA done notification code */
        !           284: 
        !           285: #define FIFO_EMPTY     0x01    /* DONE when FIFO becomes empty */
        !           286: #define COUNT_ZERO     0x02    /* DONE when count becomes zero */
        !           287: #define WORD_PACK      0x04    /* program the gate array for word packing */
        !           288: #define BYTE_PACK      0x08    /* program gate array for byte packing */
        !           289: #define REQUEST_DONE   0x100   /* clear when driver has processed request */
        !           290: #define HARD_ERROR     0x200   /* DMA hardware error occurred */
        !           291: 
        !           292: /* DMA request queue is a ring buffer of request structures */
        !           293: 
        !           294:        struct DMAreq_header {
        !           295: 
        !           296:            int QBAreg;             /* cookie Qbus map reg for this buffer */
        !           297:            short status;           /* master DMA status word */
        !           298:            int shared_size;        /* size of shared memory in bytes */
        !           299:            struct DMAreq *DMAreq;  /* start address of request queue */
        !           300:            int used;               /* # of queue entries currently used */
        !           301:            int size;               /* # of "DMAreq"'s in the request queue */
        !           302:            int oldest;             /* index to oldest queue'd request */
        !           303:            int newest;             /* index to newest queue'd request */
        !           304:        };
        !           305: 
        !           306: /* bit definitions for DMAstatus word in DMAreq_header */
        !           307: 
        !           308: #define        DMA_ACTIVE      0x0004          /* DMA in progress */
        !           309: #define DMA_ERROR      0x0080          /* DMA hardware error */
        !           310: #define DMA_IGNORE     0x0002          /* flag to ignore this interrupt */
        !           311: 
        !           312: /*------------------------------------------
        !           313: * macros for DMA request queue fiddling  */
        !           314: 
        !           315:        /* DMA status set/check macros */
        !           316: 
        !           317: #define DMA_SETACTIVE(header)   ((header)->status |= DMA_ACTIVE)
        !           318: #define DMA_CLRACTIVE(header)  ((header)->status &= ~DMA_ACTIVE)
        !           319: #define DMA_ISACTIVE(header)    ((header)->status & DMA_ACTIVE)
        !           320: 
        !           321: #define DMA_SETERROR(header)    ((header)->status |= DMA_ERROR)
        !           322: #define DMA_CLRERROR(header)    ((header)->status &= ~DMA_ERROR)
        !           323: #define DMA_ISERROR(header)     ((header)->status & DMA_ERROR)
        !           324: 
        !           325: #define DMA_SETIGNORE(header)  ((header)->status |= DMA_IGNORE)
        !           326: #define DMA_CLRIGNORE(header)   ((header)->status &= ~DMA_IGNORE)
        !           327: #define DMA_ISIGNORE(header)    ((header)->status & DMA_IGNORE)
        !           328: 
        !           329:        /* yields TRUE if queue is empty (ISEMPTY) or full (ISFULL) */
        !           330: 
        !           331: #define DMA_ISEMPTY(header)    ((header)->used == 0)
        !           332: #define DMA_ISFULL(header)     ((header)->used >= (header)->size)
        !           333: 
        !           334:        /* returns address of the billet for next (PUT)
        !           335:         * or oldest (GET) request */
        !           336: 
        !           337: #define DMA_PUTBEGIN(header)   (&(header)->DMAreq[(header)->newest])
        !           338: #define DMA_GETBEGIN(header)   (&(header)->DMAreq[(header)->oldest])
        !           339: 
        !           340:        /* does queue access pointer maintenance */
        !           341: 
        !           342: #define DMA_GETEND(header)      (++(header)->oldest >= (header)->size    \
        !           343:                                  ? (header)->oldest = 0 : 0);           \
        !           344:                                --(header)->used;
        !           345: 
        !           346: #define DMA_PUTEND(header)             (++(header)->newest >= (header)->size    \
        !           347:                                  ? (header)->newest = 0 : 0);           \
        !           348:                                ++(header)->used;
        !           349: 
        !           350: /******************************************************************
        !           351: *
        !           352: *      COLOR MAP WRITE BUFFER DEFINITIONS
        !           353: *
        !           354: ******************************************************************/
        !           355: 
        !           356:        struct rgb {
        !           357: 
        !           358:            unsigned char offset;       /* color map address for load */
        !           359:            unsigned char red;          /* data for red map */
        !           360:            unsigned char green;        /* data for green map */
        !           361:            unsigned char blue;         /* data for blue map */
        !           362:        };
        !           363: 
        !           364:        struct color_buf {
        !           365: 
        !           366:            char status;                /* load request/service status */
        !           367:            short count;                /* number of entries to br loaded */
        !           368:            struct rgb rgb[256];
        !           369:        };
        !           370: 
        !           371: #define LOAD_COLOR_MAP 0x0001
        !           372: 
        !           373: /******************************************************************
        !           374: *
        !           375: *      SCROLL ASSIST DEFINITIONS
        !           376: *
        !           377: ******************************************************************/
        !           378: 
        !           379:        struct scroll {
        !           380: 
        !           381:            short status;
        !           382:            short viper_constant;
        !           383:            short y_scroll_constant;
        !           384:            short y_offset;
        !           385:            short x_index_pending;
        !           386:            short y_index_pending;
        !           387:        };
        !           388: 
        !           389: #define LOAD_REGS      0x0001
        !           390: #define LOAD_INDEX     0x0002
        !           391: 
        !           392: /******************************************************************
        !           393: *
        !           394: *      MOUSE/TABLET/KBD PROGRAMMING DEFINITIONS
        !           395: *
        !           396: ******************************************************************/
        !           397: 
        !           398: /*-----------------------------------
        !           399: * LK201 programmming definitions  */
        !           400: 
        !           401: #define LK_UPDOWN      0x86            /* bits for setting lk201 modes */
        !           402: #define LK_AUTODOWN    0x82
        !           403: #define LK_DOWN        0x80
        !           404: #define LK_DEFAULTS    0xD3            /* reset (some) default settings */
        !           405: #define LK_AR_ENABLE   0xE3            /* global auto repeat enable */
        !           406: #define LK_CL_ENABLE   0x1B            /* keyclick enable */
        !           407: #define LK_KBD_ENABLE  0x8B            /* keyboard enable */
        !           408: #define LK_BELL_ENABLE         0x23            /* the bell */
        !           409: #define LK_RING_BELL   0xA7            /* ring keyboard bell */
        !           410: 
        !           411: #define LK_LED_ENABLE  0x13            /* light led */
        !           412: #define LK_LED_DISABLE         0x11            /* turn off led */
        !           413: #define LED_1          0x81            /* led bits */
        !           414: #define LED_2          0x82
        !           415: #define LED_3          0x84
        !           416: #define LED_4          0x88
        !           417: #define LED_ALL        0x8F
        !           418: #define LK_LED_HOLD    LED_4
        !           419: #define LK_LED_LOCK    LED_3
        !           420: #define LK_LED_COMPOSE LED_2
        !           421: #define LK_LED_WAIT    LED_1
        !           422: 
        !           423: #define LK_KDOWN_ERROR 0x3D            /* key down on powerup error */
        !           424: #define LK_POWER_ERROR         0x3E            /* keyboard failure on powerup test */
        !           425: #define LK_OUTPUT_ERROR        0xB5            /* keystrokes lost during inhibit */
        !           426: #define LK_INPUT_ERROR         0xB6            /* garbage command to keyboard */
        !           427: #define LK_LOWEST      0x56            /* lowest significant keycode */
        !           428: #define LK_DIV6_START  0xAD            /* start of div 6 */
        !           429: #define LK_DIV5_END    0xB2            /* end of div 5 */
        !           430: 
        !           431: #define LAST_PARAM     0x80            /* "no more params" bit */
        !           432: 
        !           433:        struct prgkbd {
        !           434: 
        !           435:            short cmd;                  /* LK201 command opcode */
        !           436:            short param1;               /* 1st cmd parameter (can be null) */
        !           437:            short param2;               /* 2nd cmd parameter (can be null) */
        !           438:        };
        !           439: 
        !           440: /*-------------------------
        !           441: * "special" LK-201 keys */
        !           442: 
        !           443: #define SHIFT          174
        !           444: #define LOCK           176
        !           445: #define REPEAT         180
        !           446: #define CNTRL          175
        !           447: #define ALLUP          179
        !           448: 
        !           449: /*--------------------------------
        !           450: * cursor programming structure */
        !           451: 
        !           452:        struct prg_cursor {
        !           453: 
        !           454:            unsigned short acc_factor;  /* cursor aceleration factor */
        !           455:            unsigned short threshold;   /* threshold to trigger acc at */
        !           456:        };
        !           457: 
        !           458: /*---------------------
        !           459: * mouse definitions */
        !           460: 
        !           461: #define INC_STREAM_MODE        'R'             /* stream mode reports (55 hz) */
        !           462: #define PROMPT_MODE    'D'             /* report when prompted */
        !           463: #define REQUEST_POS    'P'             /* request position report */
        !           464: #define SELF_TEST      'T'             /* request self test */
        !           465: 
        !           466: #define MOUSE_ID       0x2             /* mouse ID in lo 4 bits */
        !           467: 
        !           468: #define START_FRAME    0x80            /* start of report frame bit */
        !           469: #define X_SIGN         0x10            /* position sign bits */
        !           470: #define Y_SIGN         0x08
        !           471: 
        !           472: #define RIGHT_BUTTON   0x01            /* mouse buttons */
        !           473: #define MIDDLE_BUTTON  0x02
        !           474: #define LEFT_BUTTON    0x04
        !           475: 
        !           476:        /* mouse report structure definition */
        !           477: 
        !           478:        struct mouse_report {
        !           479: 
        !           480:            char state;         /* buttons and sign bits */
        !           481:            short dx;           /* delta X since last change */
        !           482:            short dy;           /* delta Y since last change */
        !           483:            char bytcnt;        /* mouse report byte count */
        !           484:        };
        !           485: 
        !           486: /*-----------------------------------------
        !           487: * tablet command/interface definitions  */
        !           488: 
        !           489: #define T_STREAM       'R'             /* continuous stream report mode */
        !           490: #define T_POINT                'D'             /* enter report-on-request mode */
        !           491: #define T_REQUEST      'P'             /* request position report */
        !           492: 
        !           493: #define T_BAUD         'B'             /* increase baud to 9600 from 4800 */
        !           494: #define T_RATE_55      'K'             /* report rate: 55/sec */
        !           495: #define T_RATE_72      'L'             /* report rate: 72/sec */
        !           496: #define T_RATE_120     'M'             /* report rate: 120/sec (9600 only) */
        !           497: 
        !           498: #define T_TEST         SELF_TEST       /* do self test */
        !           499: 
        !           500: #define TABLET_ID      0x4             /* tablet ID in lo 4 bits */
        !           501: 
        !           502: #define T_START_FRAME  0x80            /* start of report frame bit */
        !           503: #define T_PROXIMITY    0x01            /* state pointer in proximity */
        !           504: 
        !           505: #define T_LEFT_BUTTON  0x02            /* puck buttons */
        !           506: #define T_FRONT_BUTTON 0x04
        !           507: #define T_RIGHT_BUTTON 0x08
        !           508: #define T_BACK_BUTTON  0x10
        !           509: 
        !           510: #define T_BARREL_BUTTON T_LEFT_BUTTON          /* stylus buttons */
        !           511: #define T_TIP_BUTTON   T_FRONT_BUTTON
        !           512: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.