#define NEED_EVENTS
#include "sun.h"
#include "mi.h"
void
ProcessInputEvents ()
{
mieqProcessInputEvents ();
miPointerUpdate ();
}
void sunEnqueueEvents (
void
)
{
Firm_event *ptrEvents,
*kbdEvents;
int numPtrEvents,
numKbdEvents;
int nPE,
nKE;
Bool PtrAgain,
KbdAgain;
DeviceIntPtr pPointer;
DeviceIntPtr pKeyboard;
sunKbdPrivPtr kbdPriv;
sunPtrPrivPtr ptrPriv;
pPointer = (DeviceIntPtr)LookupPointerDevice();
pKeyboard = (DeviceIntPtr)LookupKeyboardDevice();
ptrPriv = (sunPtrPrivPtr) pPointer->public.devicePrivate;
kbdPriv = (sunKbdPrivPtr) pKeyboard->public.devicePrivate;
if (!pPointer->public.on || !pKeyboard->public.on)
return;
numPtrEvents = 0;
ptrEvents = NULL;
PtrAgain = TRUE;
numKbdEvents = 0;
kbdEvents = NULL;
KbdAgain = TRUE;
while (1) {
if ((numPtrEvents == 0) && PtrAgain) {
ptrEvents = sunMouseGetEvents (ptrPriv->fd, pPointer->public.on,
&nPE, &PtrAgain);
numPtrEvents = nPE;
}
if ((numKbdEvents == 0) && KbdAgain) {
kbdEvents = sunKbdGetEvents (kbdPriv->fd, pKeyboard->public.on,
&nKE, &KbdAgain);
numKbdEvents = nKE;
}
if ((numPtrEvents == 0) && (numKbdEvents == 0))
break;
if (numPtrEvents && numKbdEvents) {
if (timercmp (&kbdEvents->time, &ptrEvents->time, <)) {
sunKbdEnqueueEvent (pKeyboard, kbdEvents);
numKbdEvents--;
kbdEvents++;
} else {
sunMouseEnqueueEvent (pPointer, ptrEvents);
numPtrEvents--;
ptrEvents++;
}
} else if (numKbdEvents) {
sunKbdEnqueueEvent (pKeyboard, kbdEvents);
numKbdEvents--;
kbdEvents++;
} else {
sunMouseEnqueueEvent (pPointer, ptrEvents);
numPtrEvents--;
ptrEvents++;
}
}
}
void AbortDDX()
{
int i;
ScreenPtr pScreen;
DevicePtr devPtr;
#ifdef SVR4
(void) OsSignal (SIGPOLL, SIG_IGN);
#else
(void) OsSignal (SIGIO, SIG_IGN);
#endif
devPtr = LookupKeyboardDevice();
if (devPtr)
(void) sunChangeKbdTranslation (((sunKbdPrivPtr)(devPtr->devicePrivate))->fd, FALSE);
#if defined(SVR4) || defined(CSRG_BASED)
sunNonBlockConsoleOff ();
#else
sunNonBlockConsoleOff (NULL);
#endif
for (i = 0; i < screenInfo.numScreens; i++)
{
pScreen = screenInfo.screens[i];
(*pScreen->SaveScreen) (pScreen, SCREEN_SAVER_OFF);
sunDisableCursor (pScreen);
}
}
void
ddxGiveUp()
{
AbortDDX ();
}
int
ddxProcessArgument (argc, argv, i)
int argc;
char *argv[];
int i;
{
extern void UseMsg();
extern int XprintOptions(int, char **, int);
#ifdef XKB
int noxkb = 0, n;
for (n = 1; n < argc; n++)
if (strcmp (argv[n], "-kb") == 0)
noxkb = 1;
if (noxkb)
#endif
if (strcmp (argv[i], "-ar1") == 0) {
if (++i >= argc) UseMsg ();
sunAutoRepeatInitiate = 1000 * (long)atoi(argv[i]);
if (sunAutoRepeatInitiate > 1000000)
sunAutoRepeatInitiate = 999000;
return 2;
}
#ifdef XKB
if (noxkb)
#endif
if (strcmp (argv[i], "-ar2") == 0) {
if (++i >= argc) UseMsg ();
sunAutoRepeatDelay = 1000 * (long)atoi(argv[i]);
if (sunAutoRepeatDelay > 1000000)
sunAutoRepeatDelay = 999000;
return 2;
}
if (strcmp (argv[i], "-swapLkeys") == 0) {
sunSwapLkeys = TRUE;
return 1;
}
if (strcmp (argv[i], "-debug") == 0) {
return 1;
}
if (strcmp (argv[i], "-dev") == 0) {
if (++i >= argc) UseMsg ();
return 2;
}
if (strcmp (argv[i], "-mono") == 0) {
return 1;
}
if (strcmp (argv[i], "-zaphod") == 0) {
sunActiveZaphod = FALSE;
return 1;
}
if (strcmp (argv[i], "-flipPixels") == 0) {
sunFlipPixels = TRUE;
return 1;
}
if (strcmp (argv[i], "-fbinfo") == 0) {
sunFbInfo = TRUE;
return 1;
}
if (strcmp (argv[i], "-kbd") == 0) {
if (++i >= argc) UseMsg();
return 2;
}
if (strcmp (argv[i], "-protect") == 0) {
if (++i >= argc) UseMsg();
return 2;
}
if (strcmp (argv[i], "-cg4frob") == 0) {
sunCG4Frob = TRUE;
return 1;
}
if (strcmp (argv[i], "-noGX") == 0) {
sunNoGX = TRUE;
return 1;
}
if (strcmp(argv[i], "-XpFile") == 0) {
return XprintOptions(argc, argv, i) - i;
}
return 0;
}
void
ddxUseMsg()
{
#ifndef XKB
ErrorF("-ar1 int set autorepeat initiate time\n");
ErrorF("-ar2 int set autorepeat interval time\n");
#endif
ErrorF("-swapLkeys swap keysyms on L1..L10\n");
ErrorF("-debug disable non-blocking console mode\n");
ErrorF("-dev fn[:fn][:fn] name of device[s] to open\n");
ErrorF("-mono force monochrome-only screen\n");
ErrorF("-zaphod disable active Zaphod mode\n");
ErrorF("-fbinfo tell more about the found frame buffer(s)\n");
#ifdef UNDOCUMENTED
ErrorF("-cg4frob don't use the mono plane of the cgfour\n");
ErrorF("-noGX treat the GX as a dumb frame buffer\n");
#endif
ErrorF("-XpFile specifies an alternate `Xprinters' file (Xprt only)\n");
}