Home | History | Annotate | Download | only in extensions
      1 /* $Xorg: xtestext1.h,v 1.4 2001/02/09 02:03:24 xorgcvs Exp $ */
      2 /*
      3  * xtestext1.h
      4  *
      5  * X11 Input Synthesis Extension include file
      6  */
      7 
      8 /*
      9 
     10 
     11 Copyright 1986, 1987, 1988, 1998  The Open Group
     12 
     13 Permission to use, copy, modify, distribute, and sell this software and its
     14 documentation for any purpose is hereby granted without fee, provided that
     15 the above copyright notice appear in all copies and that both that
     16 copyright notice and this permission notice appear in supporting
     17 documentation.
     18 
     19 The above copyright notice and this permission notice shall be included in
     20 all copies or substantial portions of the Software.
     21 
     22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     23 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     24 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
     25 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
     26 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     27 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     28 
     29 Except as contained in this notice, the name of The Open Group shall not be
     30 used in advertising or otherwise to promote the sale, use or other dealings
     31 in this Software without prior written authorization from The Open Group.
     32 
     33 
     34 Copyright 1986, 1987, 1988 by Hewlett-Packard Corporation
     35 
     36 Permission to use, copy, modify, and distribute this
     37 software and its documentation for any purpose and without
     38 fee is hereby granted, provided that the above copyright
     39 notice appear in all copies and that both that copyright
     40 notice and this permission notice appear in supporting
     41 documentation, and that the name of Hewlett-Packard not be used in
     42 advertising or publicity pertaining to distribution of the
     43 software without specific, written prior permission.
     44 
     45 Hewlett-Packard makes no representations about the
     46 suitability of this software for any purpose.  It is provided
     47 "as is" without express or implied warranty.
     48 
     49 This software is not subject to any license of the American
     50 Telephone and Telegraph Company or of the Regents of the
     51 University of California.
     52 
     53 */
     54 
     55 /*
     56  * the typedefs for CARD8, CARD16, and CARD32 are defined in Xmd.h
     57  */
     58 
     59 /*
     60  * used in the XTestPressButton and XTestPressKey functions
     61  */
     62 #define XTestPRESS                      1 << 0
     63 #define XTestRELEASE                    1 << 1
     64 #define XTestSTROKE                     1 << 2
     65 
     66 /*
     67  * When doing a key or button stroke, the number of milliseconds
     68  * to delay between the press and the release of a key or button
     69  * in the XTestPressButton and XTestPressKey functions.
     70  */
     71 
     72 #define XTestSTROKE_DELAY_TIME		10
     73 
     74 /*
     75  * used in the XTestGetInput function
     76  */
     77 #define XTestEXCLUSIVE                  1 << 0
     78 #define XTestPACKED_ACTIONS             1 << 1
     79 #define XTestPACKED_MOTION              1 << 2
     80 
     81 /*
     82  * used in the XTestFakeInput function
     83  */
     84 #define XTestFAKE_ACK_NOT_NEEDED        0
     85 #define XTestFAKE_ACK_REQUEST           1
     86 
     87 /*
     88  * used in the XTest extension initialization routine
     89  */
     90 #define XTestEXTENSION_NAME             "XTestExtension1"
     91 #define XTestEVENT_COUNT                2
     92 
     93 /*
     94  * XTest request type values
     95  *
     96  * used in the XTest extension protocol requests
     97  */
     98 #define X_TestFakeInput                  1
     99 #define X_TestGetInput                   2
    100 #define X_TestStopInput                  3
    101 #define X_TestReset                      4
    102 #define X_TestQueryInputSize             5
    103 
    104 /*
    105  * This defines the maximum size of a list of input actions
    106  * to be sent to the server.  It should always be a multiple of
    107  * 4 so that the entire xTestFakeInputReq structure size is a
    108  * multiple of 4.
    109  */
    110 #define XTestMAX_ACTION_LIST_SIZE       64
    111 
    112 typedef struct {
    113         CARD8   reqType;        /* always XTestReqCode             */
    114         CARD8   XTestReqType;   /* always X_TestFakeInput           */
    115         CARD16  length B16;     /* 2 + XTestMAX_ACTION_LIST_SIZE/4 */
    116         CARD32  ack B32;
    117         CARD8   action_list[XTestMAX_ACTION_LIST_SIZE];
    118 } xTestFakeInputReq;
    119 #define sz_xTestFakeInputReq (XTestMAX_ACTION_LIST_SIZE + 8)
    120 
    121 typedef struct {
    122         CARD8   reqType;        /* always XTestReqCode  */
    123         CARD8   XTestReqType;   /* always X_TestGetInput */
    124         CARD16  length B16;     /* 2                    */
    125         CARD32  mode B32;
    126 } xTestGetInputReq;
    127 #define sz_xTestGetInputReq 8
    128 
    129 typedef struct {
    130         CARD8   reqType;        /* always XTestReqCode   */
    131         CARD8   XTestReqType;   /* always X_TestStopInput */
    132         CARD16  length B32;     /* 1                     */
    133 } xTestStopInputReq;
    134 #define sz_xTestStopInputReq 4
    135 
    136 typedef struct {
    137         CARD8   reqType;        /* always XTestReqCode */
    138         CARD8   XTestReqType;   /* always X_TestReset   */
    139         CARD16  length B16;     /* 1                   */
    140 } xTestResetReq;
    141 #define sz_xTestResetReq 4
    142 
    143 typedef struct {
    144         CARD8   reqType;        /* always XTestReqCode        */
    145         CARD8   XTestReqType;   /* always X_TestQueryInputSize */
    146         CARD16  length B16;     /* 1                          */
    147 } xTestQueryInputSizeReq;
    148 #define sz_xTestQueryInputSizeReq 4
    149 
    150 /*
    151  * This is the definition of the reply for the xTestQueryInputSize
    152  * request.  It should remain the same minimum size as other replies
    153  * (32 bytes).
    154  */
    155 typedef struct {
    156         CARD8   type;           /* always X_Reply  */
    157         CARD8   pad1;
    158         CARD16  sequenceNumber B16;
    159         CARD32  length B32;     /* always 0 */
    160         CARD32  size_return B32;
    161         CARD32  pad2 B32;
    162         CARD32  pad3 B32;
    163         CARD32  pad4 B32;
    164         CARD32  pad5 B32;
    165         CARD32  pad6 B32;
    166 } xTestQueryInputSizeReply;
    167 
    168 /*
    169  * This is the definition for the input action wire event structure.
    170  * This event is sent to the client when the server has one or
    171  * more user input actions to report to the client.  It must
    172  * remain the same size as all other wire events (32 bytes).
    173  */
    174 #define XTestACTIONS_SIZE	28
    175 
    176 typedef struct {
    177         CARD8   type;           /* always XTestInputActionType */
    178         CARD8   pad00;
    179         CARD16  sequenceNumber B16;
    180         CARD8   actions[XTestACTIONS_SIZE];
    181 } xTestInputActionEvent;
    182 
    183 /*
    184  * This is the definition for the xTestFakeAck wire event structure.
    185  * This event is sent to the client when the server has completely
    186  * processed its input action buffer, and is ready for more.
    187  * It must remain the same size as all other wire events (32 bytes).
    188  */
    189 typedef struct {
    190         CARD8   type;           /* always XTestFakeAckType */
    191         CARD8   pad00;
    192         CARD16  sequenceNumber B16;
    193         CARD32  pad02 B32;
    194         CARD32  pad03 B32;
    195         CARD32  pad04 B32;
    196         CARD32  pad05 B32;
    197         CARD32  pad06 B32;
    198         CARD32  pad07 B32;
    199         CARD32  pad08 B32;
    200 } xTestFakeAckEvent;
    201 
    202 /*
    203  * The server side of this extension does not (and should not) have
    204  * definitions for Display and Window.  The ifndef allows the server
    205  * side of the extension to ignore the following typedefs.
    206  */
    207 #ifndef XTestSERVER_SIDE
    208 /*
    209  * This is the definition for the input action host format event structure.
    210  * This is the form that a client using this extension will see when
    211  * it receives an input action event.
    212  */
    213 typedef struct {
    214         int     type;           /* always XTestInputActionType */
    215 	Display *display;
    216 	Window  window;
    217         CARD8   actions[XTestACTIONS_SIZE];
    218 } XTestInputActionEvent;
    219 
    220 /*
    221  * This is the definition for the xTestFakeAck host format event structure.
    222  * This is the form that a client using this extension will see when
    223  * it receives an XTestFakeAck event.
    224  */
    225 typedef struct {
    226         int     type;           /* always XTestFakeAckType */
    227 	Display *display;
    228 	Window  window;
    229 } XTestFakeAckEvent;
    230 #endif
    231 
    232 /*
    233  * This is the definition for the format of the header byte
    234  * in the input action structures.
    235  */
    236 #define XTestACTION_TYPE_MASK   0x03    /* bits 0 and 1          */
    237 #define XTestKEY_STATE_MASK     0x04    /* bit 2 (key action)    */
    238 #define XTestX_SIGN_BIT_MASK    0x04    /* bit 2 (motion action) */
    239 #define XTestY_SIGN_BIT_MASK    0x08    /* bit 3 (motion action) */
    240 #define XTestDEVICE_ID_MASK     0xf0    /* bits 4 through 7      */
    241 
    242 #define XTestMAX_DEVICE_ID	0x0f
    243 #define XTestPackDeviceID(x)	(((x) & XTestMAX_DEVICE_ID) << 4)
    244 #define XTestUnpackDeviceID(x)	(((x) & XTestDEVICE_ID_MASK) >> 4)
    245 
    246 /*
    247  * These are the possible action types.
    248  */
    249 #define XTestDELAY_ACTION       0
    250 #define XTestKEY_ACTION         1
    251 #define XTestMOTION_ACTION      2
    252 #define XTestJUMP_ACTION        3
    253 
    254 /*
    255  * These are the definitions for key/button motion input actions.
    256  */
    257 #define XTestKEY_UP             0x04
    258 #define XTestKEY_DOWN           0x00
    259 
    260 typedef struct {
    261         CARD8   header;         /* which device, key up/down */
    262         CARD8   keycode;        /* which key/button to move  */
    263         CARD16  delay_time B16; /* how long to delay (in ms) */
    264 } XTestKeyInfo;
    265 
    266 /*
    267  * This is the definition for pointer jump input actions.
    268  */
    269 typedef struct {
    270         CARD8   header;         /* which pointer             */
    271         CARD8   pad1;           /* unused padding byte       */
    272         CARD16  jumpx B16;      /* x coord to jump to        */
    273         CARD16  jumpy B16;      /* y coord to jump to        */
    274         CARD16  delay_time B16; /* how long to delay (in ms) */
    275 } XTestJumpInfo;
    276 
    277 /*
    278  * These are the definitions for pointer relative motion input
    279  * actions.
    280  *
    281  * The sign bits for the x and y relative motions are contained
    282  * in the header byte.  The x and y relative motions are packed
    283  * into one byte to make things fit in 32 bits.  If the relative
    284  * motion range is larger than +/-15, use the pointer jump action.
    285  */
    286 #define XTestMOTION_MAX            15
    287 #define XTestMOTION_MIN            -15
    288 
    289 #define XTestX_NEGATIVE            0x04
    290 #define XTestY_NEGATIVE            0x08
    291 
    292 #define XTestX_MOTION_MASK         0x0f
    293 #define XTestY_MOTION_MASK         0xf0
    294 
    295 #define XTestPackXMotionValue(x)   ((x) & XTestX_MOTION_MASK)
    296 #define XTestPackYMotionValue(x)   (((x) << 4) & XTestY_MOTION_MASK)
    297 
    298 #define XTestUnpackXMotionValue(x) ((x) & XTestX_MOTION_MASK)
    299 #define XTestUnpackYMotionValue(x) (((x) & XTestY_MOTION_MASK) >> 4)
    300 
    301 typedef struct {
    302         CARD8   header;         /* which pointer             */
    303         CARD8   motion_data;    /* x,y relative motion       */
    304         CARD16  delay_time B16; /* how long to delay (in ms) */
    305 } XTestMotionInfo;
    306 
    307 /*
    308  * These are the definitions for a long delay input action.  It is
    309  * used when more than XTestSHORT_DELAY_TIME milliseconds of delay
    310  * (approximately one minute) is needed.
    311  *
    312  * The device ID for a delay is always set to XTestDELAY_DEVICE_ID.
    313  * This guarantees that a header byte with a value of 0 is not
    314  * a valid header, so it can be used as a flag to indicate that
    315  * there are no more input actions in an XTestInputAction event.
    316  */
    317 
    318 #define XTestSHORT_DELAY_TIME	0xffff
    319 #define XTestDELAY_DEVICE_ID    0x0f
    320 
    321 typedef struct {
    322         CARD8   header;         /* always XTestDELAY_DEVICE_ID */
    323         CARD8   pad1;           /* unused padding byte         */
    324         CARD16  pad2 B16;       /* unused padding word         */
    325         CARD32  delay_time B32; /* how long to delay (in ms)   */
    326 } XTestDelayInfo;
    327