- GdiIsPlayMetafileDC: function GdiGetHandleUserData might fail
[reactos.git] / reactos / dll / win32 / gdi32 / misc / stubs.c
index 2b46c56..a826faf 100644 (file)
 #define UNIMPLEMENTED DbgPrint("GDI32: %s is unimplemented, please try again later.\n", __FUNCTION__);
 
 
-/*
- * @unimplemented
- */
-int
-STDCALL
-StretchDIBits(HDC hdc,
-              int XDest,
-              int YDest,
-              int nDestWidth,
-              int nDestHeight,
-              int XSrc,
-              int YSrc,
-              int nSrcWidth,
-              int nSrcHeight,
-              CONST VOID *lpBits,
-              CONST BITMAPINFO *lpBitsInfo,
-              UINT iUsage,
-              DWORD dwRop)
-
-{
-    /* FIXME share memory */
-    return NtGdiStretchDIBitsInternal(hdc, XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc,
-                              nSrcWidth, nSrcHeight, (LPBYTE)lpBits, (LPBITMAPINFO)lpBitsInfo, (DWORD)iUsage, dwRop, 0, 0, NULL);
-}
-
 /*
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 PtInRegion(IN HRGN hrgn,
            int x,
            int y)
@@ -63,7 +38,7 @@ PtInRegion(IN HRGN hrgn,
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 RectInRegion(HRGN hrgn,
              LPCRECT prcl)
 {
@@ -75,7 +50,7 @@ RectInRegion(HRGN hrgn,
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 RestoreDC(IN HDC hdc,
           IN INT iLevel)
 {
@@ -87,7 +62,7 @@ RestoreDC(IN HDC hdc,
  * @unimplemented
  */
 INT
-STDCALL
+WINAPI
 SaveDC(IN HDC hdc)
 {
     /* FIXME Sharememory */
@@ -100,7 +75,7 @@ SaveDC(IN HDC hdc)
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 CancelDC(HDC hdc)
 {
     UNIMPLEMENTED;
@@ -113,7 +88,7 @@ CancelDC(HDC hdc)
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 DrawEscape(HDC  hdc,
            int a1,
            int a2,
@@ -129,7 +104,7 @@ DrawEscape(HDC  hdc,
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 EnumObjects(HDC hdc,
             int a1,
             GOBJENUMPROC a2,
@@ -146,7 +121,7 @@ EnumObjects(HDC hdc,
  * @implemented
  */
 UINT
-STDCALL
+WINAPI
 GetBoundsRect(
        HDC     hdc,
        LPRECT  lprcBounds,
@@ -161,7 +136,7 @@ GetBoundsRect(
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetMetaFileBitsEx(
        HMETAFILE       a0,
        UINT            a1,
@@ -173,26 +148,11 @@ GetMetaFileBitsEx(
        return 0;
 }
 
-
-/*
- * @unimplemented
- */
-DWORD
-STDCALL
-GetFontLanguageInfo(
-       HDC     hDc
-       )
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
 /*
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 PlayMetaFile(
        HDC             a0,
        HMETAFILE       a1
@@ -207,12 +167,12 @@ PlayMetaFile(
  * @implemented
  */
 UINT
-STDCALL
+WINAPI
 SetBoundsRect(HDC hdc,
               CONST RECT *prc,
               UINT flags)
 {
-    /* FIXME add check for vaildate the flags */
+    /* FIXME add check for validate the flags */
     return NtGdiSetBoundsRect(hdc, (LPRECT)prc, flags);
 }
 
@@ -220,7 +180,7 @@ SetBoundsRect(HDC hdc,
  * @unimplemented
  */
 HMETAFILE
-STDCALL
+WINAPI
 SetMetaFileBitsEx(
        UINT            a0,
        CONST BYTE      *a1
@@ -235,7 +195,7 @@ SetMetaFileBitsEx(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 PlayMetaFileRecord(
        HDC             a0,
        LPHANDLETABLE   a1,
@@ -253,7 +213,7 @@ PlayMetaFileRecord(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 EnumMetaFile(
        HDC                     a0,
        HMETAFILE               a1,
@@ -270,7 +230,7 @@ EnumMetaFile(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 DeleteEnhMetaFile(
        HENHMETAFILE    a0
        )
@@ -284,7 +244,7 @@ DeleteEnhMetaFile(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 EnumEnhMetaFile(
        HDC             a0,
        HENHMETAFILE    a1,
@@ -302,7 +262,7 @@ EnumEnhMetaFile(
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetEnhMetaFileBits(
        HENHMETAFILE    a0,
        UINT            a1,
@@ -319,7 +279,7 @@ GetEnhMetaFileBits(
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetEnhMetaFileHeader(
        HENHMETAFILE    a0,
        UINT            a1,
@@ -335,7 +295,7 @@ GetEnhMetaFileHeader(
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetEnhMetaFilePaletteEntries(
        HENHMETAFILE    a0,
        UINT            a1,
@@ -351,7 +311,7 @@ GetEnhMetaFilePaletteEntries(
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetWinMetaFileBits(
        HENHMETAFILE    a0,
        UINT            a1,
@@ -370,7 +330,7 @@ GetWinMetaFileBits(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 PlayEnhMetaFile(
        HDC             a0,
        HENHMETAFILE    a1,
@@ -387,7 +347,7 @@ PlayEnhMetaFile(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 PlayEnhMetaFileRecord(
        HDC                     a0,
        LPHANDLETABLE           a1,
@@ -405,7 +365,7 @@ PlayEnhMetaFileRecord(
  * @unimplemented
  */
 HENHMETAFILE
-STDCALL
+WINAPI
 SetEnhMetaFileBits(
        UINT            a0,
        CONST BYTE      *a1
@@ -421,7 +381,7 @@ SetEnhMetaFileBits(
  * @unimplemented
  */
 HENHMETAFILE
-STDCALL
+WINAPI
 SetWinMetaFileBits(
        UINT                    a0,
        CONST BYTE              *a1,
@@ -438,7 +398,7 @@ SetWinMetaFileBits(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiComment(
        HDC             hDC,
        UINT            bytes,
@@ -468,27 +428,7 @@ GdiComment(
  * @unimplemented
  */
 BOOL
-STDCALL
-AngleArc(
-       HDC     hdc,
-       int     a1,
-       int     a2,
-       DWORD   a3,
-       FLOAT   a4,
-       FLOAT   a5
-       )
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
-}
-
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
+WINAPI
 SetColorAdjustment(
        HDC                     hdc,
        CONST COLORADJUSTMENT   *a1
@@ -503,7 +443,7 @@ SetColorAdjustment(
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 EndDoc(
        HDC     hdc
        )
@@ -518,7 +458,7 @@ EndDoc(
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 StartPage(
        HDC     hdc
        )
@@ -533,7 +473,7 @@ StartPage(
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 EndPage(
        HDC     hdc
        )
@@ -548,7 +488,7 @@ EndPage(
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 AbortDoc(
        HDC     hdc
        )
@@ -563,7 +503,7 @@ AbortDoc(
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 SetAbortProc(
        HDC hdc,
        ABORTPROC lpAbortProc)
@@ -577,11 +517,23 @@ SetAbortProc(
  * @implemented
  */
 BOOL
-STDCALL
+WINAPI
 UnrealizeObject(HGDIOBJ  hgdiobj)
 {
     BOOL retValue = TRUE;
+/*
+   Win 2k Graphics API, Black Book. by coriolis.com
+   Page 62, Note that Steps 3, 5, and 6 are not required for Windows NT(tm)
+   and Windows 2000(tm).
 
+   Step 5. UnrealizeObject(hTrackBrush);
+ */
+/*
+    msdn.microsoft.com,
+    "Windows 2000/XP: If hgdiobj is a brush, UnrealizeObject does nothing,
+    and the function returns TRUE. Use SetBrushOrgEx to set the origin of
+    a brush."
+ */
     if (GDI_HANDLE_GET_TYPE(hgdiobj) != GDI_OBJECT_TYPE_BRUSH)
     {
         retValue = NtGdiUnrealizeObject(hgdiobj);
@@ -595,7 +547,7 @@ UnrealizeObject(HGDIOBJ  hgdiobj)
  * @implemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiFlush()
 {
     NtGdiFlush();
@@ -607,7 +559,7 @@ GdiFlush()
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 SetICMMode(
        HDC     a0,
        int     a1
@@ -623,7 +575,7 @@ SetICMMode(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 CheckColorsInGamut(
        HDC     a0,
        LPVOID  a1,
@@ -637,39 +589,11 @@ CheckColorsInGamut(
 }
 
 
-/*
- * @unimplemented
- */
-HCOLORSPACE
-STDCALL
-GetColorSpace(HDC hDc)
-{
-    UNIMPLEMENTED;
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-
-
-/*
- * @unimplemented
- */
-HCOLORSPACE
-STDCALL
-SetColorSpace(
-       HDC             a0,
-       HCOLORSPACE     a1
-       )
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
-}
-
 /*
  * @implemented
  */
 BOOL
-STDCALL
+WINAPI
 GetDeviceGammaRamp( HDC hdc,
                     LPVOID lpGammaRamp)
 {
@@ -690,7 +614,7 @@ GetDeviceGammaRamp( HDC hdc,
  * @implemented
  */
 BOOL
-STDCALL
+WINAPI
 SetDeviceGammaRamp(HDC hdc,
                    LPVOID lpGammaRamp)
 {
@@ -713,7 +637,7 @@ SetDeviceGammaRamp(HDC hdc,
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 ColorMatchToTarget(
        HDC     a0,
        HDC     a1,
@@ -730,7 +654,7 @@ ColorMatchToTarget(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 wglCopyContext(
        HGLRC   a0,
        HGLRC   a1,
@@ -747,7 +671,7 @@ wglCopyContext(
  * @unimplemented
  */
 HGLRC
-STDCALL
+WINAPI
 wglCreateContext(
        HDC     hDc
        )
@@ -762,7 +686,7 @@ wglCreateContext(
  * @unimplemented
  */
 HGLRC
-STDCALL
+WINAPI
 wglCreateLayerContext(
        HDC     hDc,
        int     a1
@@ -778,7 +702,7 @@ wglCreateLayerContext(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 wglDeleteContext(
        HGLRC   a
        )
@@ -793,7 +717,7 @@ wglDeleteContext(
  * @unimplemented
  */
 HGLRC
-STDCALL
+WINAPI
 wglGetCurrentContext(VOID)
 {
        UNIMPLEMENTED;
@@ -806,7 +730,7 @@ wglGetCurrentContext(VOID)
  * @unimplemented
  */
 HDC
-STDCALL
+WINAPI
 wglGetCurrentDC(VOID)
 {
        UNIMPLEMENTED;
@@ -819,7 +743,7 @@ wglGetCurrentDC(VOID)
  * @unimplemented
  */
 PROC
-STDCALL
+WINAPI
 wglGetProcAddress(
        LPCSTR          a0
        )
@@ -834,7 +758,7 @@ wglGetProcAddress(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 wglMakeCurrent(
        HDC     a0,
        HGLRC   a1
@@ -850,7 +774,7 @@ wglMakeCurrent(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 wglShareLists(
        HGLRC   a0,
        HGLRC   a1
@@ -866,7 +790,7 @@ wglShareLists(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 wglDescribeLayerPlane(
        HDC                     a0,
        int                     a1,
@@ -885,7 +809,7 @@ wglDescribeLayerPlane(
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 wglSetLayerPaletteEntries(
        HDC             a0,
        int             a1,
@@ -904,7 +828,7 @@ wglSetLayerPaletteEntries(
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 wglGetLayerPaletteEntries(
        HDC             a0,
        int             a1,
@@ -923,7 +847,7 @@ wglGetLayerPaletteEntries(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 wglRealizeLayerPalette(
        HDC             a0,
        int             a1,
@@ -940,7 +864,7 @@ wglRealizeLayerPalette(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 wglSwapLayerBuffers(
        HDC             a0,
        UINT            a1
@@ -961,7 +885,7 @@ wglSwapLayerBuffers(
  * @unimplemented
  */
 DWORD
-STDCALL
+WINAPI
 IsValidEnhMetaRecord(
        DWORD   a0,
        DWORD   a1
@@ -977,7 +901,7 @@ IsValidEnhMetaRecord(
  * @unimplemented
  */
 DWORD
-STDCALL
+WINAPI
 IsValidEnhMetaRecordOffExt(
        DWORD   a0,
        DWORD   a1,
@@ -995,7 +919,7 @@ IsValidEnhMetaRecordOffExt(
  * @unimplemented
  */
 DWORD
-STDCALL
+WINAPI
 GetGlyphOutlineWow(
        DWORD   a0,
        DWORD   a1,
@@ -1015,7 +939,7 @@ GetGlyphOutlineWow(
  * @unimplemented
  */
 DWORD
-STDCALL
+WINAPI
 gdiPlaySpoolStream(
        DWORD   a0,
        DWORD   a1,
@@ -1031,10 +955,10 @@ gdiPlaySpoolStream(
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 HANDLE
-STDCALL
+WINAPI
 AddFontMemResourceEx(
        PVOID pbFont,
        DWORD cbFont,
@@ -1042,16 +966,19 @@ AddFontMemResourceEx(
        DWORD *pcFonts
 )
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+  if ( pbFont && cbFont && pcFonts)
+  {
+     return NtGdiAddFontMemResourceEx(pbFont, cbFont, NULL, 0, pcFonts);
+  }
+  SetLastError(ERROR_INVALID_PARAMETER);
+  return NULL;
 }
 
 /*
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 AddFontResourceTracking(
        LPCSTR lpString,
        int unknown
@@ -1068,7 +995,7 @@ AddFontResourceTracking(
  * @unimplemented
  */
 HBITMAP
-STDCALL
+WINAPI
 ClearBitmapAttributes(HBITMAP hbm, DWORD dwFlags)
 {
        UNIMPLEMENTED;
@@ -1080,7 +1007,7 @@ ClearBitmapAttributes(HBITMAP hbm, DWORD dwFlags)
  * @unimplemented
  */
 HBRUSH
-STDCALL
+WINAPI
 ClearBrushAttributes(HBRUSH hbm, DWORD dwFlags)
 {
        UNIMPLEMENTED;
@@ -1092,7 +1019,7 @@ ClearBrushAttributes(HBRUSH hbm, DWORD dwFlags)
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 ColorCorrectPalette(HDC hDC,HPALETTE hPalette,DWORD dwFirstEntry,DWORD dwNumOfEntries)
 {
        UNIMPLEMENTED;
@@ -1104,7 +1031,7 @@ ColorCorrectPalette(HDC hDC,HPALETTE hPalette,DWORD dwFirstEntry,DWORD dwNumOfEn
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 EndFormPage(HDC hdc)
 {
        UNIMPLEMENTED;
@@ -1112,25 +1039,11 @@ EndFormPage(HDC hdc)
        return 0;
 }
 
-
-
-/*
- * @unimplemented
- */
-DWORD
-STDCALL
-GdiAddGlsBounds(HDC hdc,LPRECT prc)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
 /*
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiArtificialDecrementDriver(LPWSTR pDriverName,BOOL unknown)
 {
        UNIMPLEMENTED;
@@ -1142,7 +1055,7 @@ GdiArtificialDecrementDriver(LPWSTR pDriverName,BOOL unknown)
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiCleanCacheDC(HDC hdc)
 {
        UNIMPLEMENTED;
@@ -1154,7 +1067,7 @@ GdiCleanCacheDC(HDC hdc)
  * @unimplemented
  */
 HDC
-STDCALL
+WINAPI
 GdiConvertAndCheckDC(HDC hdc)
 {
        UNIMPLEMENTED;
@@ -1166,7 +1079,7 @@ GdiConvertAndCheckDC(HDC hdc)
  * @unimplemented
  */
 HENHMETAFILE
-STDCALL
+WINAPI
 GdiConvertEnhMetaFile(HENHMETAFILE hmf)
 {
     UNIMPLEMENTED;
@@ -1178,7 +1091,7 @@ GdiConvertEnhMetaFile(HENHMETAFILE hmf)
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiDrawStream(HDC dc, ULONG l, VOID *v)
 {
     UNIMPLEMENTED;
@@ -1187,46 +1100,76 @@ GdiDrawStream(HDC dc, ULONG l, VOID *v)
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 BOOL
-STDCALL
-GdiIsMetaFileDC(HDC hdc)
+WINAPI
+GdiIsMetaFileDC(HDC hDC)
 {
-    UNIMPLEMENTED;
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
+  if (GDI_HANDLE_GET_TYPE(hDC) != GDI_OBJECT_TYPE_DC)
+  {
+     if (GDI_HANDLE_GET_TYPE(hDC) == GDI_OBJECT_TYPE_METADC)
+        return TRUE;
+     else
+     {
+        PLDC pLDC = GdiGetLDC(hDC);
+        if ( !pLDC )
+        {
+           SetLastError(ERROR_INVALID_HANDLE);
+           return FALSE;
+        }
+        if ( pLDC->iType == LDC_EMFLDC) return TRUE;
+     }
+  }
+  return FALSE;
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 BOOL
-STDCALL
-GdiIsMetaPrintDC(HDC hdc)
+WINAPI
+GdiIsMetaPrintDC(HDC hDC)
 {
-    UNIMPLEMENTED;
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
+
+  if (GDI_HANDLE_GET_TYPE(hDC) != GDI_OBJECT_TYPE_DC)
+  {
+     if (GDI_HANDLE_GET_TYPE(hDC) == GDI_OBJECT_TYPE_METADC)
+        return FALSE;
+     else
+     {
+        PLDC pLDC = GdiGetLDC(hDC);
+        if ( !pLDC )
+        {
+           SetLastError(ERROR_INVALID_HANDLE);
+           return FALSE;
+        }
+        if ( pLDC->Flags & LDC_META_PRINT) return TRUE;
+     }
+  }
+  return FALSE;
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 BOOL
-STDCALL
-GdiIsPlayMetafileDC(HDC hdc)
+WINAPI
+GdiIsPlayMetafileDC(HDC hDC)
 {
-    UNIMPLEMENTED;
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
+  PLDC pLDC = GdiGetLDC(hDC);
+  if ( pLDC )
+  {
+     if ( pLDC->Flags & LDC_PLAY_MFDC ) return TRUE;
+  }
+  return FALSE;
 }
 
 /*
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiValidateHandle(HGDIOBJ hobj)
 {
     UNIMPLEMENTED;
@@ -1238,7 +1181,7 @@ GdiValidateHandle(HGDIOBJ hobj)
  * @unimplemented
  */
 DWORD
-STDCALL
+WINAPI
 GetBitmapAttributes(HBITMAP hbm)
 {
     UNIMPLEMENTED;
@@ -1250,7 +1193,7 @@ GetBitmapAttributes(HBITMAP hbm)
  * @unimplemented
  */
 DWORD
-STDCALL
+WINAPI
 GetBrushAttributes(HBRUSH hbr)
 {
     UNIMPLEMENTED;
@@ -1262,7 +1205,7 @@ GetBrushAttributes(HBRUSH hbr)
  * @implemented
  */
 ULONG
-STDCALL
+WINAPI
 GetEUDCTimeStamp(VOID)
 {
     return NtGdiGetEudcTimeStampEx(NULL,0,TRUE);
@@ -1272,7 +1215,7 @@ GetEUDCTimeStamp(VOID)
  * @implemented
  */
 ULONG
-STDCALL
+WINAPI
 GetFontAssocStatus(HDC hdc)
 {
     ULONG retValue = 0;
@@ -1289,7 +1232,7 @@ GetFontAssocStatus(HDC hdc)
  * @implemented
  */
 BOOL
-STDCALL
+WINAPI
 GetTextExtentExPointWPri(HDC hdc,
                          LPWSTR lpwsz,
                          ULONG cwc,
@@ -1301,32 +1244,11 @@ GetTextExtentExPointWPri(HDC hdc,
     return NtGdiGetTextExtentExW(hdc,lpwsz,cwc,dxMax,pcCh,pdxOut,psize,0);
 }
 
-/*
- * @implemented
- */
-INT
-STDCALL
-GetTextFaceAliasW(HDC hdc,
-                  int cChar,
-                  LPWSTR pszOut)
-{
-    INT retValue = 0;
-    if ((!pszOut) || (cChar))
-    {
-        retValue = NtGdiGetTextFaceW(hdc,cChar,pszOut,TRUE);
-    }
-    else
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-    }
-    return retValue;
-}
-
 /*
  * @unimplemented
  */
 DWORD
-STDCALL
+WINAPI
 QueryFontAssocStatus(VOID)
 {
     UNIMPLEMENTED;
@@ -1338,27 +1260,22 @@ QueryFontAssocStatus(VOID)
  * @implemented
  */
 BOOL
-STDCALL
+WINAPI
 RemoveFontMemResourceEx(HANDLE fh)
 {
-    BOOL retValue=0;
-
-    if (fh)
-    {
-        retValue = NtGdiRemoveFontMemResourceEx(fh);
-    }
-    else
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-    }
-    return retValue;
+  if (fh)
+  {
+     return NtGdiRemoveFontMemResourceEx(fh);
+  }
+  SetLastError(ERROR_INVALID_PARAMETER);
+  return FALSE;
 }
 
 /*
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 RemoveFontResourceTracking(LPCSTR lpString,int unknown)
 {
        UNIMPLEMENTED;
@@ -1370,7 +1287,7 @@ RemoveFontResourceTracking(LPCSTR lpString,int unknown)
  * @unimplemented
  */
 HBITMAP
-STDCALL
+WINAPI
 SetBitmapAttributes(HBITMAP hbm, DWORD dwFlags)
 {
        UNIMPLEMENTED;
@@ -1382,7 +1299,7 @@ SetBitmapAttributes(HBITMAP hbm, DWORD dwFlags)
  * @unimplemented
  */
 HBRUSH
-STDCALL
+WINAPI
 SetBrushAttributes(HBRUSH hbm, DWORD dwFlags)
 {
        UNIMPLEMENTED;
@@ -1394,7 +1311,7 @@ SetBrushAttributes(HBRUSH hbm, DWORD dwFlags)
  * @implemented
  */
 int
-STDCALL
+WINAPI
 StartFormPage(HDC hdc)
 {
     return StartPage(hdc);
@@ -1404,7 +1321,7 @@ StartFormPage(HDC hdc)
  * @unimplemented
  */
 VOID
-STDCALL
+WINAPI
 UnloadNetworkFonts(DWORD unknown)
 {
     UNIMPLEMENTED;
@@ -1415,7 +1332,7 @@ UnloadNetworkFonts(DWORD unknown)
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiRealizationInfo(HDC hdc,
                    PREALIZATION_INFO pri)
 {
@@ -1427,7 +1344,7 @@ GdiRealizationInfo(HDC hdc,
  * @implemented
  */
 BOOL
-STDCALL
+WINAPI
 GetETM(HDC hdc,
        EXTTEXTMETRIC *petm)
 {
@@ -1443,7 +1360,7 @@ GetETM(HDC hdc,
  * @unimplemented
  */
 int
-STDCALL
+WINAPI
 Escape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpvInData, LPVOID lpvOutData)
 {
     int retValue = SP_ERROR;    
@@ -1629,7 +1546,7 @@ Escape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpvInData, LPVOID lpvOutData)
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiAddGlsRecord(HDC hdc,
                 DWORD unknown1,
                 LPCSTR unknown2,
@@ -1644,7 +1561,7 @@ GdiAddGlsRecord(HDC hdc,
  * @unimplemented
  */
 HANDLE
-STDCALL
+WINAPI
 GdiConvertMetaFilePict(HGLOBAL hMem)
 {
     UNIMPLEMENTED;
@@ -1656,82 +1573,54 @@ GdiConvertMetaFilePict(HGLOBAL hMem)
  * @implemented
  */
 DEVMODEW *
-STDCALL
-GdiConvertToDevmodeW(DEVMODEA *dm)
-{
-    LPDEVMODEW dmw;
-
-    dmw = HEAP_alloc(sizeof(DEVMODEW));
-    #define COPYS(f,len) MultiByteToWideChar ( CP_THREAD_ACP, 0, (LPSTR)dm->f, len, dmw->f, len )
-    #define COPYN(f) dmw->f = dm->f
-    COPYS(dmDeviceName, CCHDEVICENAME );
-    COPYN(dmSpecVersion);
-    COPYN(dmDriverVersion);
-    switch ( dm->dmSize )
-    {
-        case SIZEOF_DEVMODEA_300:
-            dmw->dmSize = SIZEOF_DEVMODEW_300;
-            break;
-        case SIZEOF_DEVMODEA_400:
-            dmw->dmSize = SIZEOF_DEVMODEW_400;
-            break;
-        case SIZEOF_DEVMODEA_500:
-            default: /* FIXME what to do??? */
-                dmw->dmSize = SIZEOF_DEVMODEW_500;
-            break;
-    }
-    COPYN(dmDriverExtra);
-    COPYN(dmFields);
-    COPYN(dmPosition.x);
-    COPYN(dmPosition.y);
-    COPYN(dmScale);
-    COPYN(dmCopies);
-    COPYN(dmDefaultSource);
-    COPYN(dmPrintQuality);
-    COPYN(dmColor);
-    COPYN(dmDuplex);
-    COPYN(dmYResolution);
-    COPYN(dmTTOption);
-    COPYN(dmCollate);
-    COPYS(dmFormName,CCHFORMNAME);
-    COPYN(dmLogPixels);
-    COPYN(dmBitsPerPel);
-    COPYN(dmPelsWidth);
-    COPYN(dmPelsHeight);
-    COPYN(dmDisplayFlags); // aka dmNup
-    COPYN(dmDisplayFrequency);
-
-    if ( dm->dmSize <= SIZEOF_DEVMODEA_300 )
-    {
-        return dmw; // we're done with 0x300 fields
-    }
+WINAPI
+GdiConvertToDevmodeW(DEVMODEA *dmA)
+{
+    DEVMODEW *dmW;
+    WORD dmW_size, dmA_size;
+
+    dmA_size = dmA->dmSize;
 
-    COPYN(dmICMMethod);
-    COPYN(dmICMIntent);
-    COPYN(dmMediaType);
-    COPYN(dmDitherType);
-    COPYN(dmReserved1);
-    COPYN(dmReserved2);
+    /* this is the minimal dmSize that XP accepts */
+    if (dmA_size < FIELD_OFFSET(DEVMODEA, dmFields))
+        return NULL;
 
-    if ( dm->dmSize <= SIZEOF_DEVMODEA_400 )
+    if (dmA_size > sizeof(DEVMODEA))
+        dmA_size = sizeof(DEVMODEA);
+
+    dmW_size = dmA_size + CCHDEVICENAME;
+    if (dmA_size >= FIELD_OFFSET(DEVMODEA, dmFormName) + CCHFORMNAME)
+        dmW_size += CCHFORMNAME;
+
+    dmW = HeapAlloc(GetProcessHeap(), 0, dmW_size + dmA->dmDriverExtra);
+    if (!dmW) return NULL;
+
+    MultiByteToWideChar(CP_ACP, 0, (const char*) dmA->dmDeviceName, CCHDEVICENAME,
+                                   dmW->dmDeviceName, CCHDEVICENAME);
+    /* copy slightly more, to avoid long computations */
+    memcpy(&dmW->dmSpecVersion, &dmA->dmSpecVersion, dmA_size - CCHDEVICENAME);
+
+    if (dmA_size >= FIELD_OFFSET(DEVMODEA, dmFormName) + CCHFORMNAME)
     {
-        return dmw; // we're done with 0x400 fields
+        MultiByteToWideChar(CP_ACP, 0, (const char*) dmA->dmFormName, CCHFORMNAME,
+                                       dmW->dmFormName, CCHFORMNAME);
+        if (dmA_size > FIELD_OFFSET(DEVMODEA, dmLogPixels))
+            memcpy(&dmW->dmLogPixels, &dmA->dmLogPixels, dmA_size - FIELD_OFFSET(DEVMODEA, dmLogPixels));
     }
 
-    COPYN(dmPanningWidth);
-    COPYN(dmPanningHeight);
+    if (dmA->dmDriverExtra)
+        memcpy((char *)dmW + dmW_size, (const char *)dmA + dmA_size, dmA->dmDriverExtra);
 
-    return dmw;
+    dmW->dmSize = dmW_size;
 
-    #undef COPYN
-    #undef COPYS
+    return dmW;
 }
 
 /*
  * @unimplemented
  */
 HENHMETAFILE
-STDCALL
+WINAPI
 GdiCreateLocalEnhMetaFile(HENHMETAFILE hmo)
 {
     UNIMPLEMENTED;
@@ -1743,7 +1632,7 @@ GdiCreateLocalEnhMetaFile(HENHMETAFILE hmo)
  * @unimplemented
  */
 METAFILEPICT *
-STDCALL
+WINAPI
 GdiCreateLocalMetaFilePict(HENHMETAFILE hmo)
 {
     UNIMPLEMENTED;
@@ -1756,7 +1645,7 @@ GdiCreateLocalMetaFilePict(HENHMETAFILE hmo)
  * @unimplemented
  */
 HANDLE
-STDCALL
+WINAPI
 GdiGetSpoolFileHandle(LPWSTR pwszPrinterName,
                       LPDEVMODEW pDevmode,
                       LPWSTR pwszDocName)
@@ -1770,7 +1659,7 @@ GdiGetSpoolFileHandle(LPWSTR pwszPrinterName,
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiDeleteSpoolFileHandle(HANDLE SpoolFileHandle)
 {
     UNIMPLEMENTED;
@@ -1782,7 +1671,7 @@ GdiDeleteSpoolFileHandle(HANDLE SpoolFileHandle)
  * @unimplemented
  */
 DWORD
-STDCALL
+WINAPI
 GdiGetPageCount(HANDLE SpoolFileHandle)
 {
     UNIMPLEMENTED;
@@ -1794,7 +1683,7 @@ GdiGetPageCount(HANDLE SpoolFileHandle)
  * @unimplemented
  */
 HDC
-STDCALL
+WINAPI
 GdiGetDC(HANDLE SpoolFileHandle)
 {
     UNIMPLEMENTED;
@@ -1806,7 +1695,7 @@ GdiGetDC(HANDLE SpoolFileHandle)
  * @unimplemented
  */
 HANDLE
-STDCALL
+WINAPI
 GdiGetPageHandle(HANDLE SpoolFileHandle,
                  DWORD Page,
                  LPDWORD pdwPageType)
@@ -1820,7 +1709,7 @@ GdiGetPageHandle(HANDLE SpoolFileHandle,
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiStartDocEMF(HANDLE SpoolFileHandle,
                DOCINFOW *pDocInfo)
 {
@@ -1833,7 +1722,7 @@ GdiStartDocEMF(HANDLE SpoolFileHandle,
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiStartPageEMF(HANDLE SpoolFileHandle)
 {
     UNIMPLEMENTED;
@@ -1845,7 +1734,7 @@ GdiStartPageEMF(HANDLE SpoolFileHandle)
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiPlayPageEMF(HANDLE SpoolFileHandle,
                HANDLE hemf,
                RECT *prectDocument,
@@ -1861,7 +1750,7 @@ GdiPlayPageEMF(HANDLE SpoolFileHandle,
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiEndPageEMF(HANDLE SpoolFileHandle,
               DWORD dwOptimization)
 {
@@ -1874,7 +1763,7 @@ GdiEndPageEMF(HANDLE SpoolFileHandle,
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiEndDocEMF(HANDLE SpoolFileHandle)
 {
     UNIMPLEMENTED;
@@ -1886,7 +1775,7 @@ GdiEndDocEMF(HANDLE SpoolFileHandle)
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiGetDevmodeForPage(HANDLE SpoolFileHandle,
                      DWORD dwPageNumber,
                      PDEVMODEW *pCurrDM,
@@ -1901,7 +1790,7 @@ GdiGetDevmodeForPage(HANDLE SpoolFileHandle,
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiResetDCEMF(HANDLE SpoolFileHandle,
               PDEVMODEW pCurrDM)
 {
@@ -1915,7 +1804,7 @@ GdiResetDCEMF(HANDLE SpoolFileHandle,
  * @unimplemented
  */
 INT
-STDCALL
+WINAPI
 CombineRgn(HRGN  hDest,
            HRGN  hSrc1,
            HRGN  hSrc2,
@@ -1928,29 +1817,7 @@ CombineRgn(HRGN  hDest,
 /*
  * @unimplemented
  */
-HBITMAP STDCALL
-CreateBitmap(INT  Width,
-             INT  Height,
-             UINT  Planes,
-             UINT  BitsPixel,
-             PCVOID pUnsafeBits)
-{
-    /* FIXME some part should be done in user mode */
-    if (Width && Height)
-    {
-        return NtGdiCreateBitmap(Width, Height, Planes, BitsPixel, (LPBYTE) pUnsafeBits);
-    }
-    else
-    {
-        /* Return 1x1 bitmap */
-        return GetStockObject(DEFAULT_BITMAP);
-    }
-}
-
-/*
- * @unimplemented
- */
-ULONG STDCALL
+ULONG WINAPI
 XLATEOBJ_iXlate(XLATEOBJ *XlateObj,
                 ULONG Color)
 {
@@ -1963,7 +1830,7 @@ XLATEOBJ_iXlate(XLATEOBJ *XlateObj,
  * @unimplemented
  */
 ULONG *
-STDCALL
+WINAPI
 XLATEOBJ_piVector(XLATEOBJ *XlateObj)
 {
     return XlateObj->pulXlate;
@@ -1973,7 +1840,7 @@ XLATEOBJ_piVector(XLATEOBJ *XlateObj)
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiPlayEMF(LPWSTR pwszPrinterName,
            LPDEVMODEW pDevmode,
            LPWSTR pwszDocName,
@@ -1992,7 +1859,7 @@ GdiPlayEMF(LPWSTR pwszPrinterName,
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiPlayPrivatePageEMF(HANDLE SpoolFileHandle,
                       DWORD unknown,
                       RECT *prectDocument)
@@ -2005,7 +1872,7 @@ GdiPlayPrivatePageEMF(HANDLE SpoolFileHandle,
 /*
  * @unimplemented
  */
-VOID STDCALL GdiInitializeLanguagePack(DWORD InitParam)
+VOID WINAPI GdiInitializeLanguagePack(DWORD InitParam)
 {
     UNIMPLEMENTED;
     SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
@@ -2016,7 +1883,7 @@ VOID STDCALL GdiInitializeLanguagePack(DWORD InitParam)
  * @implemented
  */
 INT
-STDCALL
+WINAPI
 ExcludeClipRect(IN HDC hdc, IN INT xLeft, IN INT yTop, IN INT xRight, IN INT yBottom)
 {
     /* FIXME some part need be done on user mode size */
@@ -2027,7 +1894,7 @@ ExcludeClipRect(IN HDC hdc, IN INT xLeft, IN INT yTop, IN INT xRight, IN INT yBo
  * @implemented
  */
 INT
-STDCALL
+WINAPI
 ExtSelectClipRgn( IN HDC hdc, IN HRGN hrgn, IN INT iMode)
 {
     /* FIXME some part need be done on user mode size */
@@ -2038,7 +1905,7 @@ ExtSelectClipRgn( IN HDC hdc, IN HRGN hrgn, IN INT iMode)
  * @implemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiGradientFill(
     IN HDC hdc,
     IN PTRIVERTEX pVertex,
@@ -2056,7 +1923,7 @@ GdiGradientFill(
  * @implemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiTransparentBlt(IN HDC hdcDst,
                   IN INT xDst,
                   IN INT yDst,
@@ -2078,7 +1945,7 @@ GdiTransparentBlt(IN HDC hdcDst,
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GdiPrinterThunk(
     IN HUMPD humpd,
     DWORD *status,
@@ -2097,7 +1964,7 @@ GdiPrinterThunk(
  *
  */
 HBITMAP
-STDCALL
+WINAPI
 GdiConvertBitmapV5(
     HBITMAP in_format_BitMap,
     HBITMAP src_BitMap,
@@ -2115,26 +1982,12 @@ GdiConvertBitmapV5(
     return FALSE;
 }
 
-
-/*
- * @implemented
- *
- */
-int
-STDCALL
-GetDeviceCaps(HDC hdc,
-              int i)
-{
-    /* FIXME some part need be done in user mode */
-    return NtGdiGetDeviceCaps(hdc,i);
-}
-
 /*
  * @implemented
  *
  */
 int
-STDCALL
+WINAPI
 GetClipBox(HDC hdc,
            LPRECT lprc)
 {
@@ -2146,7 +1999,7 @@ GetClipBox(HDC hdc,
  *
  */
 DWORD
-STDCALL
+WINAPI
 GetFontData(HDC hdc,
             DWORD dwTable,
             DWORD dwOffset,
@@ -2166,7 +2019,7 @@ GetFontData(HDC hdc,
  *
  */
 DWORD
-STDCALL
+WINAPI
 GetRegionData(HRGN hrgn,
               DWORD nCount,
               LPRGNDATA lpRgnData)
@@ -2185,7 +2038,7 @@ GetRegionData(HRGN hrgn,
  *
  */
 INT
-STDCALL
+WINAPI
 GetRgnBox(HRGN hrgn,
           LPRECT prcOut)
 {
@@ -2216,7 +2069,7 @@ GetRgnBox(HRGN hrgn,
  *
  */
 INT
-STDCALL
+WINAPI
 OffsetRgn( HRGN hrgn,
           int nXOffset,
           int nYOffset)
@@ -2229,7 +2082,7 @@ OffsetRgn( HRGN hrgn,
  * @implemented
  */
 INT
-STDCALL
+WINAPI
 IntersectClipRect(HDC hdc,
                   int nLeftRect,
                   int nTopRect,
@@ -2263,7 +2116,7 @@ IntersectClipRect(HDC hdc,
  * @implemented
  */
 INT
-STDCALL
+WINAPI
 OffsetClipRgn(HDC hdc,
               int nXOffset,
               int nYOffset)
@@ -2293,7 +2146,7 @@ OffsetClipRgn(HDC hdc,
 
 
 INT
-STDCALL
+WINAPI
 NamedEscape(HDC hdc,
             PWCHAR pDriver,
             INT iEsc,
@@ -2317,7 +2170,7 @@ NamedEscape(HDC hdc,
 
 /* FIXME wrong protypes, it is a fastcall api */
 DWORD
-STDCALL
+WINAPI
 cGetTTFFromFOT(DWORD x1 ,DWORD x2 ,DWORD x3, DWORD x4, DWORD x5, DWORD x6, DWORD x7)
 {
     UNIMPLEMENTED;