1 /* $Id: stubsa.c,v 1.20 2003/07/29 16:44:48 royce Exp $
3 * reactos/lib/gdi32/misc/stubs.c
5 * GDI32.DLL Stubs for ANSI functions
7 * When you implement one of these functions,
8 * remove its stub from this file.
15 #undef WIN32_LEAN_AND_MEAN
17 #include <ddk/ntddk.h>
18 #include <win32k/text.h>
19 #include <win32k/metafile.h>
20 #include <win32k/dc.h>
21 #include <rosrtl/devmode.h>
22 #include <rosrtl/logfont.h>
26 HEAP_strdupA2W ( HANDLE hHeap
, LPWSTR
* ppszW
, LPCSTR lpszA
)
31 return STATUS_SUCCESS
;
32 len
= lstrlenA(lpszA
);
33 *ppszW
= RtlAllocateHeap ( hHeap
, 0, (len
+1) * sizeof(WCHAR
) );
35 return STATUS_NO_MEMORY
;
36 return RtlMultiByteToUnicodeN ( *ppszW
, len
, NULL
, (PCHAR
)lpszA
, len
);
41 STATIC
HEAP_free ( HANDLE hHeap
, LPVOID memory
)
43 RtlFreeHeap ( hHeap
, 0, memory
);
52 AddFontResourceExA ( LPCSTR lpszFilename
, DWORD fl
, PVOID pvReserved
)
55 HANDLE hHeap
= RtlGetProcessHeap();
59 Status
= HEAP_strdupA2W ( hHeap
, &FilenameW
, lpszFilename
);
60 if ( !NT_SUCCESS (Status
) )
61 SetLastError (RtlNtStatusToDosError(Status
));
64 rc
= AddFontResourceExW ( FilenameW
, fl
, pvReserved
);
66 HEAP_free ( hHeap
, &FilenameW
);
76 AddFontResourceA ( LPCSTR lpszFilename
)
78 return AddFontResourceExA ( lpszFilename
, 0, 0 );
93 HANDLE hHeap
= RtlGetProcessHeap();
97 Status
= HEAP_strdupA2W ( hHeap
, &lpszFileW
, lpszFile
);
98 if (!NT_SUCCESS (Status
))
99 SetLastError (RtlNtStatusToDosError(Status
));
102 rc
= W32kCopyMetaFile ( Src
, lpszFileW
);
104 HEAP_free ( hHeap
, lpszFileW
);
120 CONST DEVMODEA
* lpdvmInit
124 HANDLE hHeap
= RtlGetProcessHeap();
125 LPWSTR lpszDriverW
, lpszDeviceW
, lpszOutputW
;
129 Status
= HEAP_strdupA2W ( hHeap
, &lpszDriverW
, lpszDriver
);
130 if (!NT_SUCCESS (Status
))
131 SetLastError (RtlNtStatusToDosError(Status
));
134 Status
= HEAP_strdupA2W ( hHeap
, &lpszDeviceW
, lpszDevice
);
135 if (!NT_SUCCESS (Status
))
136 SetLastError (RtlNtStatusToDosError(Status
));
139 Status
= HEAP_strdupA2W ( hHeap
, &lpszOutputW
, lpszOutput
);
140 if (!NT_SUCCESS (Status
))
141 SetLastError (RtlNtStatusToDosError(Status
));
145 RosRtlDevModeA2W ( &dvmInitW
, (const LPDEVMODEA
)lpdvmInit
);
147 rc
= W32kCreateIC ( lpszDriverW
,
150 lpdvmInit
? &dvmInitW
: NULL
);
152 HEAP_free ( hHeap
, lpszOutputW
);
154 HEAP_free ( hHeap
, lpszDeviceW
);
156 HEAP_free ( hHeap
, lpszDriverW
);
172 HANDLE hHeap
= RtlGetProcessHeap();
176 Status
= HEAP_strdupA2W ( hHeap
, &lpszFileW
, lpszFile
);
177 if (!NT_SUCCESS (Status
))
178 SetLastError (RtlNtStatusToDosError(Status
));
181 rc
= W32kCreateMetaFile ( lpszFileW
);
183 HEAP_free ( hHeap
, lpszFileW
);
194 CreateScalableFontResourceA(
198 LPCSTR lpszCurrentPath
202 HANDLE hHeap
= RtlGetProcessHeap();
203 LPWSTR lpszFontResW
, lpszFontFileW
, lpszCurrentPathW
;
206 Status
= HEAP_strdupA2W ( hHeap
, &lpszFontResW
, lpszFontRes
);
207 if (!NT_SUCCESS (Status
))
208 SetLastError (RtlNtStatusToDosError(Status
));
211 Status
= HEAP_strdupA2W ( hHeap
, &lpszFontFileW
, lpszFontFile
);
212 if (!NT_SUCCESS (Status
))
213 SetLastError (RtlNtStatusToDosError(Status
));
216 Status
= HEAP_strdupA2W ( hHeap
, &lpszCurrentPathW
, lpszCurrentPath
);
217 if (!NT_SUCCESS (Status
))
218 SetLastError (RtlNtStatusToDosError(Status
));
221 rc
= W32kCreateScalableFontResource ( fdwHidden
,
226 HEAP_free ( hHeap
, lpszCurrentPathW
);
229 HEAP_free ( hHeap
, lpszFontFileW
);
232 HEAP_free ( hHeap
, lpszFontResW
);
243 DeviceCapabilitiesExA(
248 CONST DEVMODEA
*pDevMode
251 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
263 LPLOGFONTA lpLogFont
,
264 FONTENUMEXPROC lpEnumFontFamProc
,
271 RosRtlLogFontA2W ( &LogFontW
, lpLogFont
);
273 /* no need to convert LogFontW back to lpLogFont b/c it's an [in] parameter only */
274 return W32kEnumFontFamiliesEx ( hdc
, &LogFontW
, lpEnumFontFamProc
, lParam
, dwFlags
);
286 FONTENUMPROC lpEnumFontFamProc
,
291 HANDLE hHeap
= RtlGetProcessHeap();
295 Status
= HEAP_strdupA2W ( hHeap
, &lpszFamilyW
, lpszFamily
);
296 if (!NT_SUCCESS (Status
))
297 SetLastError (RtlNtStatusToDosError(Status
));
300 rc
= W32kEnumFontFamilies ( hdc
, lpszFamilyW
, lpEnumFontFamProc
, lParam
);
302 HEAP_free ( hHeap
, lpszFamilyW
);
317 FONTENUMPROC FontFunc
,
322 HANDLE hHeap
= RtlGetProcessHeap();
326 Status
= HEAP_strdupA2W ( hHeap
, &lpFaceNameW
, lpFaceName
);
327 if (!NT_SUCCESS (Status
))
328 SetLastError (RtlNtStatusToDosError(Status
));
331 rc
= W32kEnumFonts ( hDC
, lpFaceNameW
, FontFunc
, lParam
);
333 HEAP_free ( hHeap
, lpFaceNameW
);
351 /* FIXME what to do with iFirstChar and iLastChar ??? */
352 return W32kGetCharWidth ( hdc
, iFirstChar
, iLastChar
, lpBuffer
);
368 /* FIXME what to do with iFirstChar and iLastChar ??? */
369 return W32kGetCharWidth32 ( hdc
, iFirstChar
, iLastChar
, lpBuffer
);
385 /* FIXME what to do with iFirstChar and iLastChar ??? */
386 return W32kGetCharWidthFloat ( hdc
, iFirstChar
, iLastChar
, pxBuffer
);
402 /* FIXME what to do with uFirstChar and uLastChar ??? */
403 return W32kGetCharABCWidths ( hdc
, uFirstChar
, uLastChar
, lpabc
);
412 GetCharABCWidthsFloatA(
419 /* FIXME what to do with iFirstChar and iLastChar ??? */
420 return W32kGetCharABCWidthsFloat ( hdc
, iFirstChar
, iLastChar
, lpABCF
);
439 return W32kGetGlyphOutline ( hdc
, uChar
, uFormat
, lpgm
, cbBuffer
, lpvBuffer
, (CONST LPMAT2
)lpmat2
);
453 HANDLE hHeap
= RtlGetProcessHeap();
454 LPWSTR lpszMetaFileW
;
457 Status
= HEAP_strdupA2W ( hHeap
, &lpszMetaFileW
, lpszMetaFile
);
458 if (!NT_SUCCESS (Status
))
459 SetLastError (RtlNtStatusToDosError(Status
));
462 rc
= W32kGetMetaFile ( lpszMetaFileW
);
464 HEAP_free ( hHeap
, lpszMetaFileW
);
476 GetOutlineTextMetricsA(
479 LPOUTLINETEXTMETRICA lpOTM
482 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
492 GetTextExtentExPointA(
503 HANDLE hHeap
= RtlGetProcessHeap();
507 Status
= HEAP_strdupA2W ( hHeap
, &lpszStrW
, lpszStr
);
508 if (!NT_SUCCESS (Status
))
509 SetLastError (RtlNtStatusToDosError(Status
));
512 rc
= W32kGetTextExtentExPoint (
513 hdc
, lpszStrW
, cchString
, nMaxExtent
, lpnFit
, alpDx
, lpSize
);
515 HEAP_free ( hHeap
, lpszStrW
);
527 GetCharacterPlacementA(
536 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
548 CONST DEVMODEA
*lpInitData
553 RosRtlDevModeA2W ( &InitDataW
, (CONST LPDEVMODEA
)lpInitData
);
555 return W32kResetDC ( hdc
, &InitDataW
);
569 HANDLE hHeap
= RtlGetProcessHeap();
573 Status
= HEAP_strdupA2W ( hHeap
, &lpFileNameW
, lpFileName
);
574 if (!NT_SUCCESS (Status
))
575 SetLastError (RtlNtStatusToDosError(Status
));
578 rc
= W32kRemoveFontResource ( lpFileNameW
);
580 HEAP_free ( hHeap
, lpFileNameW
);
593 HENHMETAFILE hemfSrc
,
598 HANDLE hHeap
= RtlGetProcessHeap();
602 Status
= HEAP_strdupA2W ( hHeap
, &lpszFileW
, lpszFile
);
603 if (!NT_SUCCESS (Status
))
604 SetLastError (RtlNtStatusToDosError(Status
));
607 rc
= W32kCopyEnhMetaFile ( hemfSrc
, lpszFileW
);
609 HEAP_free ( hHeap
, lpszFileW
);
628 HANDLE hHeap
= RtlGetProcessHeap();
629 LPWSTR lpFileNameW
, lpDescriptionW
;
632 Status
= HEAP_strdupA2W ( hHeap
, &lpFileNameW
, lpFileName
);
633 if (!NT_SUCCESS (Status
))
634 SetLastError (RtlNtStatusToDosError(Status
));
637 Status
= HEAP_strdupA2W ( hHeap
, &lpDescriptionW
, lpDescription
);
638 if (!NT_SUCCESS (Status
))
639 SetLastError (RtlNtStatusToDosError(Status
));
642 rc
= W32kCreateEnhMetaFile (
643 hdc
, lpFileNameW
, (CONST LPRECT
)lpRect
, lpDescriptionW
);
645 HEAP_free ( hHeap
, lpDescriptionW
);
647 HEAP_free ( hHeap
, lpFileNameW
);
664 HANDLE hHeap
= RtlGetProcessHeap();
665 LPWSTR lpszMetaFileW
;
668 Status
= HEAP_strdupA2W ( hHeap
, &lpszMetaFileW
, lpszMetaFile
);
669 if (!NT_SUCCESS (Status
))
670 SetLastError (RtlNtStatusToDosError(Status
));
673 rc
= W32kGetEnhMetaFile ( lpszMetaFileW
);
675 HEAP_free ( hHeap
, lpszMetaFileW
);
687 GetEnhMetaFileDescriptionA(
690 LPSTR lpszDescription
695 LPWSTR lpszDescriptionW
;
698 if ( lpszDescription
&& cchBuffer
)
700 hHeap
= RtlGetProcessHeap();
701 lpszDescriptionW
= (LPWSTR
)RtlAllocateHeap ( hHeap
, 0, cchBuffer
*sizeof(WCHAR
) );
702 if ( !lpszDescriptionW
)
704 SetLastError (RtlNtStatusToDosError(STATUS_NO_MEMORY
));
709 lpszDescriptionW
= NULL
;
711 rc
= W32kGetEnhMetaFileDescription ( hemf
, cchBuffer
, lpszDescriptionW
);
713 if ( lpszDescription
&& cchBuffer
)
715 Status
= RtlUnicodeToMultiByteN ( lpszDescription
,
720 RtlFreeHeap ( hHeap
, 0, lpszDescriptionW
);
721 if ( !NT_SUCCESS(Status
) )
723 SetLastError (RtlNtStatusToDosError(Status
));
742 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
758 return W32kGetObject ( a0
, a1
, a2
);
773 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
789 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
805 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
821 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
835 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
847 DWORD a1
, /* MS says LPDWORD! */
851 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
866 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
882 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
899 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
917 LPGLYPHMETRICSFLOAT a7
920 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
937 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);