source: trunk/src/user32/new/user32.cpp@ 385

Last change on this file since 385 was 385, checked in by sandervl, 26 years ago

* empty log message *

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