There are several code fragments that need to be placed in the device dependent part of the server. These are described below. These code fragments are device and implementation dependent. This code fragment should go in your ddx InitInput() routine: #ifdef XTESTEXT1 extern KeyCode xtest_command_key; #endif #ifdef XTESTEXT1 xtest_command_key = ; #endif This code fragment should go at the front of the file that handles keyboards: #ifdef XTESTEXT1 /* * defined in xtestext1di.c */ extern int on_steal_input; extern Bool XTestStealKeyData(); #endif XTESTEXT1 This code fragment should go in the function that parses input from the keyboard or pointer after you know what input action has occurred, but before you have told the server about it. If conditionalizes the actual function call to pass the information on: #ifdef XTESTEXT1 if (!on_steal_input || XTestStealKeyData(code, direction, dev_type, x, y)) #endif /* XTESTEXT1 */ handle_device_event(...); This code fragment should go in the function that handles mouse motion after you have figured out how much the mouse has moved: #ifdef XTESTEXT1 if (on_steal_input) XTestStealMotionData(dx, dy, dev, x, y); #endif XTESTEXT1 This code fragment should go at the front of the os-specific code where you wait (by doing a select on the socket in our implementation) for something to happen: #ifdef XTESTEXT1 extern int playback_on; void XTestComputeWaitTime(); #endif XTESTEXT1 These code fragments should go in the os-specific code on both sides of where you wait (by doing a select on the socket in our implementation) for something to happen: #ifdef XTESTEXT1 if (playback_on) XTestComputeWaitTime(wt = &waittime); #endif XTESTEXT1 ... code to do select ... WakeupHandler(i, LastSelectMask); #ifdef XTESTEXT1 if (playback_on) i = XTestProcessInputAction(i, &waittime); #endif XTESTEXT1 You also need to implement the following routines (documentation is needed; for now, see server/ddx/hp/hp/x_hil.c): void XTestGenerateEvent(dev_type, keycode, keystate, mousex, mousey) int dev_type; int keycode; int keystate; int mousex; int mousey; void XTestGetPointerPos(fmousex, fmousey) short *fmousex, *fmousey; void XTestJumpPointer(jx, jy, dev_type) int jx; int jy; int dev_type;