From e611b132f9b8abe35b362e5870b74bce94a1e58e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 20:51:50 -0700 Subject: initial commit --- private/os2/os2ses/mourqust.c | 235 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 private/os2/os2ses/mourqust.c (limited to 'private/os2/os2ses/mourqust.c') diff --git a/private/os2/os2ses/mourqust.c b/private/os2/os2ses/mourqust.c new file mode 100644 index 000000000..37359e88a --- /dev/null +++ b/private/os2/os2ses/mourqust.c @@ -0,0 +1,235 @@ +/*++ + +Copyright (c) 1989 Microsoft Corporation + +Module Name: + + mourqust.c + +Abstract: + + This module contains the Mou requests thread and + the handler for Mou requests. + +Author: + + Michael Jarus (mjarus) 23-Oct-1991 + +Environment: + + User Mode Only + +Revision History: + +--*/ + +#define WIN32_ONLY +#include "os2ses.h" +#include "event.h" +#include "trans.h" +#include "mou.h" +#include + +#if DBG +BYTE ServeMouRequestStr[] = "ServeMouRequest"; +#endif + +DWORD +GetOs2MouEventIntoQueue(); + +VOID +Ow2MouOn(); + +VOID +Ow2MouOff(); + +BOOL +ServeMouRequest(IN PMOUREQUEST PReq, + OUT PVOID PStatus, + IN PVOID pMsg, + OUT PULONG pReply) +{ +// COORD dwMousePosition; + DWORD Rc, NumEvent; + MOUEVENTINFO MouEvent; + + UNREFERENCED_PARAMETER(pMsg); + + Rc = *(PDWORD) PStatus = 0; + switch (PReq->Request) + { + case MOUOpen: + if (!MouNumber) + { + Ow2MouOn(); + } + MouNumber++; + break; + + case MOUClose: + MouNumber--; + if (!MouNumber) + { + Ow2MouOff(); + MouQueue->Out = MouQueue->In; + } + break; + + case MOUFlushQue: + Or2WinGetNumberOfConsoleInputEvents( + #if DBG + ServeMouRequestStr, + #endif + hConsoleInput, + &NumEvent + ); + while (NumEvent) + { + MouQueue->Out = MouQueue->In; + + GetOs2MouEvent( MOU_NOWAIT, + &MouEvent, + pMsg, + pReply); + + MouQueue->Out = MouQueue->In; + + Or2WinGetNumberOfConsoleInputEvents( + #if DBG + ServeMouRequestStr, + #endif + hConsoleInput, + &NumEvent + ); + } + break; + + case MOUGetNumQueEl: + GetOs2MouEventIntoQueue(); + PReq->d.NumEvent.cEvents = (USHORT)((MouQueue->In >= MouQueue->Out) ? + (MouQueue->In - MouQueue->Out) : + (MouQueue->End - MouQueue->Out) + + (MouQueue->In - &(MouQueue->Event[0])) + (USHORT) 1); + + PReq->d.NumEvent.cmaxEvents = MOUSE_QUEUE_LENGTH - 1; + break; + + case MOUGetEventMask: + PReq->d.Setup = MouEventMask; + break; + + case MOUSetEventMask: + if (PReq->d.Setup & ~OS2_MOUSE_LEGAL_EVENT_MASK) + Rc = *(PDWORD) PStatus = ERROR_MOUSE_INV_PARMS; + else + MouEventMask = PReq->d.Setup; + break; + + case MOUGetNumButtons: + Rc = !Or2WinGetNumberOfConsoleMouseButtons( + #if DBG + ServeMouRequestStr, + #endif + &PReq->d.Setup + ); + break; + + case MOUReadEventQue: + RtlZeroMemory(&PReq->d.MouInfo, sizeof(MOUEVENTINFO)); + Rc = *(PDWORD) PStatus = GetOs2MouEvent(PReq->fWait, + &PReq->d.MouInfo, + pMsg, + pReply); + break; + + case MOUGetDevStatus: + PReq->d.Setup = MouDevStatus; + break; + + case MOUGetScaleFact: + PReq->d.ScalFact.rowScale = 1; + PReq->d.ScalFact.colScale = 1; + break; + + case MOUGetNumMickeys: + PReq->d.Setup = 80; + break; + + case MOUGetPtrPos: + PReq->d.Loc = MouPtrLoc; + break; + + case MOUSetDevStatus: + if (PReq->d.Setup & ~(MOUSE_DISABLED | MOUSE_MICKEYS)) + { + Rc = *(PDWORD) PStatus = ERROR_MOUSE_INV_PARMS; + } else + { + if ((MouDevStatus = PReq->d.Setup) & MOUSE_DISABLED) + { + MouQueue->Out = MouQueue->In; + } + } + break; + + case MOUGetPtrShape: + PReq->d.Shape.cb = 4; + PReq->d.Shape.col = 1; + PReq->d.Shape.row = 1; + PReq->d.Shape.colHot = 1; + PReq->d.Shape.rowHot = 1; + // we return the default mask of OS/2 (0xffff, 0x7700) after the lpc + break; + + case MOUDrawPtr: + case MOURemovePtr: + case MOUSetPtrPos: + case MOUSetPtrShape: + case MOUSetScaleFact: + break; + + default: + *(PDWORD) PStatus = (DWORD)-1L; //STATUS_INVALID_PARAMETER; + Rc = 1; +#if DBG + IF_OD2_DEBUG( OS2_EXE ) + { + KdPrint(("OS2SES(MouRqust): Unknown Mou request = %X\n", + PReq->Request)); + } +#endif + } + + if ( !Rc ) + { + *(PDWORD) PStatus = 0; + } else if (*(PDWORD) PStatus == 0) +/* BUGBUG=> BUGBUG! error code and returned Status are wrong */ + { + *(PDWORD) PStatus = GetLastError(); + } + return(TRUE); // Continue +} + + +DWORD +MouInit(IN VOID) +{ + + if (InitMouQueue(&MouQueue)) + { + return(TRUE); + } + + MouMonQueue = MouQueue; + + MouNumber = 0; + MouLastEvent = 0; + MouEventMask = OS2_MOUSE_DEAFULT_EVENT_MASK; + MouDevStatus = 0; + + MouPtrLoc.row = MouPtrLoc.col = 0; + + return(FALSE); +} + -- cgit v1.2.3