source: trunk/src/user32/user32.cpp@ 1089

Last change on this file since 1089 was 1089, checked in by cbratschi, 26 years ago

sorting in progress

File size: 135.6 KB
Line 
1/* $Id: user32.cpp,v 1.37 1999-09-28 18:43:08 cbratschi Exp $ */
2
3/*
4 * Win32 misc user32 API functions for OS/2
5 *
6 * Copyright 1998 Sander van Leeuwen
7 * Copyright 1998 Patrick Haller
8 * Copyright 1998 Peter Fitzsimmons
9 * Copyright 1999 Christoph Bratschi
10 * Copyright 1999 Daniela Engert (dani@ngrt.de)
11 *
12 *
13 * Project Odin Software License can be found in LICENSE.TXT
14 *
15 */
16/*****************************************************************************
17 * Name : USER32.CPP
18 * Purpose : This module maps all Win32 functions contained in USER32.DLL
19 * to their OS/2-specific counterparts as far as possible.
20 *****************************************************************************/
21
22#include <os2win.h>
23#include "misc.h"
24
25#include "user32.h"
26#include <winicon.h>
27#include "syscolor.h"
28
29#include <wchar.h>
30#include <stdlib.h>
31#include <string.h>
32#include <oslibwin.h>
33#include <win32wnd.h>
34#include <winuser.h>
35
36//undocumented stuff
37// WIN32API CalcChildScroll
38// WIN32API CascadeChildWindows
39// WIN32API ClientThreadConnect
40// WIN32API DragObject
41// WIN32API DrawFrame
42// WIN32API EditWndProc
43// WIN32API EndTask
44// WIN32API GetInputDesktop
45// WIN32API GetNextQueueWindow
46// WIN32API GetShellWindow
47// WIN32API InitSharedTable
48// WIN32API InitTask
49// WIN32API IsHungThread
50// WIN32API LockWindowStation
51// WIN32API ModifyAccess
52// WIN32API PlaySoundEvent
53// WIN32API RegisterLogonProcess
54// WIN32API RegisterNetworkCapabilities
55// WIN32API RegisterSystemThread
56// WIN32API SetDeskWallpaper
57// WIN32API SetDesktopBitmap
58// WIN32API SetInternalWindowPos
59// WIN32API SetLogonNotifyWindow
60// WIN32API SetShellWindow
61// WIN32API SetSysColorsTemp
62// WIN32API SetWindowFullScreenState
63// WIN32API SwitchToThisWindow
64// WIN32API SysErrorBox
65// WIN32API TileChildWindows
66// WIN32API UnlockWindowStation
67// WIN32API UserClientDllInitialize
68// WIN32API UserSignalProc
69// WIN32API WinOldAppHackoMatic
70// WIN32API WNDPROC_CALLBACK
71// WIN32API YieldTask
72
73/* Coordinate Transformation */
74
75inline void OS2ToWin32ScreenPos(POINT *dest,POINT *source)
76{
77 dest->x = source->x;
78 dest->y = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CYSCREEN)-1-source->y;
79}
80
81inline void Win32ToOS2ScreenPos(POINT *dest,POINT *source)
82{
83 OS2ToWin32ScreenPos(dest,source); //transform back
84}
85
86/* Rectangle Functions - parts from wine/windows/rect.c */
87
88BOOL WIN32API CopyRect( PRECT lprcDst, const RECT * lprcSrc)
89{
90// ddprintf(("USER32: CopyRect\n"));
91 if (!lprcDst || !lprcSrc) {
92 SetLastError(ERROR_INVALID_PARAMETER);
93 return FALSE;
94 }
95
96 memcpy(lprcDst,lprcSrc,sizeof(RECT));
97
98 return TRUE;
99}
100//******************************************************************************
101//******************************************************************************
102BOOL WIN32API EqualRect( const RECT *lprc1, const RECT *lprc2)
103{
104#ifdef DEBUG
105 WriteLog("USER32: EqualRect\n");
106#endif
107 if (!lprc1 || !lprc2)
108 {
109 SetLastError(ERROR_INVALID_PARAMETER);
110 return FALSE;
111 }
112
113 return (lprc1->left == lprc2->left &&
114 lprc1->right == lprc2->right &&
115 lprc1->top == lprc2->top &&
116 lprc1->bottom == lprc2->bottom);
117}
118//******************************************************************************
119//******************************************************************************
120BOOL WIN32API InflateRect( PRECT lprc, int dx, int dy)
121{
122#ifdef DEBUG
123 WriteLog("USER32: InflateRect\n");
124#endif
125 if (!lprc)
126 {
127 SetLastError(ERROR_INVALID_PARAMETER);
128 return FALSE;
129 }
130
131 lprc->left -= dx;
132 lprc->right += dx;
133 lprc->top -= dy;
134 lprc->bottom += dy;
135
136 return TRUE;
137}
138//******************************************************************************
139//******************************************************************************
140BOOL WIN32API IntersectRect( PRECT lprcDst, const RECT * lprcSrc1, const RECT * lprcSrc2)
141{
142#ifdef DEBUG
143//// WriteLog("USER32: IntersectRect\n");
144#endif
145 if (!lprcDst || !lprcSrc1 || !lprcSrc2)
146 {
147 SetLastError(ERROR_INVALID_PARAMETER);
148 return FALSE;
149 }
150
151 if (IsRectEmpty(lprcSrc1) || IsRectEmpty(lprcSrc2) ||
152 (lprcSrc1->left >= lprcSrc2->right) || (lprcSrc2->left >= lprcSrc1->right) ||
153 (lprcSrc1->top >= lprcSrc2->bottom) || (lprcSrc2->top >= lprcSrc1->bottom))
154 {
155 SetLastError(ERROR_INVALID_PARAMETER);
156 SetRectEmpty(lprcDst);
157 return FALSE;
158 }
159 lprcDst->left = MAX(lprcSrc1->left,lprcSrc2->left);
160 lprcDst->right = MIN(lprcSrc1->right,lprcSrc2->right);
161 lprcDst->top = MAX(lprcSrc1->top,lprcSrc2->top);
162 lprcDst->bottom = MIN(lprcSrc1->bottom,lprcSrc2->bottom);
163
164 return TRUE;
165}
166//******************************************************************************
167//******************************************************************************
168BOOL WIN32API IsRectEmpty( const RECT * lprc)
169{
170 if (!lprc)
171 {
172 SetLastError(ERROR_INVALID_PARAMETER);
173 return FALSE;
174 }
175
176 return (lprc->left == lprc->right || lprc->top == lprc->bottom);
177}
178//******************************************************************************
179//******************************************************************************
180BOOL WIN32API OffsetRect( PRECT lprc, int x, int y)
181{
182#ifdef DEBUG
183//// WriteLog("USER32: OffsetRect\n");
184#endif
185 if (!lprc)
186 {
187 SetLastError(ERROR_INVALID_PARAMETER);
188 return FALSE;
189 }
190
191 lprc->left += x;
192 lprc->right += x;
193 lprc->top += y;
194 lprc->bottom += y;
195
196 return TRUE;
197}
198//******************************************************************************
199//******************************************************************************
200BOOL WIN32API PtInRect( const RECT *lprc, POINT pt)
201{
202#ifdef DEBUG1
203 WriteLog("USER32: PtInRect\n");
204#endif
205 if (!lprc)
206 {
207 SetLastError(ERROR_INVALID_PARAMETER);
208 return FALSE;
209 }
210
211 return (pt.x >= lprc->left &&
212 pt.x < lprc->right &&
213 pt.y >= lprc->top &&
214 pt.y < lprc->bottom);
215}
216//******************************************************************************
217//******************************************************************************
218BOOL WIN32API SetRect( PRECT lprc, int nLeft, int nTop, int nRight, int nBottom)
219{
220 if (!lprc)
221 {
222 SetLastError(ERROR_INVALID_PARAMETER);
223 return FALSE;
224 }
225
226 lprc->left = nLeft;
227 lprc->top = nTop;
228 lprc->right = nRight;
229 lprc->bottom = nBottom;
230
231 return TRUE;
232}
233//******************************************************************************
234//******************************************************************************
235BOOL WIN32API SetRectEmpty( PRECT lprc)
236{
237 if (!lprc)
238 {
239 SetLastError(ERROR_INVALID_PARAMETER);
240 return FALSE;
241 }
242
243 lprc->left = lprc->right = lprc->top = lprc->bottom = 0;
244
245 return TRUE;
246}
247//******************************************************************************
248//******************************************************************************
249BOOL WIN32API SubtractRect( PRECT lprcDest, const RECT * lprcSrc1, const RECT * lprcSrc2)
250{
251#ifdef DEBUG
252 WriteLog("USER32: SubtractRect");
253#endif
254 RECT tmp;
255
256 if (!lprcDest || !lprcSrc1 || !lprcSrc2)
257 {
258 SetLastError(ERROR_INVALID_PARAMETER);
259 return FALSE;
260 }
261
262 if (IsRectEmpty(lprcSrc1))
263 {
264 SetLastError(ERROR_INVALID_PARAMETER);
265 SetRectEmpty(lprcDest);
266 return FALSE;
267 }
268 *lprcDest = *lprcSrc1;
269 if (IntersectRect(&tmp,lprcSrc1,lprcSrc2))
270 {
271 if (EqualRect(&tmp,lprcDest))
272 {
273 SetRectEmpty(lprcDest);
274 return FALSE;
275 }
276 if ((tmp.top == lprcDest->top) && (tmp.bottom == lprcDest->bottom))
277 {
278 if (tmp.left == lprcDest->left) lprcDest->left = tmp.right;
279 else if (tmp.right == lprcDest->right) lprcDest->right = tmp.left;
280 }
281 else if ((tmp.left == lprcDest->left) && (tmp.right == lprcDest->right))
282 {
283 if (tmp.top == lprcDest->top) lprcDest->top = tmp.bottom;
284 else if (tmp.bottom == lprcDest->bottom) lprcDest->bottom = tmp.top;
285 }
286 }
287
288 return TRUE;
289}
290//******************************************************************************
291//******************************************************************************
292BOOL WIN32API UnionRect( PRECT lprcDst, const RECT *lprcSrc1, const RECT *lprcSrc2)
293{
294#ifdef DEBUG
295 WriteLog("USER32: UnionRect\n");
296#endif
297 if (!lprcDst || !lprcSrc1 || !lprcSrc2)
298 {
299 SetLastError(ERROR_INVALID_PARAMETER);
300 return FALSE;
301 }
302
303 if (IsRectEmpty(lprcSrc1))
304 {
305 if (IsRectEmpty(lprcSrc2))
306 {
307 SetLastError(ERROR_INVALID_PARAMETER);
308 SetRectEmpty(lprcDst);
309 return FALSE;
310 }
311 else *lprcDst = *lprcSrc2;
312 }
313 else
314 {
315 if (IsRectEmpty(lprcSrc2)) *lprcDst = *lprcSrc1;
316 else
317 {
318 lprcDst->left = MIN(lprcSrc1->left,lprcSrc2->left);
319 lprcDst->right = MAX(lprcSrc1->right,lprcSrc2->right);
320 lprcDst->top = MIN(lprcSrc1->top,lprcSrc2->top);
321 lprcDst->bottom = MAX(lprcSrc1->bottom,lprcSrc2->bottom);
322 }
323 }
324
325 return TRUE;
326}
327
328/* String Manipulation Functions */
329
330int __cdecl wsprintfA(char *lpOut, LPCSTR lpFmt, ...)
331{
332 int rc;
333 va_list argptr;
334
335#ifdef DEBUG
336 WriteLog("USER32: wsprintfA\n");
337 WriteLog("USER32: %s\n", lpFmt);
338#endif
339 va_start(argptr, lpFmt);
340 rc = O32_wvsprintf(lpOut, (char *)lpFmt, argptr);
341 va_end(argptr);
342#ifdef DEBUG
343 WriteLog("USER32: %s\n", lpOut);
344#endif
345 return(rc);
346}
347//******************************************************************************
348//******************************************************************************
349int __cdecl wsprintfW(LPWSTR lpOut, LPCWSTR lpFmt, ...)
350{
351 int rc;
352 char *lpFmtA;
353 char szOut[512];
354 va_list argptr;
355
356 dprintf(("USER32: wsprintfW(%08xh,%08xh).\n",
357 lpOut,
358 lpFmt));
359
360 lpFmtA = UnicodeToAsciiString((LPWSTR)lpFmt);
361
362 /* @@@PH 98/07/13 transform "%s" to "%ls" does the unicode magic */
363 {
364 PCHAR pszTemp;
365 PCHAR pszTemp1;
366 ULONG ulStrings;
367 ULONG ulIndex; /* temporary string counter */
368
369 for (ulStrings = 0, /* determine number of placeholders */
370 pszTemp = lpFmtA;
371
372 (pszTemp != NULL) &&
373 (*pszTemp != 0);
374
375 ulStrings++)
376 {
377 pszTemp = strstr(pszTemp,
378 "%s");
379 if (pszTemp != NULL) /* skip 2 characters */
380 {
381 pszTemp++;
382 pszTemp++;
383 }
384 else
385 break; /* leave loop immediately */
386 }
387
388 if (ulStrings != 0) /* transformation required ? */
389 {
390 /* now reallocate lpFmt */
391 ulStrings += strlen(lpFmtA); /* calculate total string length */
392 pszTemp = lpFmtA; /* save string pointer */
393 pszTemp1 = lpFmtA; /* save string pointer */
394
395 /* @@@PH allocation has to be compatible to FreeAsciiString !!! */
396 lpFmtA = (char *)malloc(ulStrings + 1);
397 if (lpFmtA == NULL) /* check proper allocation */
398 return (0); /* raise error condition */
399
400 for (ulIndex = 0;
401 ulIndex <= ulStrings;
402 ulIndex++,
403 pszTemp++)
404 {
405 if ((pszTemp[0] == '%') &&
406 (pszTemp[1] == 's') )
407 {
408 /* replace %s by %ls */
409 lpFmtA[ulIndex++] = '%';
410 lpFmtA[ulIndex ] = 'l';
411 lpFmtA[ulIndex+1] = 's';
412 }
413 else
414 lpFmtA[ulIndex] = *pszTemp; /* just copy over the character */
415 }
416
417 lpFmtA[ulStrings] = 0; /* string termination */
418
419 FreeAsciiString(pszTemp1); /* the original string is obsolete */
420 }
421 }
422
423 dprintf(("USER32: wsprintfW (%s).\n",
424 lpFmt));
425
426 va_start(argptr,
427 lpFmt);
428
429 rc = O32_wvsprintf(szOut,
430 lpFmtA,
431 argptr);
432
433 AsciiToUnicode(szOut,
434 lpOut);
435
436 FreeAsciiString(lpFmtA);
437 return(rc);
438}
439//******************************************************************************
440//******************************************************************************
441int WIN32API wvsprintfA( LPSTR lpOutput, LPCSTR lpFormat, va_list arglist)
442{
443#ifdef DEBUG
444 WriteLog("USER32: wvsprintfA\n");
445#endif
446 return O32_wvsprintf(lpOutput,lpFormat,(LPCVOID*)arglist);
447}
448//******************************************************************************
449//******************************************************************************
450int WIN32API wvsprintfW(LPWSTR lpOutput, LPCWSTR lpFormat, va_list arglist)
451{
452 int rc;
453 char szOut[256];
454 char *lpFmtA;
455
456 lpFmtA = UnicodeToAsciiString((LPWSTR)lpFormat);
457#ifdef DEBUG
458 WriteLog("USER32: wvsprintfW, DOES NOT HANDLE UNICODE STRINGS!\n");
459 WriteLog("USER32: %s\n", lpFormat);
460#endif
461 rc = O32_wvsprintf(szOut, lpFmtA, (LPCVOID)arglist);
462
463 AsciiToUnicode(szOut, lpOutput);
464#ifdef DEBUG
465 WriteLog("USER32: %s\n", lpOutput);
466#endif
467 FreeAsciiString(lpFmtA);
468 return(rc);
469}
470
471#if 0
472/* Caret Functions */
473
474BOOL WIN32API CreateCaret( HWND hWnd, HBITMAP hBitmap, int nWidth, int nHeight)
475{
476#ifdef DEBUG
477 WriteLog("USER32: CreateCaret\n");
478#endif
479 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
480 return O32_CreateCaret(hWnd,hBitmap,nWidth,nHeight);
481}
482//******************************************************************************
483//******************************************************************************
484BOOL WIN32API DestroyCaret(void)
485{
486#ifdef DEBUG
487 WriteLog("USER32: DestroyCaret\n");
488#endif
489 return O32_DestroyCaret();
490}
491//******************************************************************************
492//******************************************************************************
493UINT WIN32API GetCaretBlinkTime(void)
494{
495#ifdef DEBUG
496 WriteLog("USER32: GetCaretBlinkTime\n");
497#endif
498 return O32_GetCaretBlinkTime();
499}
500//******************************************************************************
501//******************************************************************************
502BOOL WIN32API GetCaretPos( LPPOINT lpPoint)
503{
504#ifdef DEBUG
505 WriteLog("USER32: GetCaretPos\n");
506#endif
507 return O32_GetCaretPos(lpPoint);
508}
509//******************************************************************************
510//******************************************************************************
511BOOL WIN32API HideCaret( HWND hWnd)
512{
513#ifdef DEBUG
514 WriteLog("USER32: HideCaret\n");
515#endif
516 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
517 return O32_HideCaret(hWnd);
518}
519//******************************************************************************
520//******************************************************************************
521BOOL WIN32API SetCaretBlinkTime( UINT wMSeconds)
522{
523#ifdef DEBUG
524 WriteLog("USER32: SetCaretBlinkTime\n");
525#endif
526 return O32_SetCaretBlinkTime(wMSeconds);
527}
528//******************************************************************************
529//******************************************************************************
530BOOL WIN32API SetCaretPos( int nX, int nY)
531{
532 dprintf(("USER32: SetCaretPos\n"));
533 return O32_SetCaretPos(nX,nY);
534}
535//******************************************************************************
536//******************************************************************************
537BOOL WIN32API ShowCaret( HWND hwnd)
538{
539 dprintf(("USER32: ShowCaret\n"));
540 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
541 return O32_ShowCaret(hwnd);
542}
543#endif
544
545/* Cursor Functions */
546
547BOOL WIN32API ClipCursor(const RECT * lpRect)
548{
549#ifdef DEBUG
550 WriteLog("USER32: ClipCursor\n");
551#endif
552 return O32_ClipCursor(lpRect);
553}
554//******************************************************************************
555//******************************************************************************
556HCURSOR WIN32API CreateCursor( HINSTANCE hInst, int xHotSpot, int yHotSpot, int nWidth, int nHeight, const VOID *pvANDPlane, const VOID *pvXORPlane)
557{
558#ifdef DEBUG
559 WriteLog("USER32: CreateCursor\n");
560#endif
561 return O32_CreateCursor(hInst,xHotSpot,yHotSpot,nWidth,nHeight,pvANDPlane,pvXORPlane);
562}
563//******************************************************************************
564//******************************************************************************
565BOOL WIN32API DestroyCursor( HCURSOR hCursor)
566{
567#ifdef DEBUG
568 WriteLog("USER32: DestroyCursor\n");
569#endif
570 return O32_DestroyCursor(hCursor);
571}
572//******************************************************************************
573//******************************************************************************
574BOOL WIN32API GetClipCursor( LPRECT lpRect)
575{
576#ifdef DEBUG
577 WriteLog("USER32: GetClipCursor\n");
578#endif
579 return O32_GetClipCursor(lpRect);
580}
581//******************************************************************************
582//******************************************************************************
583HCURSOR WIN32API GetCursor(void)
584{
585#ifdef DEBUG
586//// WriteLog("USER32: GetCursor\n");
587#endif
588 return O32_GetCursor();
589}
590//******************************************************************************
591//******************************************************************************
592BOOL WIN32API GetCursorPos( PPOINT lpPoint)
593{
594 BOOL rc;
595 POINT point;
596#ifdef DEBUG
597//// WriteLog("USER32: GetCursorPos\n");
598#endif
599 if (!lpPoint) return FALSE;
600 if (OSLibWinQueryPointerPos(OSLIB_HWND_DESKTOP,&point)) //POINT == POINTL
601 {
602 OS2ToWin32ScreenPos(lpPoint,&point);
603 return TRUE;
604 } else return FALSE;
605}
606/*****************************************************************************
607 * Name : HCURSOR WIN32API LoadCursorFromFileA
608 * Purpose : The LoadCursorFromFile function creates a cursor based on data
609 * contained in a file. The file is specified by its name or by a
610 * system cursor identifier. The function returns a handle to the
611 * newly created cursor. Files containing cursor data may be in
612 * either cursor (.CUR) or animated cursor (.ANI) format.
613 * Parameters: LPCTSTR lpFileName pointer to cursor file, or system cursor id
614 * Variables :
615 * Result : If the function is successful, the return value is a handle to
616 * the new cursor.
617 * If the function fails, the return value is NULL. To get extended
618 * error information, call GetLastError. GetLastError may return
619 * the following
620 * Remark :
621 * Status : UNTESTED STUB
622 *
623 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
624 *****************************************************************************/
625HCURSOR WIN32API LoadCursorFromFileA(LPCTSTR lpFileName)
626{
627 if (!HIWORD(lpFileName))
628 {
629 return LoadCursorA(NULL,lpFileName);
630 } else
631 {
632 dprintf(("USER32:LoadCursorFromFileA (%s) not implemented.\n",
633 lpFileName));
634
635 return (NULL);
636 }
637}
638/*****************************************************************************
639 * Name : HCURSOR WIN32API LoadCursorFromFileW
640 * Purpose : The LoadCursorFromFile function creates a cursor based on data
641 * contained in a file. The file is specified by its name or by a
642 * system cursor identifier. The function returns a handle to the
643 * newly created cursor. Files containing cursor data may be in
644 * either cursor (.CUR) or animated cursor (.ANI) format.
645 * Parameters: LPCTSTR lpFileName pointer to cursor file, or system cursor id
646 * Variables :
647 * Result : If the function is successful, the return value is a handle to
648 * the new cursor.
649 * If the function fails, the return value is NULL. To get extended
650 * error information, call GetLastError. GetLastError may return
651 * the following
652 * Remark :
653 * Status : UNTESTED STUB
654 *
655 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
656 *****************************************************************************/
657HCURSOR WIN32API LoadCursorFromFileW(LPCWSTR lpFileName)
658{
659 if (!HIWORD(lpFileName))
660 {
661 return LoadCursorW(NULL,lpFileName);
662 } else
663 {
664 dprintf(("USER32:LoadCursorFromFileW (%s) not implemented.\n",
665 lpFileName));
666
667 return (NULL);
668 }
669}
670//******************************************************************************
671//******************************************************************************
672HCURSOR WIN32API SetCursor( HCURSOR hcur)
673{
674 HCURSOR rc;
675
676 rc = O32_SetCursor(hcur);
677 dprintf(("USER32: SetCursor %x (prev %x (%x))\n", hcur, rc, O32_GetCursor()));
678 return rc;
679}
680//******************************************************************************
681//******************************************************************************
682BOOL WIN32API SetCursorPos( int X, int Y)
683{
684#ifdef DEBUG
685 WriteLog("USER32: SetCursorPos\n");
686#endif
687 return O32_SetCursorPos(X,Y);
688}
689/*****************************************************************************
690 * Name : BOOL WIN32API SetSystemCursor
691 * Purpose : The SetSystemCursor function replaces the contents of the system
692 * cursor specified by dwCursorId with the contents of the cursor
693 * specified by hCursor, and then destroys hCursor. This function
694 * lets an application customize the system cursors.
695 * Parameters: HCURSOR hCursor set specified system cursor to this cursor's
696 * contents, then destroy this
697 * DWORD dwCursorID system cursor specified by its identifier
698 * Variables :
699 * Result : If the function succeeds, the return value is TRUE.
700 * If the function fails, the return value is FALSE. To get extended
701 * error information, call GetLastError.
702 * Remark :
703 * Status : UNTESTED STUB
704 *
705 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
706 *****************************************************************************/
707BOOL WIN32API SetSystemCursor(HCURSOR hCursor,
708 DWORD dwCursorId)
709{
710 dprintf(("USER32:SetSystemCursor (%08xh,%08x) not supported.\n",
711 hCursor,
712 dwCursorId));
713
714 return DestroyCursor(hCursor);
715}
716//******************************************************************************
717//******************************************************************************
718int WIN32API ShowCursor( BOOL bShow)
719{
720#ifdef DEBUG
721 WriteLog("USER32: ShowCursor\n");
722#endif
723 return O32_ShowCursor(bShow);
724}
725
726/* Mouse Input Functions */
727
728/*****************************************************************************
729 * Name : BOOL WIN32API DragDetect
730 * Purpose : The DragDetect function captures the mouse and tracks its movement
731 * Parameters: HWND hwnd
732 * POINT pt
733 * Variables :
734 * Result : If the user moved the mouse outside of the drag rectangle while
735 * holding the left button down, the return value is TRUE.
736 * If the user did not move the mouse outside of the drag rectangle
737 * while holding the left button down, the return value is FALSE.
738 * Remark :
739 * Status : UNTESTED STUB
740 *
741 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
742 *****************************************************************************/
743BOOL WIN32API DragDetect(HWND hwnd,
744 POINT pt)
745{
746 dprintf(("USER32:DragDetect(%08xh,...) not implemented.\n",
747 hwnd));
748
749 return (FALSE);
750}
751//******************************************************************************
752//******************************************************************************
753HWND WIN32API GetCapture(void)
754{
755#ifdef DEBUG
756 WriteLog("USER32: GetCapture\n");
757#endif
758 return Win32Window::OS2ToWin32Handle(O32_GetCapture());
759}
760//******************************************************************************
761//******************************************************************************
762UINT WIN32API GetDoubleClickTime(void)
763{
764#ifdef DEBUG
765 WriteLog("USER32: GetDoubleClickTime\n");
766#endif
767 return O32_GetDoubleClickTime();
768}
769/*****************************************************************************
770 * Name : VOID WIN32API mouse_event
771 * Purpose : The mouse_event function synthesizes mouse motion and button clicks.
772 * Parameters: DWORD dwFlags flags specifying various motion/click variants
773 * DWORD dx horizontal mouse position or position change
774 * DWORD dy vertical mouse position or position change
775 * DWORD cButtons unused, reserved for future use, set to zero
776 * DWORD dwExtraInfo 32 bits of application-defined information
777 * Variables :
778 * Result :
779 * Remark :
780 * Status : UNTESTED STUB
781 *
782 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
783 *****************************************************************************/
784VOID WIN32API mouse_event(DWORD dwFlags,
785 DWORD dx,
786 DWORD dy,
787 DWORD cButtons,
788 DWORD dwExtraInfo)
789{
790 dprintf(("USER32:mouse_event (%08xh,%u,%u,%u,%08x) not implemented.\n",
791 dwFlags,
792 dx,
793 dy,
794 cButtons,
795 dwExtraInfo));
796}
797//******************************************************************************
798//******************************************************************************
799BOOL WIN32API ReleaseCapture(void)
800{
801#ifdef DEBUG
802 WriteLog("USER32: ReleaseCapture\n");
803#endif
804 return O32_ReleaseCapture();
805}
806//******************************************************************************
807//******************************************************************************
808HWND WIN32API SetCapture( HWND hwnd)
809{
810#ifdef DEBUG
811 WriteLog("USER32: SetCapture\n");
812#endif
813 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
814 return Win32Window::OS2ToWin32Handle(O32_SetCapture(hwnd));
815}
816//******************************************************************************
817//******************************************************************************
818BOOL WIN32API SetDoubleClickTime( UINT uInterval)
819{
820#ifdef DEBUG
821 WriteLog("USER32: SetDoubleClickTime\n");
822#endif
823 return O32_SetDoubleClickTime(uInterval);
824}
825//******************************************************************************
826//******************************************************************************
827BOOL WIN32API SwapMouseButton( BOOL fSwap)
828{
829#ifdef DEBUG
830 WriteLog("USER32: SwapMouseButton\n");
831#endif
832 return O32_SwapMouseButton(fSwap);
833}
834
835/* Error Functions */
836
837BOOL WIN32API ExitWindowsEx( UINT uFlags, DWORD dwReserved)
838{
839#ifdef DEBUG
840 WriteLog("USER32: ExitWindowsEx\n");
841#endif
842 return O32_ExitWindowsEx(uFlags,dwReserved);
843}
844//******************************************************************************
845//******************************************************************************
846BOOL WIN32API MessageBeep( UINT uType)
847{
848 INT flStyle;
849
850#ifdef DEBUG
851 WriteLog("USER32: MessageBeep\n");
852#endif
853
854 switch (uType)
855 {
856 case 0xFFFFFFFF:
857 OSLibDosBeep(500,50);
858 return TRUE;
859 case MB_ICONASTERISK:
860 flStyle = WAOS_NOTE;
861 break;
862 case MB_ICONEXCLAMATION:
863 flStyle = WAOS_WARNING;
864 break;
865 case MB_ICONHAND:
866 case MB_ICONQUESTION:
867 case MB_OK:
868 flStyle = WAOS_NOTE;
869 break;
870 default:
871 flStyle = WAOS_ERROR; //CB: should be right
872 break;
873 }
874 return OSLibWinAlarm(OSLIB_HWND_DESKTOP,flStyle);
875}
876//******************************************************************************
877//2nd parameter not used according to SDK (yet?)
878//******************************************************************************
879VOID WIN32API SetLastErrorEx(DWORD dwErrCode, DWORD dwType)
880{
881#ifdef DEBUG
882 WriteLog("USER32: SetLastErrorEx\n");
883#endif
884 SetLastError(dwErrCode);
885}
886
887/* Accessibility Functions */
888
889int WIN32API GetSystemMetrics(int nIndex)
890{
891 int rc = 0;
892
893 switch(nIndex) {
894 case SM_CXICONSPACING: //TODO: size of grid cell for large icons
895 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CXICON);
896 //CB: return standard windows icon size?
897 //rc = 32;
898 break;
899 case SM_CYICONSPACING:
900 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CYICON);
901 //read SM_CXICONSPACING comment
902 //rc = 32;
903 break;
904 case SM_PENWINDOWS:
905 rc = FALSE;
906 break;
907 case SM_DBCSENABLED:
908 rc = FALSE;
909 break;
910 case SM_CXEDGE: //size of 3D window edge (not supported)
911 rc = 1;
912 break;
913 case SM_CYEDGE:
914 rc = 1;
915 break;
916 case SM_CXMINSPACING: //can be SM_CXMINIMIZED or larger
917 //CB: replace with const
918 rc = O32_GetSystemMetrics(SM_CXMINIMIZED);
919 break;
920 case SM_CYMINSPACING:
921 //CB: replace with const
922 rc = GetSystemMetrics(SM_CYMINIMIZED);
923 break;
924 case SM_CXICON:
925 case SM_CYICON:
926 rc = 32; //CB: Win32: only 32x32, OS/2 32x32/40x40
927 // we must implement 32x32 for all screen resolutions
928 break;
929 case SM_CXSMICON: //recommended size of small icons (TODO: adjust to screen res.)
930 rc = 16;
931 break;
932 case SM_CYSMICON:
933 rc = 16;
934 break;
935 case SM_CYSMCAPTION: //size in pixels of a small caption (TODO: ????)
936 rc = 8;
937 break;
938 case SM_CXSMSIZE: //size of small caption buttons (pixels) (TODO: implement properly)
939 rc = 16;
940 break;
941 case SM_CYSMSIZE:
942 rc = 16;
943 break;
944 case SM_CXMENUSIZE: //TODO: size of menu bar buttons (such as MDI window close)
945 rc = 16;
946 break;
947 case SM_CYMENUSIZE:
948 rc = 16;
949 break;
950 case SM_ARRANGE:
951 rc = ARW_BOTTOMLEFT | ARW_LEFT;
952 break;
953 case SM_CXMINIMIZED:
954 break;
955 case SM_CYMINIMIZED:
956 break;
957 case SM_CXMAXTRACK: //max window size
958 case SM_CXMAXIMIZED: //max toplevel window size
959 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CXSCREEN);
960 break;
961 case SM_CYMAXTRACK:
962 case SM_CYMAXIMIZED:
963 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CYSCREEN);
964 break;
965 case SM_NETWORK:
966 rc = 0x01; //TODO: default = yes
967 break;
968 case SM_CLEANBOOT:
969 rc = 0; //normal boot
970 break;
971 case SM_CXDRAG: //nr of pixels before drag becomes a real one
972 rc = 2;
973 break;
974 case SM_CYDRAG:
975 rc = 2;
976 break;
977 case SM_SHOWSOUNDS: //show instead of play sound
978 rc = FALSE;
979 break;
980 case SM_CXMENUCHECK:
981 rc = 4; //TODO
982 break;
983 case SM_CYMENUCHECK:
984 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CYMENU);
985 break;
986 case SM_SLOWMACHINE:
987 rc = FALSE; //even a slow machine is fast with OS/2 :)
988 break;
989 case SM_MIDEASTENABLED:
990 rc = FALSE;
991 break;
992 case SM_CMETRICS:
993 //CB: replace with const
994 rc = O32_GetSystemMetrics(44); //Open32 changed this one
995 break;
996 default:
997 //better than nothing
998 rc = O32_GetSystemMetrics(nIndex);
999 break;
1000 }
1001#ifdef DEBUG
1002 WriteLog("USER32: GetSystemMetrics %d returned %d\n", nIndex, rc);
1003#endif
1004 return(rc);
1005}
1006//******************************************************************************
1007/* Not support by Open32 (not included are the new win9x parameters):
1008 case SPI_GETFASTTASKSWITCH:
1009 case SPI_GETGRIDGRANULARITY:
1010 case SPI_GETICONTITLELOGFONT:
1011 case SPI_GETICONTITLEWRAP:
1012 case SPI_GETMENUDROPALIGNMENT:
1013 case SPI_ICONHORIZONTALSPACING:
1014 case SPI_ICONVERTICALSPACING:
1015 case SPI_LANGDRIVER:
1016 case SPI_SETFASTTASKSWITCH:
1017 case SPI_SETGRIDGRANULARITY:
1018 case SPI_SETICONTITLELOGFONT:
1019 case SPI_SETICONTITLEWRAP:
1020 case SPI_SETMENUDROPALIGNMENT:
1021 case SPI_GETSCREENSAVEACTIVE:
1022 case SPI_GETSCREENSAVETIMEOUT:
1023 case SPI_SETDESKPATTERN:
1024 case SPI_SETDESKWALLPAPER:
1025 case SPI_SETSCREENSAVEACTIVE:
1026 case SPI_SETSCREENSAVETIMEOUT:
1027*/
1028//******************************************************************************
1029BOOL WIN32API SystemParametersInfoA(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
1030{
1031 BOOL rc = TRUE;
1032 NONCLIENTMETRICSA *cmetric = (NONCLIENTMETRICSA *)pvParam;
1033
1034 switch(uiAction) {
1035 case SPI_SCREENSAVERRUNNING:
1036 *(BOOL *)pvParam = FALSE;
1037 break;
1038 case SPI_GETDRAGFULLWINDOWS:
1039 *(BOOL *)pvParam = FALSE;
1040 break;
1041 case SPI_GETNONCLIENTMETRICS:
1042 memset(cmetric, 0, sizeof(NONCLIENTMETRICSA));
1043 cmetric->cbSize = sizeof(NONCLIENTMETRICSA);
1044
1045 //CB: fonts not handled by Open32, set to WarpSans
1046 lstrcpyA(cmetric->lfCaptionFont.lfFaceName,"WarpSans");
1047 cmetric->lfCaptionFont.lfHeight = 9;
1048
1049 lstrcpyA(cmetric->lfMenuFont.lfFaceName,"WarpSans");
1050 cmetric->lfMenuFont.lfHeight = 9;
1051
1052 lstrcpyA(cmetric->lfStatusFont.lfFaceName,"WarpSans");
1053 cmetric->lfStatusFont.lfHeight = 9;
1054
1055 lstrcpyA(cmetric->lfMessageFont.lfFaceName,"WarpSans");
1056 cmetric->lfMessageFont.lfHeight = 9;
1057
1058 cmetric->iBorderWidth = GetSystemMetrics(SM_CXBORDER);
1059 cmetric->iScrollWidth = GetSystemMetrics(SM_CXHSCROLL);
1060 cmetric->iScrollHeight = GetSystemMetrics(SM_CYHSCROLL);
1061 cmetric->iCaptionWidth = 32; //TODO
1062 cmetric->iCaptionHeight = 16; //TODO
1063 cmetric->iSmCaptionWidth = GetSystemMetrics(SM_CXSMSIZE);
1064 cmetric->iSmCaptionHeight = GetSystemMetrics(SM_CYSMSIZE);
1065 cmetric->iMenuWidth = 32; //TODO
1066 cmetric->iMenuHeight = GetSystemMetrics(SM_CYMENU);
1067 break;
1068 case SPI_GETICONTITLELOGFONT:
1069 {
1070 LPLOGFONTA lpLogFont = (LPLOGFONTA)pvParam;
1071
1072 /* from now on we always have an alias for MS Sans Serif */
1073 strcpy(lpLogFont->lfFaceName, "MS Sans Serif");
1074 lpLogFont->lfHeight = -GetProfileIntA("Desktop","IconTitleSize", 8);
1075 lpLogFont->lfWidth = 0;
1076 lpLogFont->lfEscapement = lpLogFont->lfOrientation = 0;
1077 lpLogFont->lfWeight = FW_NORMAL;
1078 lpLogFont->lfItalic = FALSE;
1079 lpLogFont->lfStrikeOut = FALSE;
1080 lpLogFont->lfUnderline = FALSE;
1081 lpLogFont->lfCharSet = ANSI_CHARSET;
1082 lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
1083 lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
1084 lpLogFont->lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
1085 break;
1086 }
1087 case SPI_GETBORDER:
1088 *(INT *)pvParam = GetSystemMetrics( SM_CXFRAME );
1089 break;
1090
1091 case SPI_GETWORKAREA:
1092 SetRect( (RECT *)pvParam, 0, 0,
1093 GetSystemMetrics( SM_CXSCREEN ),
1094 GetSystemMetrics( SM_CYSCREEN )
1095 );
1096 break;
1097
1098 case 104: //TODO: Undocumented
1099 rc = 16;
1100 break;
1101 default:
1102 rc = O32_SystemParametersInfo(uiAction, uiParam, pvParam, fWinIni);
1103 break;
1104 }
1105#ifdef DEBUG
1106 WriteLog("USER32: SystemParametersInfoA %d, returned %d\n", uiAction, rc);
1107#endif
1108 return(rc);
1109}
1110//******************************************************************************
1111//TODO: Check for more options that have different structs for Unicode!!!!
1112//******************************************************************************
1113BOOL WIN32API SystemParametersInfoW(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
1114{
1115 BOOL rc;
1116 NONCLIENTMETRICSW *clientMetricsW = (NONCLIENTMETRICSW *)pvParam;
1117 NONCLIENTMETRICSA clientMetricsA = {0};
1118 PVOID pvParamA;
1119 UINT uiParamA;
1120
1121 switch(uiAction) {
1122 case SPI_SETNONCLIENTMETRICS:
1123 clientMetricsA.cbSize = sizeof(NONCLIENTMETRICSA);
1124 clientMetricsA.iBorderWidth = clientMetricsW->iBorderWidth;
1125 clientMetricsA.iScrollWidth = clientMetricsW->iScrollWidth;
1126 clientMetricsA.iScrollHeight = clientMetricsW->iScrollHeight;
1127 clientMetricsA.iCaptionWidth = clientMetricsW->iCaptionWidth;
1128 clientMetricsA.iCaptionHeight = clientMetricsW->iCaptionHeight;
1129 ConvertFontWA(&clientMetricsW->lfCaptionFont, &clientMetricsA.lfCaptionFont);
1130 clientMetricsA.iSmCaptionWidth = clientMetricsW->iSmCaptionWidth;
1131 clientMetricsA.iSmCaptionHeight = clientMetricsW->iSmCaptionHeight;
1132 ConvertFontWA(&clientMetricsW->lfSmCaptionFont, &clientMetricsA.lfSmCaptionFont);
1133 clientMetricsA.iMenuWidth = clientMetricsW->iMenuWidth;
1134 clientMetricsA.iMenuHeight = clientMetricsW->iMenuHeight;
1135 ConvertFontWA(&clientMetricsW->lfMenuFont, &clientMetricsA.lfMenuFont);
1136 ConvertFontWA(&clientMetricsW->lfStatusFont, &clientMetricsA.lfStatusFont);
1137 ConvertFontWA(&clientMetricsW->lfMessageFont, &clientMetricsA.lfMessageFont);
1138 //no break
1139 case SPI_GETNONCLIENTMETRICS:
1140 uiParamA = sizeof(NONCLIENTMETRICSA);
1141 pvParamA = &clientMetricsA;
1142 break;
1143 case SPI_GETICONTITLELOGFONT:
1144 {
1145 LPLOGFONTW lpLogFont = (LPLOGFONTW)pvParam;
1146
1147 /* from now on we always have an alias for MS Sans Serif */
1148 lstrcpyW(lpLogFont->lfFaceName, (LPCWSTR)L"MS Sans Serif");
1149 lpLogFont->lfHeight = -GetProfileIntA("Desktop","IconTitleSize", 8);
1150 lpLogFont->lfWidth = 0;
1151 lpLogFont->lfEscapement = lpLogFont->lfOrientation = 0;
1152 lpLogFont->lfWeight = FW_NORMAL;
1153 lpLogFont->lfItalic = FALSE;
1154 lpLogFont->lfStrikeOut = FALSE;
1155 lpLogFont->lfUnderline = FALSE;
1156 lpLogFont->lfCharSet = ANSI_CHARSET;
1157 lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
1158 lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
1159 lpLogFont->lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
1160 return TRUE;
1161 }
1162 default:
1163 pvParamA = pvParam;
1164 uiParamA = uiParam;
1165 break;
1166 }
1167 rc = SystemParametersInfoA(uiAction, uiParamA, pvParamA, fWinIni);
1168
1169 switch(uiAction) {
1170 case SPI_GETNONCLIENTMETRICS:
1171 clientMetricsW->cbSize = sizeof(*clientMetricsW);
1172 clientMetricsW->iBorderWidth = clientMetricsA.iBorderWidth;
1173 clientMetricsW->iScrollWidth = clientMetricsA.iScrollWidth;
1174 clientMetricsW->iScrollHeight = clientMetricsA.iScrollHeight;
1175 clientMetricsW->iCaptionWidth = clientMetricsA.iCaptionWidth;
1176 clientMetricsW->iCaptionHeight = clientMetricsA.iCaptionHeight;
1177 ConvertFontAW(&clientMetricsA.lfCaptionFont, &clientMetricsW->lfCaptionFont);
1178
1179 clientMetricsW->iSmCaptionWidth = clientMetricsA.iSmCaptionWidth;
1180 clientMetricsW->iSmCaptionHeight = clientMetricsA.iSmCaptionHeight;
1181 ConvertFontAW(&clientMetricsA.lfSmCaptionFont, &clientMetricsW->lfSmCaptionFont);
1182
1183 clientMetricsW->iMenuWidth = clientMetricsA.iMenuWidth;
1184 clientMetricsW->iMenuHeight = clientMetricsA.iMenuHeight;
1185 ConvertFontAW(&clientMetricsA.lfMenuFont, &clientMetricsW->lfMenuFont);
1186 ConvertFontAW(&clientMetricsA.lfStatusFont, &clientMetricsW->lfStatusFont);
1187 ConvertFontAW(&clientMetricsA.lfMessageFont, &clientMetricsW->lfMessageFont);
1188 break;
1189 }
1190#ifdef DEBUG
1191 WriteLog("USER32: SystemParametersInfoW %d, returned %d\n", uiAction, rc);
1192#endif
1193 return(rc);
1194}
1195
1196/* Timer Functions */
1197
1198#if 0
1199BOOL WIN32API KillTimer(HWND hWnd, UINT uIDEvent)
1200{
1201#ifdef DEBUG
1202 WriteLog("USER32: KillTimer\n");
1203#endif
1204 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
1205 //WinStopTimer
1206 //CB: replace
1207 return O32_KillTimer(hWnd,uIDEvent);
1208}
1209//******************************************************************************
1210//******************************************************************************
1211UINT WIN32API SetTimer( HWND hwnd, UINT idTimer, UINT uTimeout, TIMERPROC tmprc)
1212{
1213#ifdef DEBUG
1214 WriteLog("USER32: SetTimer INCORRECT CALLING CONVENTION FOR HANDLER!!!!!\n");
1215#endif
1216 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
1217 //SvL: Write callback handler class for this one
1218 //CB: replace
1219 return O32_SetTimer(hwnd,idTimer,uTimeout,(TIMERPROC_O32)tmprc);
1220}
1221#endif
1222
1223/* Process and Thread Functions */
1224
1225//******************************************************************************
1226//DWORD idAttach; /* thread to attach */
1227//DWORD idAttachTo; /* thread to attach to */
1228//BOOL fAttach; /* attach or detach */
1229//******************************************************************************
1230BOOL WIN32API AttachThreadInput(DWORD idAttach, DWORD idAttachTo, BOOL fAttach)
1231{
1232#ifdef DEBUG
1233 WriteLog("USER32: AttachThreadInput, not implemented\n");
1234#endif
1235 return(TRUE);
1236}
1237//******************************************************************************
1238//TODO:How can we emulate this one in OS/2???
1239//******************************************************************************
1240DWORD WIN32API WaitForInputIdle(HANDLE hProcess, DWORD dwTimeOut)
1241{
1242#ifdef DEBUG
1243 WriteLog("USER32: WaitForInputIdle (Not Implemented) %d\n", dwTimeOut);
1244#endif
1245
1246 if(dwTimeOut == INFINITE) return(0);
1247
1248// DosSleep(dwTimeOut/16);
1249 return(0);
1250}
1251
1252/* Help Functions */
1253
1254BOOL WIN32API WinHelpA( HWND hwnd, LPCSTR lpszHelp, UINT uCommand, DWORD dwData)
1255{
1256#ifdef DEBUG
1257 WriteLog("USER32: WinHelp not implemented %s\n", lpszHelp);
1258#endif
1259// hwnd = Win32Window::Win32ToOS2Handle(hwnd);
1260// return O32_WinHelp(arg1, arg2, arg3, arg4);
1261
1262 return(TRUE);
1263}
1264//******************************************************************************
1265//******************************************************************************
1266BOOL WIN32API WinHelpW( HWND arg1, LPCWSTR arg2, UINT arg3, DWORD arg4)
1267{
1268 char *astring = UnicodeToAsciiString((LPWSTR)arg2);
1269 BOOL rc;
1270
1271#ifdef DEBUG
1272 WriteLog("USER32: WinHelpW\n");
1273#endif
1274 rc = WinHelpA(arg1, astring, arg3, arg4);
1275 FreeAsciiString(astring);
1276 return rc;
1277}
1278
1279/* Keyboard and Input Functions */
1280
1281BOOL WIN32API ActivateKeyboardLayout(HKL hkl, UINT fuFlags)
1282{
1283#ifdef DEBUG
1284 WriteLog("USER32: ActivateKeyboardLayout, not implemented\n");
1285#endif
1286 return(TRUE);
1287}
1288//******************************************************************************
1289//SvL: 24-6-'97 - Added
1290//TODO: Not implemented
1291//******************************************************************************
1292WORD WIN32API GetAsyncKeyState(INT nVirtKey)
1293{
1294#ifdef DEBUG
1295//// WriteLog("USER32: GetAsyncKeyState Not implemented\n");
1296#endif
1297 return 0;
1298}
1299/*****************************************************************************
1300 * Name : BOOL WIN32API GetKeyboardLayoutNameA
1301 * Purpose : The GetKeyboardLayoutName function retrieves the name of the
1302 * active keyboard layout.
1303 * Parameters: LPTSTR pwszKLID address of buffer for layout name
1304 * Variables :
1305 * Result : If the function succeeds, the return value is TRUE.
1306 * If the function fails, the return value is FALSE. To get extended
1307 * error information, call GetLastError.
1308 * Remark :
1309 * Status : UNTESTED STUB
1310 *
1311 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1312 *****************************************************************************/
1313// @@@PH Win32 BOOL's are casted to INTs
1314INT WIN32API GetKeyboardLayoutNameA(LPTSTR pwszKLID)
1315{
1316 dprintf(("USER32:GetKeyboardLayoutNameA (%08x) not implemented.",
1317 pwszKLID));
1318
1319 return(FALSE);
1320}
1321/*****************************************************************************
1322 * Name : BOOL WIN32API GetKeyboardLayoutNameW
1323 * Purpose : The GetKeyboardLayoutName function retrieves the name of the
1324 * active keyboard layout.
1325 * Parameters: LPTSTR pwszKLID address of buffer for layout name
1326 * Variables :
1327 * Result : If the function succeeds, the return value is TRUE.
1328 * If the function fails, the return value is FALSE. To get extended
1329 * error information, call GetLastError.
1330 * Remark :
1331 * Status : UNTESTED STUB
1332 *
1333 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1334 *****************************************************************************/
1335// @@@PH Win32 BOOL's are casted to INTs
1336INT WIN32API GetKeyboardLayoutNameW(LPWSTR pwszKLID)
1337{
1338 dprintf(("USER32:GetKeyboardLayoutNameW (%08x) not implemented.",
1339 pwszKLID));
1340
1341 return(FALSE);
1342}
1343//******************************************************************************
1344//******************************************************************************
1345BOOL WIN32API GetKeyboardState(PBYTE lpKeyState)
1346{
1347#ifdef DEBUG
1348 WriteLog("USER32: GetKeyboardState, not properly implemented\n");
1349#endif
1350 memset(lpKeyState, 0, 256);
1351 return(TRUE);
1352}
1353//******************************************************************************
1354//******************************************************************************
1355int WIN32API GetKeyNameTextA( LPARAM lParam, LPSTR lpString, int nSize)
1356{
1357#ifdef DEBUG
1358 WriteLog("USER32: GetKeyNameTextA\n");
1359#endif
1360 return O32_GetKeyNameText(lParam,lpString,nSize);
1361}
1362//******************************************************************************
1363//******************************************************************************
1364int WIN32API GetKeyNameTextW( LPARAM lParam, LPWSTR lpString, int nSize)
1365{
1366#ifdef DEBUG
1367 WriteLog("USER32: GetKeyNameTextW DOES NOT WORK\n");
1368#endif
1369 // NOTE: This will not work as is (needs UNICODE support)
1370 return 0;
1371// return O32_GetKeyNameText(arg1, arg2, arg3);
1372}
1373//******************************************************************************
1374//SvL: 24-6-'97 - Added
1375//******************************************************************************
1376SHORT WIN32API GetKeyState( int nVirtKey)
1377{
1378#ifdef DEBUG
1379 WriteLog("USER32: GetKeyState %d\n", nVirtKey);
1380#endif
1381 return O32_GetKeyState(nVirtKey);
1382}
1383/*****************************************************************************
1384 * Name : VOID WIN32API keybd_event
1385 * Purpose : The keybd_event function synthesizes a keystroke. The system
1386 * can use such a synthesized keystroke to generate a WM_KEYUP or
1387 * WM_KEYDOWN message. The keyboard driver's interrupt handler calls
1388 * the keybd_event function.
1389 * Parameters: BYTE bVk virtual-key code
1390
1391 * BYTE bScan hardware scan code
1392 * DWORD dwFlags flags specifying various function options
1393 * DWORD dwExtraInfo additional data associated with keystroke
1394 * Variables :
1395 * Result :
1396 * Remark :
1397 * Status : UNTESTED STUB
1398 *
1399 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1400 *****************************************************************************/
1401VOID WIN32API keybd_event (BYTE bVk,
1402 BYTE bScan,
1403 DWORD dwFlags,
1404 DWORD dwExtraInfo)
1405{
1406 dprintf(("USER32:keybd_event (%u,%u,%08xh,%08x) not implemented.\n",
1407 bVk,
1408 bScan,
1409 dwFlags,
1410 dwExtraInfo));
1411}
1412/*****************************************************************************
1413 * Name : HLK WIN32API LoadKeyboardLayoutA
1414 * Purpose : The LoadKeyboardLayout function loads a new keyboard layout into
1415 * the system. Several keyboard layouts can be loaded at a time, but
1416 * only one per process is active at a time. Loading multiple keyboard
1417 * layouts makes it possible to rapidly switch between layouts.
1418 * Parameters:
1419 * Variables :
1420 * Result : If the function succeeds, the return value is the handle of the
1421 * keyboard layout.
1422 * If the function fails, the return value is NULL. To get extended
1423 * error information, call GetLastError.
1424 * Remark :
1425 * Status : UNTESTED STUB
1426 *
1427 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1428 *****************************************************************************/
1429HKL WIN32API LoadKeyboardLayoutA(LPCTSTR pwszKLID,
1430 UINT Flags)
1431{
1432 dprintf(("USER32:LeadKeyboardLayoutA (%s,%u) not implemented.\n",
1433 pwszKLID,
1434 Flags));
1435
1436 return (NULL);
1437}
1438/*****************************************************************************
1439 * Name : HLK WIN32API LoadKeyboardLayoutW
1440 * Purpose : The LoadKeyboardLayout function loads a new keyboard layout into
1441 * the system. Several keyboard layouts can be loaded at a time, but
1442 * only one per process is active at a time. Loading multiple keyboard
1443 * layouts makes it possible to rapidly switch between layouts.
1444 * Parameters:
1445 * Variables :
1446 * Result : If the function succeeds, the return value is the handle of the
1447 * keyboard layout.
1448 * If the function fails, the return value is NULL. To get extended
1449 * error information, call GetLastError.
1450 * Remark :
1451 * Status : UNTESTED STUB
1452 *
1453 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1454 *****************************************************************************/
1455HKL WIN32API LoadKeyboardLayoutW(LPCWSTR pwszKLID,
1456 UINT Flags)
1457{
1458 dprintf(("USER32:LeadKeyboardLayoutW (%s,%u) not implemented.\n",
1459 pwszKLID,
1460 Flags));
1461
1462 return (NULL);
1463}
1464//******************************************************************************
1465//******************************************************************************
1466UINT WIN32API MapVirtualKeyA( UINT uCode, UINT uMapType)
1467{
1468#ifdef DEBUG
1469 WriteLog("USER32: MapVirtualKeyA\n");
1470#endif
1471 return O32_MapVirtualKey(uCode,uMapType);
1472}
1473//******************************************************************************
1474//******************************************************************************
1475UINT WIN32API MapVirtualKeyW( UINT uCode, UINT uMapType)
1476{
1477#ifdef DEBUG
1478 WriteLog("USER32: MapVirtualKeyW\n");
1479#endif
1480 // NOTE: This will not work as is (needs UNICODE support)
1481 return O32_MapVirtualKey(uCode,uMapType);
1482}
1483/*****************************************************************************
1484 * Name : UINT WIN32API MapVirtualKeyExA
1485 * Purpose : The MapVirtualKeyEx function translates (maps) a virtual-key
1486 * code into a scan code or character value, or translates a scan
1487 * code into a virtual-key code. The function translates the codes
1488 * using the input language and physical keyboard layout identified
1489 * by the given keyboard layout handle.
1490 * Parameters:
1491 * Variables :
1492 * Result : The return value is either a scan code, a virtual-key code, or
1493 * a character value, depending on the value of uCode and uMapType.
1494 * If there is no translation, the return value is zero.
1495 * Remark :
1496 * Status : UNTESTED STUB
1497 *
1498 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1499 *****************************************************************************/
1500UINT WIN32API MapVirtualKeyExA(UINT uCode,
1501 UINT uMapType,
1502 HKL dwhkl)
1503{
1504 dprintf(("USER32:MapVirtualKeyExA (%u,%u,%08x) not implemented.\n",
1505 uCode,
1506 uMapType,
1507 dwhkl));
1508
1509 return (0);
1510}
1511/*****************************************************************************
1512 * Name : UINT WIN32API MapVirtualKeyExW
1513 * Purpose : The MapVirtualKeyEx function translates (maps) a virtual-key
1514 * code into a scan code or character value, or translates a scan
1515 * code into a virtual-key code. The function translates the codes
1516 * using the input language and physical keyboard layout identified
1517 * by the given keyboard layout handle.
1518 * Parameters:
1519 * Variables :
1520 * Result : The return value is either a scan code, a virtual-key code, or
1521 * a character value, depending on the value of uCode and uMapType.
1522 * If there is no translation, the return value is zero.
1523 * Remark :
1524 * Status : UNTESTED STUB
1525
1526 *
1527 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1528 *****************************************************************************/
1529UINT WIN32API MapVirtualKeyExW(UINT uCode,
1530 UINT uMapType,
1531 HKL dwhkl)
1532{
1533 dprintf(("USER32:MapVirtualKeyExW (%u,%u,%08x) not implemented.\n",
1534 uCode,
1535 uMapType,
1536 dwhkl));
1537
1538 return (0);
1539}
1540/*****************************************************************************
1541 * Name : DWORD WIN32API OemKeyScan
1542 * Purpose : The OemKeyScan function maps OEM ASCII codes 0 through 0x0FF
1543 * into the OEM scan codes and shift states. The function provides
1544 * information that allows a program to send OEM text to another
1545 * program by simulating keyboard input.
1546 * Parameters:
1547 * Variables :
1548 * Result :
1549 * Remark :
1550 * Status : UNTESTED STUB
1551 *
1552 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1553 *****************************************************************************/
1554DWORD WIN32API OemKeyScan(WORD wOemChar)
1555{
1556 dprintf(("USER32:OemKeyScan (%u) not implemented.\n",
1557 wOemChar));
1558
1559 return (wOemChar);
1560}
1561//******************************************************************************
1562//******************************************************************************
1563BOOL WIN32API RegisterHotKey(HWND hwnd, int idHotKey, UINT fuModifiers, UINT uVirtKey)
1564{
1565#ifdef DEBUG
1566 WriteLog("USER32: RegisterHotKey, not implemented\n");
1567#endif
1568 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
1569 return(TRUE);
1570}
1571//******************************************************************************
1572//******************************************************************************
1573BOOL WIN32API SetKeyboardState(PBYTE lpKeyState)
1574{
1575#ifdef DEBUG
1576 WriteLog("USER32: SetKeyboardState, not implemented\n");
1577#endif
1578 return(TRUE);
1579}
1580/*****************************************************************************
1581 * Name : int WIN32API ToAscii
1582 * Purpose : The ToAscii function translates the specified virtual-key code
1583 * and keyboard state to the corresponding Windows character or characters.
1584 * Parameters: UINT uVirtKey virtual-key code
1585 * UINT uScanCode scan code
1586 * PBYTE lpbKeyState address of key-state array
1587 * LPWORD lpwTransKey buffer for translated key
1588 * UINT fuState active-menu flag
1589 * Variables :
1590 * Result : 0 The specified virtual key has no translation for the current
1591 * state of the keyboard.
1592 * 1 One Windows character was copied to the buffer.
1593 * 2 Two characters were copied to the buffer. This usually happens
1594 * when a dead-key character (accent or diacritic) stored in the
1595 * keyboard layout cannot be composed with the specified virtual
1596 * key to form a single character.
1597 * Remark :
1598 * Status : UNTESTED STUB
1599 *
1600 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1601 *****************************************************************************/
1602int WIN32API ToAscii(UINT uVirtKey,
1603 UINT uScanCode,
1604 PBYTE lpbKeyState,
1605 LPWORD lpwTransKey,
1606 UINT fuState)
1607{
1608 dprintf(("USER32:ToAscii (%u,%u,%08xh,%08xh,%u) not implemented.\n",
1609 uVirtKey,
1610 uScanCode,
1611 lpbKeyState,
1612 lpwTransKey,
1613 fuState));
1614
1615 return (0);
1616}
1617/*****************************************************************************
1618 * Name : int WIN32API ToAsciiEx
1619 * Purpose : The ToAscii function translates the specified virtual-key code
1620 * and keyboard state to the corresponding Windows character or characters.
1621 * Parameters: UINT uVirtKey virtual-key code
1622 * UINT uScanCode scan code
1623 * PBYTE lpbKeyState address of key-state array
1624 * LPWORD lpwTransKey buffer for translated key
1625 * UINT fuState active-menu flag
1626 * HLK hlk keyboard layout handle
1627 * Variables :
1628 * Result : 0 The specified virtual key has no translation for the current
1629 * state of the keyboard.
1630 * 1 One Windows character was copied to the buffer.
1631 * 2 Two characters were copied to the buffer. This usually happens
1632 * when a dead-key character (accent or diacritic) stored in the
1633 * keyboard layout cannot be composed with the specified virtual
1634 * key to form a single character.
1635 * Remark :
1636 * Status : UNTESTED STUB
1637 *
1638 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1639 *****************************************************************************/
1640int WIN32API ToAsciiEx(UINT uVirtKey,
1641 UINT uScanCode,
1642 PBYTE lpbKeyState,
1643 LPWORD lpwTransKey,
1644 UINT fuState,
1645 HKL hkl)
1646{
1647 dprintf(("USER32:ToAsciiEx (%u,%u,%08xh,%08xh,%u,%08x) not implemented.\n",
1648 uVirtKey,
1649 uScanCode,
1650 lpbKeyState,
1651 lpwTransKey,
1652 fuState,
1653 hkl));
1654
1655 return (0);
1656}
1657/*****************************************************************************
1658 * Name : int WIN32API ToUnicode
1659 * Purpose : The ToUnicode function translates the specified virtual-key code
1660 * and keyboard state to the corresponding Unicode character or characters.
1661 * Parameters: UINT wVirtKey virtual-key code
1662 * UINT wScanCode scan code
1663 * PBYTE lpKeyState address of key-state array
1664 * LPWSTR pwszBuff buffer for translated key
1665 * int cchBuff size of translated key buffer
1666 * UINT wFlags set of function-conditioning flags
1667 * Variables :
1668 * Result : - 1 The specified virtual key is a dead-key character (accent or
1669 * diacritic). This value is returned regardless of the keyboard
1670 * layout, even if several characters have been typed and are
1671 * stored in the keyboard state. If possible, even with Unicode
1672 * keyboard layouts, the function has written a spacing version of
1673 * the dead-key character to the buffer specified by pwszBuffer.
1674 * For example, the function writes the character SPACING ACUTE
1675 * (0x00B4), rather than the character NON_SPACING ACUTE (0x0301).
1676 * 0 The specified virtual key has no translation for the current
1677 * state of the keyboard. Nothing was written to the buffer
1678 * specified by pwszBuffer.
1679 * 1 One character was written to the buffer specified by pwszBuffer.
1680 * 2 or more Two or more characters were written to the buffer specified by
1681 * pwszBuff. The most common cause for this is that a dead-key
1682 * character (accent or diacritic) stored in the keyboard layout
1683 * could not be combined with the specified virtual key to form a
1684 * single character.
1685 * Remark :
1686 * Status : UNTESTED STUB
1687 *
1688 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1689 *****************************************************************************/
1690int WIN32API ToUnicode(UINT uVirtKey,
1691 UINT uScanCode,
1692 PBYTE lpKeyState,
1693 LPWSTR pwszBuff,
1694 int cchBuff,
1695 UINT wFlags)
1696{
1697 dprintf(("USER32:ToUnicode (%u,%u,%08xh,%08xh,%u,%08x) not implemented.\n",
1698 uVirtKey,
1699 uScanCode,
1700 lpKeyState,
1701 pwszBuff,
1702 cchBuff,
1703 wFlags));
1704
1705 return (0);
1706}
1707/*****************************************************************************
1708 * Name : BOOL WIN32API UnloadKeyboardLayout
1709 * Purpose : The UnloadKeyboardLayout function removes a keyboard layout.
1710 * Parameters: HKL hkl handle of keyboard layout
1711 * Variables :
1712 * Result : If the function succeeds, the return value is the handle of the
1713 * keyboard layout; otherwise, it is NULL. To get extended error
1714 * information, use the GetLastError function.
1715 * Remark :
1716 * Status : UNTESTED STUB
1717 *
1718 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1719 *****************************************************************************/
1720BOOL WIN32API UnloadKeyboardLayout (HKL hkl)
1721{
1722 dprintf(("USER32:UnloadKeyboardLayout (%08x) not implemented.\n",
1723 hkl));
1724
1725 return (0);
1726}
1727//******************************************************************************
1728//******************************************************************************
1729BOOL WIN32API UnregisterHotKey(HWND hwnd, int idHotKey)
1730{
1731#ifdef DEBUG
1732 WriteLog("USER32: UnregisterHotKey, not implemented\n");
1733#endif
1734 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
1735
1736 return(TRUE);
1737}
1738//******************************************************************************
1739//SvL: 24-6-'97 - Added
1740//******************************************************************************
1741WORD WIN32API VkKeyScanA( char ch)
1742{
1743#ifdef DEBUG
1744 WriteLog("USER32: VkKeyScanA\n");
1745#endif
1746 return O32_VkKeyScan(ch);
1747}
1748//******************************************************************************
1749//******************************************************************************
1750WORD WIN32API VkKeyScanW( WCHAR wch)
1751{
1752#ifdef DEBUG
1753 WriteLog("USER32: VkKeyScanW\n");
1754#endif
1755 // NOTE: This will not work as is (needs UNICODE support)
1756 return O32_VkKeyScan((char)wch);
1757}
1758
1759/* Synchronization Functions */
1760
1761DWORD WIN32API MsgWaitForMultipleObjects( DWORD nCount, LPHANDLE pHandles, BOOL fWaitAll, DWORD dwMilliseconds, DWORD dwWakeMask)
1762{
1763#ifdef DEBUG
1764 WriteLog("USER32: MsgWaitForMultipleObjects\n");
1765#endif
1766 return O32_MsgWaitForMultipleObjects(nCount,pHandles,fWaitAll,dwMilliseconds,dwWakeMask);
1767}
1768
1769/* Button Functions */
1770
1771BOOL WIN32API CheckRadioButton( HWND hDlg, UINT nIDFirstButton, UINT nIDLastButton, UINT nIDCheckButton)
1772{
1773#ifdef DEBUG
1774 WriteLog("USER32: CheckRadioButton\n");
1775#endif
1776 //CB: check radio buttons in interval
1777 if (nIDFirstButton > nIDLastButton)
1778 {
1779 SetLastError(ERROR_INVALID_PARAMETER);
1780 return (FALSE);
1781 }
1782
1783 hDlg = Win32Window::Win32ToOS2Handle(hDlg);
1784
1785 for (UINT x = nIDFirstButton;x <= nIDLastButton;x++)
1786 {
1787 SendDlgItemMessageA(hDlg,x,BM_SETCHECK,(x == nIDCheckButton) ? BST_CHECKED : BST_UNCHECKED,0);
1788 }
1789
1790 return (TRUE);
1791}
1792
1793/* Window Functions */
1794
1795/*****************************************************************************
1796 * Name : BOOL WIN32API AnyPopup
1797 * Purpose : The AnyPopup function indicates whether an owned, visible,
1798 * top-level pop-up, or overlapped window exists on the screen. The
1799 * function searches the entire Windows screen, not just the calling
1800 * application's client area.
1801 * Parameters: VOID
1802 * Variables :
1803 * Result : If a pop-up window exists, the return value is TRUE even if the
1804 * pop-up window is completely covered by other windows. Otherwise,
1805 * it is FALSE.
1806 * Remark : AnyPopup is a Windows version 1.x function and is retained for
1807 * compatibility purposes. It is generally not useful.
1808 * Status : UNTESTED STUB
1809 *
1810 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1811 *****************************************************************************/
1812BOOL WIN32API AnyPopup(VOID)
1813{
1814 dprintf(("USER32:AnyPopup() not implemented.\n"));
1815
1816 return (FALSE);
1817}
1818//******************************************************************************
1819//******************************************************************************
1820BOOL WIN32API EndDeferWindowPos( HDWP hWinPosInfo)
1821{
1822#ifdef DEBUG
1823 WriteLog("USER32: EndDeferWindowPos\n");
1824#endif
1825 return O32_EndDeferWindowPos(hWinPosInfo);
1826}
1827//******************************************************************************
1828//******************************************************************************
1829HWND WIN32API FindWindowW( LPCWSTR lpClassName, LPCWSTR lpWindowName)
1830{
1831 char *astring1 = UnicodeToAsciiString((LPWSTR)lpClassName);
1832 char *astring2 = UnicodeToAsciiString((LPWSTR)lpWindowName);
1833 HWND rc;
1834
1835#ifdef DEBUG
1836 WriteLog("USER32: FindWindowW\n");
1837#endif
1838 rc = O32_FindWindow(astring1, astring2);
1839 FreeAsciiString(astring1);
1840 FreeAsciiString(astring2);
1841 return rc;
1842}
1843//******************************************************************************
1844//******************************************************************************
1845HWND WIN32API GetForegroundWindow(void)
1846{
1847#ifdef DEBUG
1848 WriteLog("USER32: GetForegroundWindow\n");
1849#endif
1850 return Win32Window::OS2ToWin32Handle(O32_GetForegroundWindow());
1851}
1852//******************************************************************************
1853//******************************************************************************
1854HWND WIN32API GetLastActivePopup( HWND hWnd)
1855{
1856#ifdef DEBUG
1857 WriteLog("USER32: GetLastActivePopup\n");
1858#endif
1859 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
1860
1861 return Win32Window::OS2ToWin32Handle(O32_GetLastActivePopup(hWnd));
1862}
1863//******************************************************************************
1864//******************************************************************************
1865DWORD WIN32API GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
1866{
1867#ifdef DEBUG
1868 WriteLog("USER32: GetWindowThreadProcessId\n");
1869#endif
1870 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
1871
1872 return O32_GetWindowThreadProcessId(hWnd,lpdwProcessId);
1873}
1874
1875/* Painting and Drawing Functions */
1876
1877
1878INT WIN32API ExcludeUpdateRgn( HDC hDC, HWND hWnd)
1879{
1880#ifdef DEBUG
1881 WriteLog("USER32: ExcludeUpdateRgn\n");
1882#endif
1883 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
1884
1885 return O32_ExcludeUpdateRgn(hDC,hWnd);
1886}
1887//******************************************************************************
1888//******************************************************************************
1889#if 0
1890int WIN32API GetUpdateRgn( HWND hWnd, HRGN hRgn, BOOL bErase)
1891{
1892#ifdef DEBUG
1893 WriteLog("USER32: GetUpdateRgn\n");
1894#endif
1895 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
1896
1897 return O32_GetUpdateRgn(hWnd,hRgn,bErase);
1898}
1899#endif
1900//******************************************************************************
1901//TODO: Not complete
1902//******************************************************************************
1903BOOL WIN32API GrayStringA(HDC hdc, HBRUSH hBrush, GRAYSTRINGPROC lpOutputFunc,
1904 LPARAM lpData, int nCount, int X, int Y, int nWidth,
1905 int nHeight)
1906{
1907 BOOL rc;
1908 COLORREF curclr;
1909
1910#ifdef DEBUG
1911 WriteLog("USER32: GrayStringA, not completely implemented\n");
1912#endif
1913 if(lpOutputFunc == NULL && lpData == NULL) {
1914#ifdef DEBUG
1915 WriteLog("USER32: lpOutputFunc == NULL && lpData == NULL\n");
1916#endif
1917 return(FALSE);
1918 }
1919 if(lpOutputFunc) {
1920 return(lpOutputFunc(hdc, lpData, nCount));
1921 }
1922 curclr = SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT));
1923 rc = TextOutA(hdc, X, Y, (char *)lpData, nCount);
1924 SetTextColor(hdc, curclr);
1925
1926 return(rc);
1927}
1928//******************************************************************************
1929//******************************************************************************
1930BOOL WIN32API GrayStringW(HDC hdc, HBRUSH hBrush, GRAYSTRINGPROC lpOutputFunc,
1931 LPARAM lpData, int nCount, int X, int Y, int nWidth,
1932 int nHeight)
1933{
1934 BOOL rc;
1935 char *astring;
1936 COLORREF curclr;
1937
1938#ifdef DEBUG
1939 WriteLog("USER32: GrayStringW, not completely implemented\n");
1940#endif
1941
1942 if(lpOutputFunc == NULL && lpData == NULL) {
1943#ifdef DEBUG
1944 WriteLog("USER32: lpOutputFunc == NULL && lpData == NULL\n");
1945#endif
1946 return(FALSE);
1947 }
1948 if(nCount == 0)
1949 nCount = UniStrlen((UniChar*)lpData);
1950
1951 if(lpOutputFunc) {
1952 return(lpOutputFunc(hdc, lpData, nCount));
1953 }
1954 astring = UnicodeToAsciiString((LPWSTR)lpData);
1955
1956 curclr = SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT));
1957 rc = TextOutA(hdc, X, Y, astring, nCount);
1958 SetTextColor(hdc, curclr);
1959
1960 FreeAsciiString(astring);
1961 return(rc);
1962}
1963//******************************************************************************
1964//******************************************************************************
1965#if 0
1966BOOL WIN32API InvalidateRgn( HWND hWnd, HRGN hRgn, BOOL bErase)
1967{
1968#ifdef DEBUG
1969 WriteLog("USER32: InvalidateRgn\n");
1970#endif
1971 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
1972
1973 return O32_InvalidateRgn(hWnd,hRgn,bErase);
1974}
1975#endif
1976/*****************************************************************************
1977 * Name : BOOL WIN32API PaintDesktop
1978 * Purpose : The PaintDesktop function fills the clipping region in the
1979 * specified device context with the desktop pattern or wallpaper.
1980 * The function is provided primarily for shell desktops.
1981 * Parameters:
1982 * Variables :
1983 * Result : If the function succeeds, the return value is TRUE.
1984 * If the function fails, the return value is FALSE.
1985 * Remark :
1986 * Status : UNTESTED STUB
1987 *
1988 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1989 *****************************************************************************/
1990BOOL WIN32API PaintDesktop(HDC hdc)
1991{
1992 dprintf(("USER32:PaintDesktop (%08x) not implemented.\n",
1993 hdc));
1994
1995 return (FALSE);
1996}
1997//******************************************************************************
1998//******************************************************************************
1999BOOL WIN32API ValidateRect( HWND hwnd, const RECT * lprc)
2000{
2001#ifdef DEBUG
2002 WriteLog("USER32: ValidateRect\n");
2003#endif
2004 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
2005
2006 return O32_ValidateRect(hwnd,lprc);
2007}
2008//******************************************************************************
2009//******************************************************************************
2010BOOL WIN32API ValidateRgn( HWND hwnd, HRGN hrgn)
2011{
2012#ifdef DEBUG
2013 WriteLog("USER32: ValidateRgn\n");
2014#endif
2015 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
2016
2017 return O32_ValidateRgn(hwnd,hrgn);
2018}
2019
2020/* Filled Shape Functions */
2021
2022
2023int WIN32API FillRect(HDC hDC, const RECT * lprc, HBRUSH hbr)
2024{
2025#ifdef DEBUG
2026 WriteLog("USER32: FillRect (%d,%d)(%d,%d) brush %X\n", lprc->left, lprc->top, lprc->right, lprc->bottom, hbr);
2027#endif
2028 return O32_FillRect(hDC,lprc,hbr);
2029}
2030//******************************************************************************
2031//******************************************************************************
2032int WIN32API FrameRect( HDC hDC, const RECT * lprc, HBRUSH hbr)
2033{
2034#ifdef DEBUG
2035 WriteLog("USER32: FrameRect\n");
2036#endif
2037 return O32_FrameRect(hDC,lprc,hbr);
2038}
2039//******************************************************************************
2040//******************************************************************************
2041BOOL WIN32API InvertRect( HDC hDC, const RECT * lprc)
2042{
2043#ifdef DEBUG
2044 WriteLog("USER32: InvertRect\n");
2045#endif
2046 return O32_InvertRect(hDC,lprc);
2047}
2048
2049/* System Information Functions */
2050
2051int WIN32API GetKeyboardType( int nTypeFlag)
2052{
2053#ifdef DEBUG
2054 WriteLog("USER32: GetKeyboardType\n");
2055#endif
2056 return O32_GetKeyboardType(nTypeFlag);
2057}
2058/*****************************************************************************
2059 * Name : HDESK WIN32API GetThreadDesktop
2060 * Purpose : The GetThreadDesktop function returns a handle to the desktop
2061 * associated with a specified thread.
2062 * Parameters: DWORD dwThreadId thread identifier
2063 * Variables :
2064 * Result : If the function succeeds, the return value is the handle of the
2065 * desktop associated with the specified thread.
2066 * Remark :
2067 * Status : UNTESTED STUB
2068 *
2069 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2070 *****************************************************************************/
2071HDESK WIN32API GetThreadDesktop(DWORD dwThreadId)
2072{
2073 dprintf(("USER32:GetThreadDesktop (%u) not implemented.\n",
2074 dwThreadId));
2075
2076 return (NULL);
2077}
2078
2079/* Message and Message Queue Functions */
2080
2081/*****************************************************************************
2082 * Name : BOOL WIN32API GetInputState
2083 * Purpose : The GetInputState function determines whether there are
2084 * mouse-button or keyboard messages in the calling thread's message queue.
2085 * Parameters:
2086 * Variables :
2087 * Result : If the queue contains one or more new mouse-button or keyboard
2088 * messages, the return value is TRUE.
2089 * If the function fails, the return value is FALSE.
2090 * Remark :
2091 * Status : UNTESTED STUB
2092 *
2093 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2094 *****************************************************************************/
2095BOOL WIN32API GetInputState(VOID)
2096{
2097 dprintf(("USER32:GetInputState () not implemented.\n"));
2098
2099 return (FALSE);
2100}
2101//******************************************************************************
2102//******************************************************************************
2103DWORD WIN32API GetQueueStatus( UINT flags)
2104{
2105#ifdef DEBUG
2106 WriteLog("USER32: GetQueueStatus\n");
2107#endif
2108 return O32_GetQueueStatus(flags);
2109}
2110
2111/* Font and Text Functions */
2112
2113DWORD WIN32API GetTabbedTextExtentA( HDC hDC, LPCSTR lpString, int nCount, int nTabPositions, LPINT lpnTabStopPositions)
2114{
2115#ifdef DEBUG
2116 WriteLog("USER32: GetTabbedTextExtentA\n");
2117#endif
2118 return O32_GetTabbedTextExtent(hDC,lpString,nCount,nTabPositions,lpnTabStopPositions);
2119}
2120//******************************************************************************
2121//******************************************************************************
2122DWORD WIN32API GetTabbedTextExtentW( HDC hDC, LPCWSTR lpString, int nCount, int nTabPositions, LPINT lpnTabStopPositions)
2123{
2124 char *astring = UnicodeToAsciiString((LPWSTR)lpString);
2125 DWORD rc;
2126
2127#ifdef DEBUG
2128 WriteLog("USER32: GetTabbedTextExtentW\n");
2129#endif
2130 rc = O32_GetTabbedTextExtent(hDC,astring,nCount,nTabPositions,lpnTabStopPositions);
2131 FreeAsciiString(astring);
2132 return rc;
2133}
2134//******************************************************************************
2135//******************************************************************************
2136LONG WIN32API TabbedTextOutA( HDC hdc, int x, int y, LPCSTR lpString, int nCount, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin)
2137{
2138#ifdef DEBUG
2139 WriteLog("USER32: TabbedTextOutA\n");
2140#endif
2141 return O32_TabbedTextOut(hdc,x,y,lpString,nCount,nTabPositions,lpnTabStopPositions,nTabOrigin);
2142}
2143//******************************************************************************
2144//******************************************************************************
2145LONG WIN32API TabbedTextOutW( HDC hdc, int x, int y, LPCWSTR lpString, int nCount, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin)
2146{
2147 char *astring = UnicodeToAsciiString((LPWSTR)lpString);
2148 LONG rc;
2149
2150#ifdef DEBUG
2151 WriteLog("USER32: TabbedTextOutW\n");
2152#endif
2153 rc = O32_TabbedTextOut(hdc,x,y,astring,nCount,nTabPositions,lpnTabStopPositions,nTabOrigin);
2154 FreeAsciiString(astring);
2155 return rc;
2156}
2157
2158/* Dialog Box Functions */
2159
2160BOOL WIN32API MapDialogRect( HWND hDlg, PRECT lpRect)
2161{
2162#ifdef DEBUG
2163 WriteLog("USER32: MapDialogRect\n");
2164#endif
2165 hDlg = Win32Window::Win32ToOS2Handle(hDlg);
2166
2167 return O32_MapDialogRect(hDlg,lpRect);
2168}
2169
2170/* Coordinate Space and Transformation Functions */
2171
2172int WIN32API MapWindowPoints( HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints)
2173{
2174#ifdef DEBUG
2175 WriteLog("USER32: MapWindowPoints\n");
2176#endif
2177 hWndFrom = Win32Window::Win32ToOS2Handle(hWndFrom);
2178 hWndTo = Win32Window::Win32ToOS2Handle(hWndTo);
2179
2180 return O32_MapWindowPoints(hWndFrom,hWndTo,lpPoints,cPoints);
2181}
2182//******************************************************************************
2183//******************************************************************************
2184BOOL WIN32API ScreenToClient (HWND hwnd, LPPOINT pt)
2185{
2186#ifdef DEBUG
2187 WriteLog("USER32: ScreenToClient\n");
2188#endif
2189 Win32BaseWindow *wnd;
2190 PRECT rcl;
2191
2192 if (!hwnd) return (TRUE);
2193 wnd = Win32BaseWindow::GetWindowFromHandle (hwnd);
2194 if (!wnd) return (TRUE);
2195
2196 rcl = wnd->getClientRect();
2197 pt->y = ScreenHeight - pt->y;
2198 OSLibWinMapWindowPoints (OSLIB_HWND_DESKTOP, wnd->getOS2WindowHandle(), (OSLIBPOINT *)pt, 1);
2199 pt->y = (rcl->bottom - rcl->top) - pt->y;
2200 return (TRUE);
2201}
2202
2203/* Scroll Bar Functions */
2204
2205#if 0
2206BOOL WIN32API ScrollDC( HDC arg1, int arg2, int arg3, const RECT * arg4, const RECT * arg5, HRGN arg6, PRECT arg7)
2207{
2208#ifdef DEBUG
2209 WriteLog("USER32: ScrollDC\n");
2210#endif
2211 return O32_ScrollDC(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
2212}
2213#endif
2214
2215/* Resource Functions */
2216
2217//CB: stopped here void aa(){};
2218//******************************************************************************
2219//TODO:
2220//******************************************************************************
2221HANDLE WIN32API CopyImage(HANDLE hImage, UINT uType, int cxDesired, int cyDesired, UINT fuFlags)
2222{
2223#ifdef DEBUG
2224 WriteLog("USER32: CopyImage, not implemented\n");
2225#endif
2226 switch(uType) {
2227 case IMAGE_BITMAP:
2228 case IMAGE_CURSOR:
2229 case IMAGE_ICON:
2230 default:
2231#ifdef DEBUG
2232 WriteLog("USER32: CopyImage, unknown type\n");
2233#endif
2234 return(NULL);
2235 }
2236 return(NULL);
2237}
2238//******************************************************************************
2239//******************************************************************************
2240int WIN32API GetKeyboardLayoutList(int nBuff, HKL *lpList)
2241{
2242#ifdef DEBUG
2243 WriteLog("USER32: GetKeyboardLayoutList, not implemented\n");
2244#endif
2245 return(0);
2246}
2247//******************************************************************************
2248//******************************************************************************
2249HKL WIN32API GetKeyboardLayout(DWORD dwLayout)
2250{
2251#ifdef DEBUG
2252 WriteLog("USER32: GetKeyboardLayout, not implemented\n");
2253#endif
2254 return(0);
2255}
2256//******************************************************************************
2257//******************************************************************************
2258int WIN32API LookupIconIdFromDirectory(PBYTE presbits, BOOL fIcon)
2259{
2260#ifdef DEBUG
2261 WriteLog("USER32: LookupIconIdFromDirectory, not implemented\n");
2262#endif
2263 return(0);
2264}
2265//******************************************************************************
2266//******************************************************************************
2267int WIN32API LookupIconIdFromDirectoryEx(PBYTE presbits, BOOL fIcon,
2268 int cxDesired, int cyDesired,
2269 UINT Flags)
2270{
2271#ifdef DEBUG
2272 WriteLog("USER32: LookupIconIdFromDirectoryEx, not implemented\n");
2273#endif
2274 return(0);
2275}
2276//******************************************************************************
2277//******************************************************************************
2278BOOL WIN32API SetWindowContextHelpId(HWND hwnd, DWORD dwContextHelpId)
2279{
2280#ifdef DEBUG
2281 WriteLog("USER32: SetWindowContextHelpId, not implemented\n");
2282#endif
2283 return(TRUE);
2284}
2285//******************************************************************************
2286//******************************************************************************
2287DWORD WIN32API GetWindowContextHelpId(HWND hwnd)
2288{
2289#ifdef DEBUG
2290 WriteLog("USER32: GetWindowContextHelpId, not implemented\n");
2291#endif
2292 return(0);
2293}
2294//******************************************************************************
2295//******************************************************************************
2296BOOL WIN32API GetMonitorInfoA(HMONITOR,LPMONITORINFO)
2297{
2298#ifdef DEBUG
2299 WriteLog("USER32: GetMonitorInfoA not supported!!\n");
2300#endif
2301 return(FALSE);
2302}
2303//******************************************************************************
2304//******************************************************************************
2305BOOL WIN32API GetMonitorInfoW(HMONITOR,LPMONITORINFO)
2306{
2307#ifdef DEBUG
2308 WriteLog("USER32: GetMonitorInfoW not supported!!\n");
2309#endif
2310 return(FALSE);
2311}
2312//******************************************************************************
2313//******************************************************************************
2314HMONITOR WIN32API MonitorFromWindow(HWND hwnd, DWORD dwFlags)
2315{
2316#ifdef DEBUG
2317 WriteLog("USER32: MonitorFromWindow not correctly supported??\n");
2318#endif
2319 return(0);
2320}
2321//******************************************************************************
2322//******************************************************************************
2323HMONITOR WIN32API MonitorFromRect(LPRECT rect, DWORD dwFlags)
2324{
2325#ifdef DEBUG
2326 WriteLog("USER32: MonitorFromRect not correctly supported??\n");
2327#endif
2328 return(0);
2329}
2330//******************************************************************************
2331//******************************************************************************
2332HMONITOR WIN32API MonitorFromPoint(POINT point, DWORD dwflags)
2333{
2334#ifdef DEBUG
2335 WriteLog("USER32: MonitorFromPoint not correctly supported??\n");
2336#endif
2337 return(0);
2338}
2339//******************************************************************************
2340//******************************************************************************
2341BOOL WIN32API EnumDisplayMonitors(HDC,LPRECT,MONITORENUMPROC,LPARAM)
2342{
2343#ifdef DEBUG
2344 WriteLog("USER32: EnumDisplayMonitors not supported??\n");
2345#endif
2346 return(FALSE);
2347}
2348//******************************************************************************
2349//******************************************************************************
2350BOOL WIN32API EnumDisplaySettingsA(LPCSTR lpszDeviceName, DWORD iModeNum,
2351 LPDEVMODEA lpDevMode)
2352{
2353#ifdef DEBUG
2354 WriteLog("USER32: EnumDisplaySettingsA FAKED\n");
2355#endif
2356 switch(iModeNum) {
2357 case 0:
2358 lpDevMode->dmBitsPerPel = 16;
2359 lpDevMode->dmPelsWidth = 768;
2360 lpDevMode->dmPelsHeight = 1024;
2361 lpDevMode->dmDisplayFlags = 0;
2362 lpDevMode->dmDisplayFrequency = 70;
2363 break;
2364 case 1:
2365 lpDevMode->dmBitsPerPel = 16;
2366 lpDevMode->dmPelsWidth = 640;
2367 lpDevMode->dmPelsHeight = 480;
2368 lpDevMode->dmDisplayFlags = 0;
2369 lpDevMode->dmDisplayFrequency = 70;
2370 break;
2371 default:
2372 return(FALSE);
2373 }
2374 return(TRUE);
2375}
2376//******************************************************************************
2377//******************************************************************************
2378LONG WIN32API ChangeDisplaySettingsA(LPDEVMODEA lpDevMode, DWORD dwFlags)
2379{
2380#ifdef DEBUG
2381 if(lpDevMode) {
2382 WriteLog("USER32: ChangeDisplaySettingsA FAKED %X\n", dwFlags);
2383 WriteLog("USER32: ChangeDisplaySettingsA lpDevMode->dmBitsPerPel %d\n", lpDevMode->dmBitsPerPel);
2384 WriteLog("USER32: ChangeDisplaySettingsA lpDevMode->dmPelsWidth %d\n", lpDevMode->dmPelsWidth);
2385 WriteLog("USER32: ChangeDisplaySettingsA lpDevMode->dmPelsHeight %d\n", lpDevMode->dmPelsHeight);
2386 }
2387#endif
2388 return(DISP_CHANGE_SUCCESSFUL);
2389}
2390//******************************************************************************
2391//******************************************************************************
2392
2393
2394/*****************************************************************************
2395 * Name : LONG WIN32API ChangeDisplaySettingsW
2396 * Purpose : The ChangeDisplaySettings function changes the display settings
2397 * to the specified graphics mode.
2398 * Parameters: LPDEVMODEW lpDevModeW
2399 * DWORD dwFlags
2400 * Variables :
2401 * Result : DISP_CHANGE_SUCCESSFUL The settings change was successful.
2402 * DISP_CHANGE_RESTART The computer must be restarted in order for the graphics mode to work.
2403 * DISP_CHANGE_BADFLAGS An invalid set of flags was passed in.
2404 * DISP_CHANGE_FAILED The display driver failed the specified graphics mode.
2405 * DISP_CHANGE_BADMODE The graphics mode is not supported.
2406 * DISP_CHANGE_NOTUPDATED Unable to write settings to the registry.
2407 * Remark :
2408 * Status : UNTESTED STUB
2409 *
2410 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2411 *****************************************************************************/
2412
2413LONG WIN32API ChangeDisplaySettingsW(LPDEVMODEW lpDevMode,
2414 DWORD dwFlags)
2415{
2416 dprintf(("USER32:ChangeDisplaySettingsW(%08xh,%08x) not implemented.\n",
2417 lpDevMode,
2418 dwFlags));
2419
2420 return (ChangeDisplaySettingsA((LPDEVMODEA)lpDevMode,
2421 dwFlags));
2422}
2423
2424/*****************************************************************************
2425 * Name : BOOL WIN32API CloseDesktop
2426 * Purpose : The CloseDesktop function closes an open handle of a desktop
2427 * object. A desktop is a secure object contained within a window
2428 * station object. A desktop has a logical display surface and
2429 * contains windows, menus and hooks.
2430 * Parameters: HDESK hDesktop
2431 * Variables :
2432 * Result : If the function succeeds, the return value is TRUE.
2433 * If the functions fails, the return value is FALSE. To get
2434 * extended error information, call GetLastError.
2435 * Remark :
2436 * Status : UNTESTED STUB
2437 *
2438 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2439 *****************************************************************************/
2440
2441BOOL WIN32API CloseDesktop(HDESK hDesktop)
2442{
2443 dprintf(("USER32:CloseDesktop(%08x) not implemented.\n",
2444 hDesktop));
2445
2446 return (FALSE);
2447}
2448
2449
2450/*****************************************************************************
2451 * Name : BOOL WIN32API CloseWindowStation
2452 * Purpose : The CloseWindowStation function closes an open window station handle.
2453 * Parameters: HWINSTA hWinSta
2454 * Variables :
2455 * Result :
2456 * Remark : If the function succeeds, the return value is TRUE.
2457 * If the functions fails, the return value is FALSE. To get
2458 * extended error information, call GetLastError.
2459 * Status : UNTESTED STUB
2460 *
2461 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2462 *****************************************************************************/
2463
2464BOOL WIN32API CloseWindowStation(HWINSTA hWinSta)
2465{
2466 dprintf(("USER32:CloseWindowStation(%08x) not implemented.\n",
2467 hWinSta));
2468
2469 return (FALSE);
2470}
2471
2472
2473/*****************************************************************************
2474 * Name : HDESK WIN32API CreateDesktopA
2475 * Purpose : The CreateDesktop function creates a new desktop on the window
2476 * station associated with the calling process.
2477 * Parameters: LPCTSTR lpszDesktop name of the new desktop
2478 * LPCTSTR lpszDevice name of display device to assign to the desktop
2479 * LPDEVMODE pDevMode reserved; must be NULL
2480 * DWORD dwFlags flags to control interaction with other applications
2481 * DWORD dwDesiredAccess specifies access of returned handle
2482 * LPSECURITY_ATTRIBUTES lpsa specifies security attributes of the desktop
2483 * Variables :
2484 * Result : If the function succeeds, the return value is a handle of the
2485 * newly created desktop.
2486 * If the function fails, the return value is NULL. To get extended
2487 * error information, call GetLastError.
2488 * Remark :
2489 * Status : UNTESTED STUB
2490 *
2491 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2492 *****************************************************************************/
2493
2494HDESK WIN32API CreateDesktopA(LPCTSTR lpszDesktop,
2495 LPCTSTR lpszDevice,
2496 LPDEVMODEA pDevMode,
2497 DWORD dwFlags,
2498 DWORD dwDesiredAccess,
2499 LPSECURITY_ATTRIBUTES lpsa)
2500{
2501 dprintf(("USER32:CreateDesktopA(%s,%s,%08xh,%08xh,%08xh,%08x) not implemented.\n",
2502 lpszDesktop,
2503 lpszDevice,
2504 pDevMode,
2505 dwFlags,
2506 dwDesiredAccess,
2507 lpsa));
2508
2509 return (NULL);
2510}
2511
2512
2513/*****************************************************************************
2514 * Name : HDESK WIN32API CreateDesktopW
2515 * Purpose : The CreateDesktop function creates a new desktop on the window
2516 * station associated with the calling process.
2517 * Parameters: LPCTSTR lpszDesktop name of the new desktop
2518 * LPCTSTR lpszDevice name of display device to assign to the desktop
2519 * LPDEVMODE pDevMode reserved; must be NULL
2520 * DWORD dwFlags flags to control interaction with other applications
2521 * DWORD dwDesiredAccess specifies access of returned handle
2522 * LPSECURITY_ATTRIBUTES lpsa specifies security attributes of the desktop
2523 * Variables :
2524 * Result : If the function succeeds, the return value is a handle of the
2525 * newly created desktop.
2526 * If the function fails, the return value is NULL. To get extended
2527 * error information, call GetLastError.
2528 * Remark :
2529 * Status : UNTESTED STUB
2530 *
2531 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2532 *****************************************************************************/
2533
2534HDESK WIN32API CreateDesktopW(LPCTSTR lpszDesktop,
2535 LPCTSTR lpszDevice,
2536 LPDEVMODEW pDevMode,
2537 DWORD dwFlags,
2538 DWORD dwDesiredAccess,
2539 LPSECURITY_ATTRIBUTES lpsa)
2540{
2541 dprintf(("USER32:CreateDesktopW(%s,%s,%08xh,%08xh,%08xh,%08x) not implemented.\n",
2542 lpszDesktop,
2543 lpszDevice,
2544 pDevMode,
2545 dwFlags,
2546 dwDesiredAccess,
2547 lpsa));
2548
2549 return (NULL);
2550}
2551
2552
2553/*****************************************************************************
2554 * Name : HWINSTA WIN32API CreateWindowStationA
2555 * Purpose : The CreateWindowStation function creates a window station object.
2556 * It returns a handle that can be used to access the window station.
2557 * A window station is a secure object that contains a set of global
2558 * atoms, a clipboard, and a set of desktop objects.
2559 * Parameters: LPTSTR lpwinsta name of the new window station
2560 * DWORD dwReserved reserved; must be NULL
2561 * DWORD dwDesiredAccess specifies access of returned handle
2562 * LPSECURITY_ATTRIBUTES lpsa specifies security attributes of the window station
2563 * Variables :
2564 * Result : If the function succeeds, the return value is the handle to the
2565 * newly created window station.
2566 * If the function fails, the return value is NULL. To get extended
2567 * error information, call GetLastError.
2568 * Remark :
2569 * Status : UNTESTED STUB
2570 *
2571 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2572 *****************************************************************************/
2573
2574HWINSTA WIN32API CreateWindowStationA(LPTSTR lpWinSta,
2575 DWORD dwReserved,
2576 DWORD dwDesiredAccess,
2577 LPSECURITY_ATTRIBUTES lpsa)
2578{
2579 dprintf(("USER32:CreateWindowStationA(%s,%08xh,%08xh,%08x) not implemented.\n",
2580 lpWinSta,
2581 dwReserved,
2582 dwDesiredAccess,
2583 lpsa));
2584
2585 return (NULL);
2586}
2587
2588
2589/*****************************************************************************
2590 * Name : HWINSTA WIN32API CreateWindowStationW
2591 * Purpose : The CreateWindowStation function creates a window station object.
2592 * It returns a handle that can be used to access the window station.
2593 * A window station is a secure object that contains a set of global
2594 * atoms, a clipboard, and a set of desktop objects.
2595 * Parameters: LPTSTR lpwinsta name of the new window station
2596 * DWORD dwReserved reserved; must be NULL
2597 * DWORD dwDesiredAccess specifies access of returned handle
2598 * LPSECURITY_ATTRIBUTES lpsa specifies security attributes of the window station
2599 * Variables :
2600 * Result : If the function succeeds, the return value is the handle to the
2601 * newly created window station.
2602 * If the function fails, the return value is NULL. To get extended
2603 * error information, call GetLastError.
2604 * Remark :
2605 * Status : UNTESTED STUB
2606 *
2607 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2608 *****************************************************************************/
2609
2610HWINSTA WIN32API CreateWindowStationW(LPWSTR lpWinSta,
2611 DWORD dwReserved,
2612 DWORD dwDesiredAccess,
2613 LPSECURITY_ATTRIBUTES lpsa)
2614{
2615 dprintf(("USER32:CreateWindowStationW(%s,%08xh,%08xh,%08x) not implemented.\n",
2616 lpWinSta,
2617 dwReserved,
2618 dwDesiredAccess,
2619 lpsa));
2620
2621 return (NULL);
2622}
2623
2624/*****************************************************************************
2625 * Name : BOOL WIN32API EnumDesktopWindows
2626 * Purpose : The EnumDesktopWindows function enumerates all windows in a
2627 * desktop by passing the handle of each window, in turn, to an
2628 * application-defined callback function.
2629 * Parameters: HDESK hDesktop handle of desktop to enumerate
2630 * WNDENUMPROC lpfn points to application's callback function
2631 * LPARAM lParam 32-bit value to pass to the callback function
2632 * Variables :
2633 * Result : If the function succeeds, the return value is TRUE.
2634 * If the function fails, the return value is FALSE. To get
2635 * extended error information, call GetLastError.
2636 * Remark :
2637 * Status : UNTESTED STUB
2638 *
2639 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2640 *****************************************************************************/
2641
2642BOOL WIN32API EnumDesktopWindows(HDESK hDesktop,
2643 WNDENUMPROC lpfn,
2644 LPARAM lParam)
2645{
2646 dprintf(("USER32:EnumDesktopWindows (%08xh,%08xh,%08x) not implemented.\n",
2647 hDesktop,
2648 lpfn,
2649 lParam));
2650
2651 return (FALSE);
2652}
2653
2654
2655/*****************************************************************************
2656 * Name : BOOL WIN32API EnumDesktopsA
2657 * Purpose : The EnumDesktops function enumerates all desktops in the window
2658 * station assigned to the calling process. The function does so by
2659 * passing the name of each desktop, in turn, to an application-
2660 * defined callback function.
2661 * Parameters: HWINSTA hwinsta handle of window station to enumerate
2662 * DESKTOPENUMPROC lpEnumFunc points to application's callback function
2663 * LPARAM lParam 32-bit value to pass to the callback function
2664 * Variables :
2665 * Result : If the function succeeds, the return value is TRUE.
2666 * If the function fails, the return value is FALSE. To get extended
2667 * error information, call GetLastError.
2668 * Remark :
2669 * Status : UNTESTED STUB
2670 *
2671 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2672 *****************************************************************************/
2673
2674BOOL WIN32API EnumDesktopsA(HWINSTA hWinSta,
2675 DESKTOPENUMPROCA lpEnumFunc,
2676 LPARAM lParam)
2677{
2678 dprintf(("USER32:EnumDesktopsA (%08xh,%08xh,%08x) not implemented.\n",
2679 hWinSta,
2680 lpEnumFunc,
2681 lParam));
2682
2683 return (FALSE);
2684}
2685
2686
2687/*****************************************************************************
2688 * Name : BOOL WIN32API EnumDesktopsW
2689 * Purpose : The EnumDesktops function enumerates all desktops in the window
2690 * station assigned to the calling process. The function does so by
2691 * passing the name of each desktop, in turn, to an application-
2692 * defined callback function.
2693 * Parameters: HWINSTA hwinsta handle of window station to enumerate
2694 * DESKTOPENUMPROC lpEnumFunc points to application's callback function
2695 * LPARAM lParam 32-bit value to pass to the callback function
2696 * Variables :
2697 * Result : If the function succeeds, the return value is TRUE.
2698 * If the function fails, the return value is FALSE. To get extended
2699 * error information, call GetLastError.
2700 * Remark :
2701 * Status : UNTESTED STUB
2702 *
2703 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2704 *****************************************************************************/
2705
2706BOOL WIN32API EnumDesktopsW(HWINSTA hWinSta,
2707 DESKTOPENUMPROCW lpEnumFunc,
2708 LPARAM lParam)
2709{
2710 dprintf(("USER32:EnumDesktopsW (%08xh,%08xh,%08x) not implemented.\n",
2711 hWinSta,
2712 lpEnumFunc,
2713 lParam));
2714
2715 return (FALSE);
2716}
2717
2718
2719
2720/*****************************************************************************
2721 * Name : BOOL WIN32API EnumDisplaySettingsW
2722 * Purpose : The EnumDisplaySettings function obtains information about one
2723 * of a display device's graphics modes. You can obtain information
2724 * for all of a display device's graphics modes by making a series
2725 * of calls to this function.
2726 * Parameters: LPCTSTR lpszDeviceName specifies the display device
2727 * DWORD iModeNum specifies the graphics mode
2728 * LPDEVMODE lpDevMode points to structure to receive settings
2729 * Variables :
2730 * Result : If the function succeeds, the return value is TRUE.
2731 * If the function fails, the return value is FALSE.
2732 * Remark :
2733 * Status : UNTESTED STUB
2734 *
2735 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2736 *****************************************************************************/
2737
2738BOOL WIN32API EnumDisplaySettingsW(LPCSTR lpszDeviceName,
2739 DWORD iModeNum,
2740 LPDEVMODEW lpDevMode)
2741{
2742 dprintf(("USER32:EnumDisplaySettingsW (%s,%08xh,%08x) not implemented.\n",
2743 lpszDeviceName,
2744 iModeNum,
2745 lpDevMode));
2746
2747 return (EnumDisplaySettingsA(lpszDeviceName,
2748 iModeNum,
2749 (LPDEVMODEA)lpDevMode));
2750}
2751
2752
2753/*****************************************************************************
2754 * Name : BOOL WIN32API EnumWindowStationsA
2755 * Purpose : The EnumWindowStations function enumerates all windowstations
2756 * in the system by passing the name of each window station, in
2757 * turn, to an application-defined callback function.
2758 * Parameters:
2759 * Variables : WINSTAENUMPROC lpEnumFunc points to application's callback function
2760 * LPARAM lParam 32-bit value to pass to the callback function
2761 * Result : If the function succeeds, the return value is TRUE.
2762 * If the function fails the return value is FALSE. To get extended
2763 * error information, call GetLastError.
2764 * Remark :
2765 * Status : UNTESTED STUB
2766 *
2767 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2768 *****************************************************************************/
2769
2770BOOL WIN32API EnumWindowStationsA(WINSTAENUMPROCA lpEnumFunc,
2771 LPARAM lParam)
2772{
2773 dprintf(("USER32:EnumWindowStationsA (%08xh,%08x) not implemented.\n",
2774 lpEnumFunc,
2775 lParam));
2776
2777 return (FALSE);
2778}
2779
2780
2781/*****************************************************************************
2782 * Name : BOOL WIN32API EnumWindowStationsW
2783 * Purpose : The EnumWindowStations function enumerates all windowstations
2784 * in the system by passing the name of each window station, in
2785 * turn, to an application-defined callback function.
2786 * Parameters:
2787 * Variables : WINSTAENUMPROC lpEnumFunc points to application's callback function
2788 * LPARAM lParam 32-bit value to pass to the callback function
2789 * Result : If the function succeeds, the return value is TRUE.
2790 * If the function fails the return value is FALSE. To get extended
2791 * error information, call GetLastError.
2792 * Remark :
2793 * Status : UNTESTED STUB
2794 *
2795 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2796 *****************************************************************************/
2797
2798BOOL WIN32API EnumWindowStationsW(WINSTAENUMPROCW lpEnumFunc,
2799 LPARAM lParam)
2800{
2801 dprintf(("USER32:EnumWindowStationsW (%08xh,%08x) not implemented.\n",
2802 lpEnumFunc,
2803 lParam));
2804
2805 return (FALSE);
2806}
2807
2808
2809
2810/*****************************************************************************
2811 * Name : UINT WIN32API GetKBCodePage
2812 * Purpose : The GetKBCodePage function is provided for compatibility with
2813 * earlier versions of Windows. In the Win32 application programming
2814 * interface (API) it just calls the GetOEMCP function.
2815 * Parameters:
2816 * Variables :
2817 * Result : If the function succeeds, the return value is an OEM code-page
2818 * identifier, or it is the default identifier if the registry
2819 * value is not readable. For a list of OEM code-page identifiers,
2820 * see GetOEMCP.
2821 * Remark :
2822 * Status : UNTESTED
2823 *
2824 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2825 *****************************************************************************/
2826
2827UINT WIN32API GetKBCodePage(VOID)
2828{
2829 return (GetOEMCP());
2830}
2831
2832
2833/*****************************************************************************
2834 * Name : HWINSTA WIN32API GetProcessWindowStation
2835 * Purpose : The GetProcessWindowStation function returns a handle of the
2836 * window station associated with the calling process.
2837 * Parameters:
2838 * Variables :
2839 * Result : If the function succeeds, the return value is a handle of the
2840 * window station associated with the calling process.
2841 * If the function fails, the return value is NULL. This can occur
2842 * if the calling process is not an application written for Windows
2843 * NT. To get extended error information, call GetLastError.
2844 * Remark :
2845 * Status : UNTESTED STUB
2846 *
2847 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2848 *****************************************************************************/
2849
2850HWINSTA WIN32API GetProcessWindowStation(VOID)
2851{
2852 dprintf(("USER32:GetProcessWindowStation () not implemented.\n"));
2853
2854 return (NULL);
2855}
2856
2857
2858
2859/*****************************************************************************
2860 * Name : BOOL WIN32API GetUserObjectInformationA
2861 * Purpose : The GetUserObjectInformation function returns information about
2862 * a window station or desktop object.
2863 * Parameters: HANDLE hObj handle of object to get information for
2864 * int nIndex type of information to get
2865 * PVOID pvInfo points to buffer that receives the information
2866 * DWORD nLength size, in bytes, of pvInfo buffer
2867 * LPDWORD lpnLengthNeeded receives required size, in bytes, of pvInfo buffer
2868 * Variables :
2869 * Result : If the function succeeds, the return value is TRUE.
2870 * If the function fails, the return value is FALSE. To get extended
2871 * error information, call GetLastError.
2872 * Remark :
2873 * Status : UNTESTED STUB
2874 *
2875 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2876 *****************************************************************************/
2877
2878BOOL WIN32API GetUserObjectInformationA(HANDLE hObj,
2879 int nIndex,
2880 PVOID pvInfo,
2881 DWORD nLength,
2882 LPDWORD lpnLengthNeeded)
2883{
2884 dprintf(("USER32:GetUserObjectInformationA (%08xh,%08xh,%08xh,%u,%08x) not implemented.\n",
2885 hObj,
2886 nIndex,
2887 pvInfo,
2888 nLength,
2889 lpnLengthNeeded));
2890
2891 return (FALSE);
2892}
2893
2894
2895/*****************************************************************************
2896 * Name : BOOL WIN32API GetUserObjectInformationW
2897 * Purpose : The GetUserObjectInformation function returns information about
2898 * a window station or desktop object.
2899 * Parameters: HANDLE hObj handle of object to get information for
2900 * int nIndex type of information to get
2901 * PVOID pvInfo points to buffer that receives the information
2902 * DWORD nLength size, in bytes, of pvInfo buffer
2903 * LPDWORD lpnLengthNeeded receives required size, in bytes, of pvInfo buffer
2904 * Variables :
2905 * Result : If the function succeeds, the return value is TRUE.
2906 * If the function fails, the return value is FALSE. To get extended
2907 * error information, call GetLastError.
2908 * Remark :
2909 * Status : UNTESTED STUB
2910 *
2911 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2912 *****************************************************************************/
2913
2914BOOL WIN32API GetUserObjectInformationW(HANDLE hObj,
2915 int nIndex,
2916 PVOID pvInfo,
2917 DWORD nLength,
2918 LPDWORD lpnLengthNeeded)
2919{
2920 dprintf(("USER32:GetUserObjectInformationW (%08xh,%08xh,%08xh,%u,%08x) not implemented.\n",
2921 hObj,
2922 nIndex,
2923 pvInfo,
2924 nLength,
2925 lpnLengthNeeded));
2926
2927 return (FALSE);
2928}
2929
2930
2931/*****************************************************************************
2932 * Name : BOOL WIN32API GetUserObjectSecurity
2933 * Purpose : The GetUserObjectSecurity function retrieves security information
2934 * for the specified user object.
2935 * Parameters: HANDLE hObj handle of user object
2936 * SECURITY_INFORMATION * pSIRequested address of requested security information
2937 * LPSECURITY_DESCRIPTOR pSID address of security descriptor
2938 * DWORD nLength size of buffer for security descriptor
2939 * LPDWORD lpnLengthNeeded address of required size of buffer
2940 * Variables :
2941 * Result : If the function succeeds, the return value is TRUE.
2942 * If the function fails, the return value is FALSE. To get extended
2943 * error information, call GetLastError.
2944 * Remark :
2945 * Status : UNTESTED STUB
2946 *
2947 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2948 *****************************************************************************/
2949
2950BOOL WIN32API GetUserObjectSecurity(HANDLE hObj,
2951 SECURITY_INFORMATION * pSIRequested,
2952 LPSECURITY_DESCRIPTOR pSID,
2953 DWORD nLength,
2954 LPDWORD lpnLengthNeeded)
2955{
2956 dprintf(("USER32:GetUserObjectSecurity (%08xh,%08xh,%08xh,%u,%08x) not implemented.\n",
2957 hObj,
2958 pSIRequested,
2959 pSID,
2960 nLength,
2961 lpnLengthNeeded));
2962
2963 return (FALSE);
2964}
2965
2966
2967
2968/*****************************************************************************
2969 * Name : int WIN32API GetWindowRgn
2970 * Purpose : The GetWindowRgn function obtains a copy of the window region of a window.
2971 * Parameters: HWND hWnd handle to window whose window region is to be obtained
2972 * HRGN hRgn handle to region that receives a copy of the window region
2973 * Variables :
2974 * Result : NULLREGION, SIMPLEREGION, COMPLEXREGION, ERROR
2975 * Remark :
2976 * Status : UNTESTED STUB
2977 *
2978 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2979 *****************************************************************************/
2980
2981int WIN32API GetWindowRgn (HWND hWnd,
2982 HRGN hRgn)
2983{
2984 dprintf(("USER32:GetWindowRgn (%08xh,%08x) not implemented.\n",
2985 hWnd,
2986 hRgn));
2987
2988 return (NULLREGION);
2989}
2990
2991
2992
2993/*****************************************************************************
2994 * Name : HDESK WIN32API OpenDesktopA
2995 * Purpose : The OpenDesktop function returns a handle to an existing desktop.
2996 * A desktop is a secure object contained within a window station
2997 * object. A desktop has a logical display surface and contains
2998 * windows, menus and hooks.
2999 * Parameters: LPCTSTR lpszDesktopName name of the desktop to open
3000 * DWORD dwFlags flags to control interaction with other applications
3001 * BOOL fInherit specifies whether returned handle is inheritable
3002 * DWORD dwDesiredAccess specifies access of returned handle
3003 * Variables :
3004 * Result : If the function succeeds, the return value is the handle to the
3005 * opened desktop.
3006 * If the function fails, the return value is NULL. To get extended
3007 * error information, call GetLastError.
3008 * Remark :
3009 * Status : UNTESTED STUB
3010 *
3011 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3012 *****************************************************************************/
3013
3014HDESK WIN32API OpenDesktopA(LPCTSTR lpszDesktopName,
3015 DWORD dwFlags,
3016 BOOL fInherit,
3017 DWORD dwDesiredAccess)
3018{
3019 dprintf(("USER32:OpenDesktopA (%s,%08xh,%08xh,%08x) not implemented.\n",
3020 lpszDesktopName,
3021 dwFlags,
3022 fInherit,
3023 dwDesiredAccess));
3024
3025 return (NULL);
3026}
3027
3028
3029/*****************************************************************************
3030 * Name : HDESK WIN32API OpenDesktopW
3031 * Purpose : The OpenDesktop function returns a handle to an existing desktop.
3032 * A desktop is a secure object contained within a window station
3033 * object. A desktop has a logical display surface and contains
3034 * windows, menus and hooks.
3035 * Parameters: LPCTSTR lpszDesktopName name of the desktop to open
3036 * DWORD dwFlags flags to control interaction with other applications
3037 * BOOL fInherit specifies whether returned handle is inheritable
3038 * DWORD dwDesiredAccess specifies access of returned handle
3039 * Variables :
3040 * Result : If the function succeeds, the return value is the handle to the
3041 * opened desktop.
3042 * If the function fails, the return value is NULL. To get extended
3043 * error information, call GetLastError.
3044 * Remark :
3045 * Status : UNTESTED STUB
3046 *
3047 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3048 *****************************************************************************/
3049
3050HDESK WIN32API OpenDesktopW(LPCTSTR lpszDesktopName,
3051 DWORD dwFlags,
3052 BOOL fInherit,
3053 DWORD dwDesiredAccess)
3054{
3055 dprintf(("USER32:OpenDesktopW (%s,%08xh,%08xh,%08x) not implemented.\n",
3056 lpszDesktopName,
3057 dwFlags,
3058 fInherit,
3059 dwDesiredAccess));
3060
3061 return (NULL);
3062}
3063
3064
3065/*****************************************************************************
3066 * Name : HDESK WIN32API OpenInputDesktop
3067 * Purpose : The OpenInputDesktop function returns a handle to the desktop
3068 * that receives user input. The input desktop is a desktop on the
3069 * window station associated with the logged-on user.
3070 * Parameters: DWORD dwFlags flags to control interaction with other applications
3071 * BOOL fInherit specifies whether returned handle is inheritable
3072 * DWORD dwDesiredAccess specifies access of returned handle
3073 * Variables :
3074 * Result : If the function succeeds, the return value is a handle of the
3075 * desktop that receives user input.
3076 * If the function fails, the return value is NULL. To get extended
3077 * error information, call GetLastError.
3078 * Remark :
3079 * Status : UNTESTED STUB
3080 *
3081 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3082 *****************************************************************************/
3083
3084HDESK WIN32API OpenInputDesktop(DWORD dwFlags,
3085 BOOL fInherit,
3086 DWORD dwDesiredAccess)
3087{
3088 dprintf(("USER32:OpenInputDesktop (%08xh,%08xh,%08x) not implemented.\n",
3089 dwFlags,
3090 fInherit,
3091 dwDesiredAccess));
3092
3093 return (NULL);
3094}
3095
3096
3097/*****************************************************************************
3098 * Name : HWINSTA WIN32API OpenWindowStationA
3099 * Purpose : The OpenWindowStation function returns a handle to an existing
3100 * window station.
3101 * Parameters: LPCTSTR lpszWinStaName name of the window station to open
3102 * BOOL fInherit specifies whether returned handle is inheritable
3103 * DWORD dwDesiredAccess specifies access of returned handle
3104 * Variables :
3105 * Result : If the function succeeds, the return value is the handle to the
3106 * specified window station.
3107 * If the function fails, the return value is NULL. To get extended
3108 * error information, call GetLastError.
3109 * Remark :
3110 * Status : UNTESTED STUB
3111 *
3112 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3113 *****************************************************************************/
3114
3115HWINSTA WIN32API OpenWindowStationA(LPCTSTR lpszWinStaName,
3116 BOOL fInherit,
3117 DWORD dwDesiredAccess)
3118{
3119 dprintf(("USER32:OpenWindowStatieonA (%s,%08xh,%08x) not implemented.\n",
3120 lpszWinStaName,
3121 fInherit,
3122 dwDesiredAccess));
3123
3124 return (NULL);
3125}
3126
3127
3128/*****************************************************************************
3129 * Name : HWINSTA WIN32API OpenWindowStationW
3130 * Purpose : The OpenWindowStation function returns a handle to an existing
3131 * window station.
3132 * Parameters: LPCTSTR lpszWinStaName name of the window station to open
3133 * BOOL fInherit specifies whether returned handle is inheritable
3134 * DWORD dwDesiredAccess specifies access of returned handle
3135 * Variables :
3136 * Result : If the function succeeds, the return value is the handle to the
3137 * specified window station.
3138 * If the function fails, the return value is NULL. To get extended
3139 * error information, call GetLastError.
3140
3141
3142 * Remark :
3143 * Status : UNTESTED STUB
3144 *
3145 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3146 *****************************************************************************/
3147
3148HWINSTA WIN32API OpenWindowStationW(LPCTSTR lpszWinStaName,
3149 BOOL fInherit,
3150 DWORD dwDesiredAccess)
3151{
3152 dprintf(("USER32:OpenWindowStatieonW (%s,%08xh,%08x) not implemented.\n",
3153 lpszWinStaName,
3154 fInherit,
3155 dwDesiredAccess));
3156
3157 return (NULL);
3158}
3159
3160
3161/*****************************************************************************
3162 * Name : VOID WIN32API SetDebugErrorLevel
3163 * Purpose : The SetDebugErrorLevel function sets the minimum error level at
3164 * which Windows will generate debugging events and pass them to a debugger.
3165 * Parameters: DWORD dwLevel debugging error level
3166 * Variables :
3167 * Result :
3168 * Remark :
3169 * Status : UNTESTED STUB
3170 *
3171 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3172 *****************************************************************************/
3173
3174VOID WIN32API SetDebugErrorLevel(DWORD dwLevel)
3175{
3176 dprintf(("USER32:SetDebugErrorLevel (%08x) not implemented.\n",
3177 dwLevel));
3178}
3179
3180
3181/*****************************************************************************
3182 * Name : BOOL WIN32API SetProcessWindowStation
3183 * Purpose : The SetProcessWindowStation function assigns a window station
3184 * to the calling process. This enables the process to access
3185 * objects in the window station such as desktops, the clipboard,
3186 * and global atoms. All subsequent operations on the window station
3187 * use the access rights granted to hWinSta.
3188 * Parameters:
3189 * Variables :
3190 * Result : If the function succeeds, the return value is TRUE.
3191 * If the function fails, the return value is FALSE. To get extended
3192 * error information, call GetLastError.
3193 * Remark :
3194 * Status : UNTESTED STUB
3195 *
3196 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3197 *****************************************************************************/
3198
3199BOOL WIN32API SetProcessWindowStation(HWINSTA hWinSta)
3200{
3201 dprintf(("USER32:SetProcessWindowStation (%08x) not implemented.\n",
3202 hWinSta));
3203
3204 return (FALSE);
3205}
3206
3207
3208/*****************************************************************************
3209 * Name : BOOL WIN32API SetThreadDesktop
3210 * Purpose : The SetThreadDesktop function assigns a desktop to the calling
3211 * thread. All subsequent operations on the desktop use the access
3212 * rights granted to hDesk.
3213 * Parameters: HDESK hDesk handle of the desktop to assign to this thread
3214 * Variables :
3215 * Result : If the function succeeds, the return value is TRUE.
3216 * If the function fails, the return value is FALSE. To get extended
3217 * error information, call GetLastError.
3218 * Remark :
3219 * Status : UNTESTED STUB
3220 *
3221 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3222 *****************************************************************************/
3223
3224BOOL WIN32API SetThreadDesktop(HDESK hDesktop)
3225{
3226 dprintf(("USER32:SetThreadDesktop (%08x) not implemented.\n",
3227 hDesktop));
3228
3229 return (FALSE);
3230}
3231
3232
3233/*****************************************************************************
3234 * Name : BOOL WIN32API SetUserObjectInformationA
3235 * Purpose : The SetUserObjectInformation function sets information about a
3236 * window station or desktop object.
3237 * Parameters: HANDLE hObject handle of the object for which to set information
3238 * int nIndex type of information to set
3239 * PVOID lpvInfo points to a buffer that contains the information
3240 * DWORD cbInfo size, in bytes, of lpvInfo buffer
3241 * Variables :
3242 * Result : If the function succeeds, the return value is TRUE.
3243 * If the function fails the return value is FALSE. To get extended
3244 * error information, call GetLastError.
3245 * Remark :
3246 * Status : UNTESTED STUB
3247 *
3248 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3249 *****************************************************************************/
3250
3251BOOL WIN32API SetUserObjectInformationA(HANDLE hObject,
3252 int nIndex,
3253 PVOID lpvInfo,
3254 DWORD cbInfo)
3255{
3256 dprintf(("USER32:SetUserObjectInformationA (%08xh,%u,%08xh,%08x) not implemented.\n",
3257 hObject,
3258 nIndex,
3259 lpvInfo,
3260 cbInfo));
3261
3262 return (FALSE);
3263}
3264
3265
3266/*****************************************************************************
3267 * Name : BOOL WIN32API SetUserObjectInformationW
3268 * Purpose : The SetUserObjectInformation function sets information about a
3269 * window station or desktop object.
3270 * Parameters: HANDLE hObject handle of the object for which to set information
3271 * int nIndex type of information to set
3272 * PVOID lpvInfo points to a buffer that contains the information
3273 * DWORD cbInfo size, in bytes, of lpvInfo buffer
3274 * Variables :
3275 * Result : If the function succeeds, the return value is TRUE.
3276 * If the function fails the return value is FALSE. To get extended
3277 * error information, call GetLastError.
3278 * Remark :
3279 * Status : UNTESTED STUB
3280 *
3281 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3282 *****************************************************************************/
3283
3284BOOL WIN32API SetUserObjectInformationW(HANDLE hObject,
3285 int nIndex,
3286 PVOID lpvInfo,
3287 DWORD cbInfo)
3288{
3289 dprintf(("USER32:SetUserObjectInformationW (%08xh,%u,%08xh,%08x) not implemented.\n",
3290 hObject,
3291 nIndex,
3292 lpvInfo,
3293 cbInfo));
3294
3295 return (FALSE);
3296}
3297
3298
3299/*****************************************************************************
3300 * Name : BOOL WIN32API SetUserObjectSecurity
3301 * Purpose : The SetUserObjectSecurity function sets the security of a user
3302 * object. This can be, for example, a window or a DDE conversation
3303 * Parameters: HANDLE hObject handle of user object
3304 * SECURITY_INFORMATION * psi address of security information
3305 * LPSECURITY_DESCRIPTOR psd address of security descriptor
3306 * Variables :
3307 * Result : If the function succeeds, the return value is TRUE.
3308 * If the function fails, the return value is FALSE. To get extended
3309 * error information, call GetLastError.
3310 * Remark :
3311 * Status : UNTESTED STUB
3312 *
3313 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3314 *****************************************************************************/
3315
3316BOOL WIN32API SetUserObjectSecurity(HANDLE hObject,
3317 SECURITY_INFORMATION * psi,
3318 LPSECURITY_DESCRIPTOR psd)
3319{
3320 dprintf(("USER32:SetUserObjectSecuroty (%08xh,%08xh,%08x) not implemented.\n",
3321 hObject,
3322 psi,
3323 psd));
3324
3325 return (FALSE);
3326}
3327
3328
3329/*****************************************************************************
3330 * Name : int WIN32API SetWindowRgn
3331 * Purpose : The SetWindowRgn function sets the window region of a window. The
3332 * window region determines the area within the window where the
3333 * operating system permits drawing. The operating system does not
3334 * display any portion of a window that lies outside of the window region
3335 * Parameters: HWND hWnd handle to window whose window region is to be set
3336 * HRGN hRgn handle to region
3337 * BOOL bRedraw window redraw flag
3338 * Variables :
3339 * Result : If the function succeeds, the return value is non-zero.
3340 * If the function fails, the return value is zero.
3341 * Remark :
3342 * Status : UNTESTED STUB
3343 *
3344 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3345 *****************************************************************************/
3346
3347int WIN32API SetWindowRgn(HWND hWnd,
3348 HRGN hRgn,
3349 BOOL bRedraw)
3350{
3351 dprintf(("USER32:SetWindowRgn (%08xh,%08xh,%u) not implemented.\n",
3352 hWnd,
3353 hRgn,
3354 bRedraw));
3355
3356 return (0);
3357}
3358
3359
3360/*****************************************************************************
3361 * Name : BOOL WIN32API SetWindowsHookW
3362 * Purpose : The SetWindowsHook function is not implemented in the Win32 API.
3363 * Win32-based applications should use the SetWindowsHookEx function.
3364 * Parameters:
3365 * Variables :
3366 * Result :
3367 * Remark : ARGH ! MICROSOFT !
3368 * Status : UNTESTED STUB
3369 *
3370 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3371 *****************************************************************************/
3372
3373HHOOK WIN32API SetWindowsHookW(int nFilterType, HOOKPROC pfnFilterProc)
3374
3375{
3376 return (FALSE);
3377}
3378
3379
3380/*****************************************************************************
3381 * Name : BOOL WIN32API ShowWindowAsync
3382 * Purpose : The ShowWindowAsync function sets the show state of a window
3383 * created by a different thread.
3384 * Parameters: HWND hwnd handle of window
3385 * int nCmdShow show state of window
3386 * Variables :
3387 * Result : If the window was previously visible, the return value is TRUE.
3388 * If the window was previously hidden, the return value is FALSE.
3389 * Remark :
3390 * Status : UNTESTED STUB
3391 *
3392 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3393 *****************************************************************************/
3394
3395BOOL WIN32API ShowWindowAsync (HWND hWnd,
3396 int nCmdShow)
3397{
3398 dprintf(("USER32:ShowWindowAsync (%08xh,%08x) not implemented.\n",
3399 hWnd,
3400 nCmdShow));
3401
3402 return (FALSE);
3403}
3404
3405
3406/*****************************************************************************
3407 * Name : BOOL WIN32API SwitchDesktop
3408 * Purpose : The SwitchDesktop function makes a desktop visible and activates
3409 * it. This enables the desktop to receive input from the user. The
3410 * calling process must have DESKTOP_SWITCHDESKTOP access to the
3411 * desktop for the SwitchDesktop function to succeed.
3412 * Parameters:
3413 * Variables :
3414 * Result : If the function succeeds, the return value is TRUE.
3415 * If the function fails, the return value is FALSE. To get extended
3416 * error information, call GetLastError.
3417 * Remark :
3418 * Status : UNTESTED STUB
3419 *
3420 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3421 *****************************************************************************/
3422
3423BOOL WIN32API SwitchDesktop(HDESK hDesktop)
3424{
3425 dprintf(("USER32:SwitchDesktop (%08x) not implemented.\n",
3426 hDesktop));
3427
3428 return (FALSE);
3429}
3430
3431
3432/*****************************************************************************
3433 * Name : WORD WIN32API TileWindows
3434 * Purpose : The TileWindows function tiles the specified windows, or the child
3435 * windows of the specified parent window.
3436 * Parameters: HWND hwndParent handle of parent window
3437 * WORD wFlags types of windows not to arrange
3438 * LPCRECT lpRect rectangle to arrange windows in
3439 * WORD cChildrenb number of windows to arrange
3440 * const HWND *ahwndChildren array of window handles
3441 * Variables :
3442 * Result : If the function succeeds, the return value is the number of
3443 * windows arranged.
3444 * If the function fails, the return value is zero.
3445 * Remark :
3446 * Status : UNTESTED STUB
3447 *
3448 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3449 *****************************************************************************/
3450
3451WORD WIN32API TileWindows(HWND hwndParent,
3452 UINT wFlags,
3453 const LPRECT lpRect,
3454 UINT cChildrenb,
3455 const HWND *ahwndChildren)
3456{
3457 dprintf(("USER32:TileWindows (%08xh,%08xh,%08xh,%08xh,%08x) not implemented.\n",
3458 hwndParent,
3459 wFlags,
3460 lpRect,
3461 cChildrenb,
3462 ahwndChildren));
3463
3464 return (0);
3465}
3466
3467
3468/*****************************************************************************
3469 * Name : SHORT WIN32API VkKeyScanExW
3470 * Purpose : The VkKeyScanEx function translates a character to the
3471 * corresponding virtual-key code and shift state. The function
3472 * translates the character using the input language and physical
3473 * keyboard layout identified by the given keyboard layout handle.
3474 * Parameters: UINT uChar character to translate
3475 * HKL hkl keyboard layout handle
3476 * Variables :
3477 * Result : see docs
3478 * Remark :
3479 * Status : UNTESTED STUB
3480 *
3481 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3482 *****************************************************************************/
3483
3484WORD WIN32API VkKeyScanExW(WCHAR uChar,
3485 HKL hkl)
3486{
3487 dprintf(("USER32:VkKeyScanExW (%u,%08x) not implemented.\n",
3488 uChar,
3489 hkl));
3490
3491 return (uChar);
3492}
3493
3494
3495/*****************************************************************************
3496 * Name : SHORT WIN32API VkKeyScanExA
3497 * Purpose : The VkKeyScanEx function translates a character to the
3498 * corresponding virtual-key code and shift state. The function
3499 * translates the character using the input language and physical
3500 * keyboard layout identified by the given keyboard layout handle.
3501 * Parameters: UINT uChar character to translate
3502 * HKL hkl keyboard layout handle
3503 * Variables :
3504 * Result : see docs
3505 * Remark :
3506 * Status : UNTESTED STUB
3507 *
3508 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3509 *****************************************************************************/
3510
3511WORD WIN32API VkKeyScanExA(CHAR uChar,
3512 HKL hkl)
3513{
3514 dprintf(("USER32:VkKeyScanExA (%u,%08x) not implemented.\n",
3515 uChar,
3516 hkl));
3517
3518 return (uChar);
3519}
3520
3521
3522/*****************************************************************************
3523 * Name : BOOL WIN32API SetShellWindow
3524 * Purpose : Unknown
3525 * Parameters: Unknown
3526 * Variables :
3527 * Result :
3528 * Remark :
3529 * Status : UNTESTED UNKNOWN STUB
3530 *
3531 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3532 *****************************************************************************/
3533
3534BOOL WIN32API SetShellWindow(DWORD x1)
3535{
3536 dprintf(("USER32: SetShellWindow(%08x) not implemented.\n",
3537 x1));
3538
3539 return (FALSE); /* default */
3540}
3541
3542
3543/*****************************************************************************
3544 * Name : BOOL WIN32API PlaySoundEvent
3545 * Purpose : Unknown
3546 * Parameters: Unknown
3547 * Variables :
3548 * Result :
3549 * Remark :
3550 * Status : UNTESTED UNKNOWN STUB
3551 *
3552 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3553 *****************************************************************************/
3554
3555BOOL WIN32API PlaySoundEvent(DWORD x1)
3556{
3557 dprintf(("USER32: PlaySoundEvent(%08x) not implemented.\n",
3558 x1));
3559
3560 return (FALSE); /* default */
3561}
3562
3563
3564/*****************************************************************************
3565 * Name : BOOL WIN32API TileChildWindows
3566 * Purpose : Unknown
3567 * Parameters: Unknown
3568 * Variables :
3569 * Result :
3570 * Remark :
3571 * Status : UNTESTED UNKNOWN STUB
3572 *
3573 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3574 *****************************************************************************/
3575
3576BOOL WIN32API TileChildWindows(DWORD x1,
3577 DWORD x2)
3578{
3579 dprintf(("USER32: TileChildWindows(%08xh,%08xh) not implemented.\n",
3580 x1,
3581 x2));
3582
3583 return (FALSE); /* default */
3584}
3585
3586
3587/*****************************************************************************
3588 * Name : BOOL WIN32API SetSysColorsTemp
3589 * Purpose : Unknown
3590 * Parameters: Unknown
3591 * Variables :
3592 * Result :
3593 * Remark :
3594 * Status : UNTESTED UNKNOWN STUB
3595 *
3596 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3597 *****************************************************************************/
3598
3599BOOL WIN32API SetSysColorsTemp(void)
3600{
3601 dprintf(("USER32: SetSysColorsTemp() not implemented.\n"));
3602
3603 return (FALSE); /* default */
3604}
3605
3606
3607/*****************************************************************************
3608 * Name : BOOL WIN32API RegisterNetworkCapabilities
3609 * Purpose : Unknown
3610 * Parameters: Unknown
3611 * Variables :
3612 * Result :
3613 * Remark :
3614 * Status : UNTESTED UNKNOWN STUB
3615 *
3616 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3617 *****************************************************************************/
3618
3619BOOL WIN32API RegisterNetworkCapabilities(DWORD x1,
3620 DWORD x2)
3621{
3622 dprintf(("USER32: RegisterNetworkCapabilities(%08xh,%08xh) not implemented.\n",
3623 x1,
3624 x2));
3625
3626 return (FALSE); /* default */
3627}
3628
3629
3630/*****************************************************************************
3631 * Name : BOOL WIN32API EndTask
3632 * Purpose : Unknown
3633 * Parameters: Unknown
3634 * Variables :
3635 * Result :
3636 * Remark :
3637 * Status : UNTESTED UNKNOWN STUB
3638 *
3639 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3640 *****************************************************************************/
3641
3642BOOL WIN32API EndTask(DWORD x1,
3643 DWORD x2,
3644 DWORD x3)
3645{
3646 dprintf(("USER32: EndTask(%08xh,%08xh,%08xh) not implemented.\n",
3647 x1,
3648 x2,
3649 x3));
3650
3651 return (FALSE); /* default */
3652}
3653
3654
3655
3656/*****************************************************************************
3657 * Name : BOOL WIN32API GetNextQueueWindow
3658 * Purpose : Unknown
3659 * Parameters: Unknown
3660 * Variables :
3661 * Result :
3662 * Remark :
3663 * Status : UNTESTED UNKNOWN STUB
3664 *
3665 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3666 *****************************************************************************/
3667
3668BOOL WIN32API GetNextQueueWindow(DWORD x1,
3669 DWORD x2)
3670{
3671 dprintf(("USER32: GetNextQueueWindow(%08xh,%08xh) not implemented.\n",
3672 x1,
3673 x2));
3674
3675 return (FALSE); /* default */
3676}
3677
3678
3679/*****************************************************************************
3680 * Name : BOOL WIN32API YieldTask
3681 * Purpose : Unknown
3682 * Parameters: Unknown
3683 * Variables :
3684 * Result :
3685 * Remark :
3686 * Status : UNTESTED UNKNOWN STUB
3687 *
3688 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3689 *****************************************************************************/
3690
3691BOOL WIN32API YieldTask(void)
3692{
3693 dprintf(("USER32: YieldTask() not implemented.\n"));
3694
3695 return (FALSE); /* default */
3696}
3697
3698
3699/*****************************************************************************
3700 * Name : BOOL WIN32API WinOldAppHackoMatic
3701 * Purpose : Unknown
3702 * Parameters: Unknown
3703 * Variables :
3704 * Result :
3705 * Remark :
3706 * Status : UNTESTED UNKNOWN STUB
3707 *
3708 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3709 *****************************************************************************/
3710
3711BOOL WIN32API WinOldAppHackoMatic(DWORD x1)
3712{
3713 dprintf(("USER32: WinOldAppHackoMatic(%08x) not implemented.\n",
3714 x1));
3715
3716 return (FALSE); /* default */
3717}
3718
3719
3720/*****************************************************************************
3721 * Name : BOOL WIN32API DragObject
3722 * Purpose : Unknown
3723 * Parameters: Unknown
3724 * Variables :
3725 * Result :
3726 * Remark :
3727 * Status : UNTESTED UNKNOWN STUB
3728 *
3729 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3730 *****************************************************************************/
3731
3732DWORD WIN32API DragObject(HWND x1,HWND x2,UINT x3,DWORD x4,HCURSOR x5)
3733{
3734 dprintf(("USER32: DragObject(%08x,%08xh,%08xh,%08xh,%08xh) not implemented.\n",
3735 x1,
3736 x2,
3737 x3,
3738 x4,
3739 x5));
3740
3741 return (FALSE); /* default */
3742}
3743
3744
3745/*****************************************************************************
3746 * Name : BOOL WIN32API CascadeChildWindows
3747 * Purpose : Unknown
3748 * Parameters: Unknown
3749 * Variables :
3750 * Result :
3751 * Remark :
3752 * Status : UNTESTED UNKNOWN STUB
3753 *
3754 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3755 *****************************************************************************/
3756
3757BOOL WIN32API CascadeChildWindows(DWORD x1,
3758 DWORD x2)
3759{
3760 dprintf(("USER32: CascadeChildWindows(%08xh,%08xh) not implemented.\n",
3761 x1,
3762 x2));
3763
3764 return (FALSE); /* default */
3765}
3766
3767
3768/*****************************************************************************
3769 * Name : BOOL WIN32API RegisterSystemThread
3770 * Purpose : Unknown
3771 * Parameters: Unknown
3772 * Variables :
3773 * Result :
3774 * Remark :
3775 * Status : UNTESTED UNKNOWN STUB
3776 *
3777 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3778 *****************************************************************************/
3779
3780BOOL WIN32API RegisterSystemThread(DWORD x1,
3781 DWORD x2)
3782{
3783 dprintf(("USER32: RegisterSystemThread(%08xh,%08xh) not implemented.\n",
3784 x1,
3785 x2));
3786
3787 return (FALSE); /* default */
3788}
3789
3790
3791/*****************************************************************************
3792 * Name : BOOL WIN32API IsHungThread
3793 * Purpose : Unknown
3794 * Parameters: Unknown
3795 * Variables :
3796 * Result :
3797 * Remark :
3798 * Status : UNTESTED UNKNOWN STUB
3799 *
3800 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3801 *****************************************************************************/
3802
3803BOOL WIN32API IsHungThread(DWORD x1)
3804{
3805 dprintf(("USER32: IsHungThread(%08xh) not implemented.\n",
3806 x1));
3807
3808 return (FALSE); /* default */
3809}
3810
3811
3812
3813/*****************************************************************************
3814 * Name : BOOL WIN32API UserSignalProc
3815 * Purpose : Unknown
3816 * Parameters: Unknown
3817 * Variables :
3818 * Result :
3819 * Remark :
3820 * Status : UNTESTED UNKNOWN STUB
3821 *
3822 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3823 *****************************************************************************/
3824
3825BOOL WIN32API UserSignalProc(DWORD x1,
3826 DWORD x2,
3827 DWORD x3,
3828 DWORD x4)
3829{
3830 dprintf(("USER32: SysErrorBox(%08xh,%08xh,%08xh,%08xh) not implemented.\n",
3831 x1,
3832 x2,
3833 x3,
3834 x4));
3835
3836 return (FALSE); /* default */
3837}
3838
3839
3840/*****************************************************************************
3841 * Name : BOOL WIN32API GetShellWindow
3842 * Purpose : Unknown
3843 * Parameters: Unknown
3844 * Variables :
3845 * Result :
3846 * Remark :
3847 * Status : UNTESTED UNKNOWN STUB
3848 *
3849 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3850 *****************************************************************************/
3851
3852HWND WIN32API GetShellWindow(void)
3853{
3854 dprintf(("USER32: GetShellWindow() not implemented.\n"));
3855
3856 return (0); /* default */
3857}
3858
3859
3860
3861/***********************************************************************
3862 * RegisterTasklist32 [USER32.436]
3863 */
3864DWORD WIN32API RegisterTasklist (DWORD x)
3865{
3866 dprintf(("USER32: RegisterTasklist(%08xh) not implemented.\n",
3867 x));
3868
3869 return TRUE;
3870}
3871
3872
Note: See TracBrowser for help on using the repository browser.