#include <windows.h>
#include <user32.h>
+#include <string.h>
#include <debug.h>
+/* INTERNAL ******************************************************************/
+
+/* This callback routine is called directly after switching to gui mode */
+NTSTATUS STDCALL
+User32SetupDefaultCursors(PVOID Arguments, ULONG ArgumentLength)
+{
+ LRESULT Result = TRUE;
+ /* FIXME load system cursor scheme */
+
+ return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS));
+}
+
/* FUNCTIONS *****************************************************************/
-WINBOOL STDCALL
-CreateCaret(HWND hWnd,
- HBITMAP hBitmap,
- int nWidth,
- int nHeight)
+
+/*
+ * @unimplemented
+ */
+HCURSOR STDCALL
+CopyCursor(HCURSOR pcur)
{
- return FALSE;
+ UNIMPLEMENTED;
+ return (HCURSOR)0;
}
+
+/*
+ * @unimplemented
+ */
HCURSOR STDCALL
CreateCursor(HINSTANCE hInst,
int xHotSpot,
CONST VOID *pvANDPlane,
CONST VOID *pvXORPlane)
{
-
+
+ UNIMPLEMENTED;
return (HCURSOR)0;
}
-WINBOOL STDCALL
-DestroyCaret(VOID)
-{
- return FALSE;
-}
+/*
+ * @unimplemented
+ */
WINBOOL STDCALL
DestroyCursor(HCURSOR hCursor)
{
+ UNIMPLEMENTED;
return FALSE;
}
-UINT STDCALL
-GetCaretBlinkTime(VOID)
-{
- return 0;
-}
-
-WINBOOL STDCALL
-GetCaretPos(LPPOINT lpPoint)
-{
- return FALSE;
-}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
GetClipCursor(LPRECT lpRect)
{
- return FALSE;
+ RECT rc;
+ WINBOOL res;
+
+ if(!lpRect)
+ {
+ SetLastError(ERROR_NOACCESS);
+ return FALSE;
+ }
+
+ RtlCopyMemory(&rc, lpRect, sizeof(RECT));
+ res = NtUserGetClipCursor(&rc);
+ RtlCopyMemory(lpRect, &rc, sizeof(RECT));
+
+ return res;
}
+
+/*
+ * @unimplemented
+ */
HCURSOR STDCALL
GetCursor(VOID)
{
+ UNIMPLEMENTED;
return (HCURSOR)0;
}
+
+/*
+ * @unimplemented
+ */
WINBOOL STDCALL
GetCursorInfo(PCURSORINFO pci)
{
+ UNIMPLEMENTED;
return FALSE;
}
+
+/*
+ * @implemented
+ */
WINBOOL STDCALL
GetCursorPos(LPPOINT lpPoint)
{
- return FALSE;
+ POINT pos;
+ WINBOOL res;
+ /* Windows doesn't check if lpPoint == NULL, we do */
+ if(!lpPoint)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ res = (WINBOOL)NtUserCallTwoParam((DWORD)&pos, (DWORD)FALSE,
+ TWOPARAM_ROUTINE_CURSORPOSITION);
+ if(res)
+ {
+ lpPoint->x = pos.x;
+ lpPoint->y = pos.y;
+ }
+ return res;
}
-WINBOOL STDCALL
-HideCaret(HWND hWnd)
-{
- return FALSE;
-}
+/*
+ * @implemented
+ */
HCURSOR STDCALL
LoadCursorA(HINSTANCE hInstance,
LPCSTR lpCursorName)
LR_DEFAULTSIZE));
}
+
+/*
+ * @implemented
+ */
HCURSOR STDCALL
LoadCursorFromFileA(LPCSTR lpFileName)
{
return(Result);
}
+
+/*
+ * @implemented
+ */
HCURSOR STDCALL
LoadCursorFromFileW(LPCWSTR lpFileName)
{
LR_LOADFROMFILE | LR_DEFAULTSIZE));
}
+
+/*
+ * @implemented
+ */
HCURSOR STDCALL
LoadCursorW(HINSTANCE hInstance,
LPCWSTR lpCursorName)
LR_DEFAULTSIZE));
}
-WINBOOL STDCALL
-SetCaretBlinkTime(UINT uMSeconds)
-{
- return FALSE;
-}
-WINBOOL STDCALL
-SetCaretPos(int X,
- int Y)
+/*
+ * @implemented
+ */
+WINBOOL
+STDCALL
+ClipCursor(
+ CONST RECT *lpRect)
{
- return FALSE;
+ RECT rc;
+ if(lpRect)
+ {
+ RtlCopyMemory(&rc, lpRect, sizeof(RECT));
+ return NtUserClipCursor(&rc);
+ }
+ else
+ return NtUserClipCursor(NULL);
}
+
+/*
+ * @unimplemented
+ */
HCURSOR STDCALL
SetCursor(HCURSOR hCursor)
{
+ UNIMPLEMENTED;
return (HCURSOR)0;
}
+
+/*
+ * @implemented
+ */
WINBOOL STDCALL
SetCursorPos(int X,
int Y)
{
- return FALSE;
+ POINT pos;
+ pos.x = (LONG)X;
+ pos.y = (LONG)Y;
+ return (WINBOOL)NtUserCallTwoParam((DWORD)&pos, (DWORD)TRUE,
+ TWOPARAM_ROUTINE_CURSORPOSITION);
}
+
+/*
+ * @unimplemented
+ */
WINBOOL STDCALL
SetSystemCursor(HCURSOR hcur,
DWORD id)
{
+ UNIMPLEMENTED;
return FALSE;
}
-WINBOOL STDCALL
-ShowCaret(HWND hWnd)
-{
- return FALSE;
-}
+/*
+ * @unimplemented
+ */
int STDCALL
ShowCursor(WINBOOL bShow)
{
+ UNIMPLEMENTED;
+ return 0;
+}
+
+HCURSOR
+CursorIconToCursor(HICON hIcon, BOOL SemiTransparent)
+{
+ UNIMPLEMENTED;
return 0;
}