From 3e972976a4c3fa7237c8b7e903fb9e88a0e24a5f Mon Sep 17 00:00:00 2001 From: James Tabor Date: Thu, 16 Aug 2007 00:12:10 +0000 Subject: [PATCH] Implemented a handfull of easy Eng APIs. svn path=/trunk/; revision=28367 --- reactos/dll/win32/gdi32/misc/stubs.c | 90 +++++++++++++++++++--------- 1 file changed, 63 insertions(+), 27 deletions(-) diff --git a/reactos/dll/win32/gdi32/misc/stubs.c b/reactos/dll/win32/gdi32/misc/stubs.c index 6c807a16cb3..8dc8f45710e 100644 --- a/reactos/dll/win32/gdi32/misc/stubs.c +++ b/reactos/dll/win32/gdi32/misc/stubs.c @@ -2545,8 +2545,7 @@ VOID STDCALL EngAcquireSemaphore ( IN HSEMAPHORE hsem ) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + RtlEnterCriticalSection((PRTL_CRITICAL_SECTION)hsem); } @@ -2678,9 +2677,10 @@ HSEMAPHORE STDCALL EngCreateSemaphore ( VOID ) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + PRTL_CRITICAL_SECTION CritSect = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(RTL_CRITICAL_SECTION)); + if (!CritSect) return NULL; + RtlInitializeCriticalSection( CritSect ); + return (HSEMAPHORE)CritSect; } /* @@ -2721,8 +2721,10 @@ VOID STDCALL EngDeleteSemaphore ( IN HSEMAPHORE hsem ) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + if (!hsem) return; + + RtlDeleteCriticalSection( (PRTL_CRITICAL_SECTION) hsem ); + RtlFreeHeap( GetProcessHeap(), 0, hsem ); } /* @@ -2877,19 +2879,33 @@ EngMultiByteToUnicodeN(OUT LPWSTR UnicodeString, IN PCHAR MultiByteString, IN ULONG BytesInMultiByteString) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + RtlMultiByteToUnicodeN( + UnicodeString, + MaxBytesInUnicodeString, + BytesInUnicodeString, + MultiByteString, + BytesInMultiByteString + ); } /* * @unimplemented */ INT STDCALL -EngMultiByteToWideChar(UINT CodePage,LPWSTR WideCharString,INT BytesInWideCharString,LPSTR MultiByteString,INT BytesInMultiByteString) +EngMultiByteToWideChar(UINT CodePage, + LPWSTR WideCharString, + INT BytesInWideCharString, + LPSTR MultiByteString, + INT BytesInMultiByteString) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + return MultiByteToWideChar( + CodePage, + 0, + MultiByteString, + BytesInMultiByteString, + WideCharString, + (BytesInWideCharString/sizeof(WCHAR)) /* Bytes to (in WCHARs) */ + ); } /* @@ -2919,14 +2935,12 @@ EngPlgBlt(SURFOBJ *psoTrg,SURFOBJ *psoSrc,SURFOBJ *psoMsk,CLIPOBJ *pco,XLATEOBJ } /* - * @unimplemented + * @implemented */ BOOL STDCALL EngQueryEMFInfo(HDEV hdev,EMFINFO *pEMFInfo) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + return FALSE; } /* @@ -2935,8 +2949,16 @@ EngQueryEMFInfo(HDEV hdev,EMFINFO *pEMFInfo) VOID STDCALL EngQueryLocalTime(PENG_TIME_FIELDS etf) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + SYSTEMTIME SystemTime; + GetLocalTime( &SystemTime ); + etf->usYear = SystemTime.wYear; + etf->usMonth = SystemTime.wMonth; + etf->usWeekday = SystemTime.wDayOfWeek; + etf->usDay = SystemTime.wDay; + etf->usHour = SystemTime.wHour; + etf->usMinute = SystemTime.wMinute; + etf->usSecond = SystemTime.wSecond; + etf->usMilliseconds = SystemTime.wMilliseconds; } /* @@ -2946,8 +2968,7 @@ VOID STDCALL EngReleaseSemaphore ( IN HSEMAPHORE hsem ) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + RtlLeaveCriticalSection( (PRTL_CRITICAL_SECTION) hsem); } @@ -3024,8 +3045,13 @@ EngUnicodeToMultiByteN(OUT PCHAR MultiByteString, IN PWSTR UnicodeString, IN ULONG BytesInUnicodeString) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + RtlUnicodeToMultiByteN( + MultiByteString, + MaxBytesInMultiByteString, + BytesInMultiByteString, + UnicodeString, + BytesInUnicodeString + ); } /* @@ -3042,11 +3068,21 @@ EngUnlockSurface(SURFOBJ *pso) * @unimplemented */ INT STDCALL -EngWideCharToMultiByte(UINT CodePage,LPWSTR WideCharString,INT BytesInWideCharString,LPSTR MultiByteString,INT BytesInMultiByteString) +EngWideCharToMultiByte( UINT CodePage, + LPWSTR WideCharString, + INT BytesInWideCharString, + LPSTR MultiByteString, + INT BytesInMultiByteString) { - UNIMPLEMENTED; - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return 0; + return WideCharToMultiByte( + CodePage, + 0, + WideCharString, + (BytesInWideCharString/sizeof(WCHAR)), /* Bytes to (in WCHARs) */ + MultiByteString, + BytesInMultiByteString, + NULL, + NULL); } /*