forget commit Implement of GdiGetLocalBrush, GdiGetLocalDC, GdiGetLocalFont
[reactos.git] / reactos / dll / win32 / gdi32 / misc / stubs.c
index db0c3a7..cfd221c 100644 (file)
 
 #define UNIMPLEMENTED DbgPrint("GDI32: %s is unimplemented, please try again later.\n", __FUNCTION__);
 
+
 /*
  * @unimplemented
  */
 BOOL
 STDCALL
-CancelDC(
-       HDC     a0
-       )
+TranslateCharsetInfo(DWORD * lpSrc,
+                     LPCHARSETINFO lpCs,
+                     DWORD dwFlags)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+    /* FIXME share memory */
+    return NtGdiTranslateCharsetInfo(lpSrc, lpCs, dwFlags );
 }
-  
 
 /*
  * @unimplemented
  */
 int
 STDCALL
-DrawEscape(
-       HDC             a0,
-       int             a1,
-       int             a2,
-       LPCSTR          a3
-       )
+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)
+
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME share memory */
+    return NtGdiStretchDIBits(hdc, XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, 
+                              nSrcWidth, nSrcHeight, lpBits, lpBitsInfo, iUsage, dwRop);
 }
 
+/*
+ * @unimplemented
+ */
+int
+STDCALL
+SetDIBits(HDC hdc,
+          HBITMAP hbmp,
+          UINT uStartScan,
+          UINT cScanLines,
+          CONST VOID *lpvBits,
+          CONST BITMAPINFO *lpbmi,
+          UINT fuColorUse)
+{
+    /* FIXME share memory */
+    return NtGdiSetDIBits(hdc, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse);
+}
 
 /*
  * @unimplemented
  */
 int
 STDCALL
-EnumObjects(
-       HDC             a0,
-       int             a1,
-       GOBJENUMPROC    a2,
-       LPARAM          a3
-       )
+SetGraphicsMode(HDC hdc,
+                int iMode)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME share memory */
+    return NtGdiSetGraphicsMode(hdc, iMode);
+}
+
+/*
+ * @unimplemented
+ */
+int
+STDCALL
+SetPolyFillMode(HDC hdc,
+                int iPolyFillMode)
+{
+    /* FIXME share memory */
+    return NtGdiSetPolyFillMode(hdc, iPolyFillMode);
+}
+
+/*
+ * @unimplemented
+ */
+int
+STDCALL
+SetROP2(HDC hdc,
+        int fnDrawMode)
+{
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
+}
+
+/*
+ * @unimplemented
+ */
+int
+STDCALL
+SetStretchBltMode(HDC hdc, int iStretchMode)
+{
+    /* FIXME share memory */
+    return NtGdiSetStretchBltMode(hdc, iStretchMode);
+}
+
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+SetRectRgn(HRGN hrgn,
+           int nLeftRect,
+           int nTopRect,
+           int nRightRect,
+           int nBottomRect)
+{
+    /* FIXME metadc stuff */
+    return NtGdiSetRectRgn(hrgn, nLeftRect, nTopRect, nRightRect, nBottomRect);
+}
+
+/*
+ * @unimplemented
+ */
+UINT
+STDCALL
+SetTextAlign(HDC hdc,
+             UINT fMode)
+{
+    /* FIXME share memory */
+    return NtGdiSetTextAlign(hdc, fMode);
+}
+
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+SetViewportExtEx(HDC hdc,
+                 int nXExtent,
+                 int nYExtent,
+                 LPSIZE lpSize)
+{
+    /* FIXME share memory */
+    return NtGdiSetViewportExtEx(hdc, nXExtent, nYExtent, lpSize);
+}
+
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+SetWindowOrgEx(HDC hdc,
+               int X,
+               int Y,
+               LPPOINT lpPoint)
+{
+    /* FIXME share memory */
+    return NtGdiSetWindowOrgEx(hdc,X,Y,lpPoint);
+}
+
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+SetWindowExtEx(HDC hdc,
+               int nXExtent,
+               int nYExtent,
+               LPSIZE lpSize)
+{
+    /* FIXME share memory */
+    return NtGdiSetWindowExtEx(hdc, nXExtent, nYExtent, lpSize);
+}
+
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+SetViewportOrgEx(HDC hdc,
+                 int X,
+                 int Y,
+                 LPPOINT lpPoint)
+{
+    /* FIXME share memory */
+    return NtGdiSetViewportOrgEx(hdc,X,Y,lpPoint);
+}
+
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+SetBrushOrgEx(HDC hdc,
+              int nXOrg,
+              int nYOrg,
+              LPPOINT lppt)
+{
+    /* FIXME share memory */
+    return NtGdiSetBrushOrg(hdc,nXOrg,nYOrg,lppt);
+}
+
+/*
+ * @unimplemented
+ */
+BOOL 
+STDCALL
+PtInRegion(IN HRGN hrgn,
+           int x,
+           int y)
+{
+    /* FIXME some stuff at user mode need be fixed */
+    return NtGdiPtInRegion(hrgn,x,y);
+}
+
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+RectInRegion(HRGN hrgn,
+             LPCRECT prcl)
+{
+    /* FIXME some stuff at user mode need be fixed */
+    return NtGdiRectInRegion(hrgn, (LPRECT) prcl);
+}
+
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+RestoreDC(IN HDC hdc,
+          IN INT iLevel)
+{
+    /* FIXME Sharememory */
+    return NtGdiRestoreDC(hdc, iLevel);
+}
+
+/*
+ * @unimplemented
+ */
+INT
+STDCALL
+SaveDC(IN HDC hdc)
+{
+    /* FIXME Sharememory */
+    return NtGdiSaveDC(hdc);
+}
+
+
+
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+CancelDC(HDC hdc)
+{
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return FALSE;
+}
+
+
+/*
+ * @unimplemented
+ */
+int
+STDCALL
+DrawEscape(HDC  hdc,
+           int a1,
+           int a2,
+           LPCSTR a3)
+{
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
+}
+
+
+/*
+ * @unimplemented
+ */
+int
+STDCALL
+EnumObjects(HDC hdc,
+            int a1,
+            GOBJENUMPROC a2,
+            LPARAM a3)
+{
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
@@ -100,35 +345,29 @@ ExtCreateRegion(
 
 
 /*
- * @unimplemented
+ * @implemented
  */
 UINT
 STDCALL
 GetBoundsRect(
-       HDC     a0,
-       LPRECT  a1,
-       UINT    a2
+       HDC     hdc,
+       LPRECT  lprcBounds,
+       UINT    flags
        )
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    return NtGdiGetBoundsRect(hdc,lprcBounds,flags & DCB_RESET);
 }
 
 
 /*
- * @unimplemented
+ * @implemented
  */
 int
 STDCALL
-GetMetaRgn(
-       HDC     a0,
-       HRGN    a1
-       )
+GetMetaRgn(HDC hdc,
+           HRGN hrgn)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    return NtGdiGetRandomRgn(hdc,hrgn,2);
 }
 
 
@@ -149,31 +388,6 @@ GetMetaFileBitsEx(
 }
 
 
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-GetRasterizerCaps(
-       LPRASTERIZER_STATUS     a0,
-       UINT                    a1
-       )
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
-}
-
-/*
- * @unimplemented
- */
-UINT
-STDCALL
-GetSystemPaletteUse(HDC hDc)
-{
-    return NtGdiGetSystemPaletteUse(hDc);
-}
-
 
 /*
  * @unimplemented
@@ -189,7 +403,6 @@ GetFontLanguageInfo(
        return 0;
 }
 
-
 /*
  * @unimplemented
  */
@@ -205,7 +418,6 @@ PlayMetaFile(
        return FALSE;
 }
 
-
 /*
  * @unimplemented
  */
@@ -221,7 +433,6 @@ ResizePalette(
        return FALSE;
 }
 
-
 /*
  * @unimplemented
  */
@@ -236,21 +447,17 @@ SetMetaRgn(
        return 0;
 }
 
-
 /*
- * @unimplemented
+ * @implemented
  */
 UINT
 STDCALL
-SetBoundsRect(
-       HDC             a0,
-       CONST RECT      *a1,
-       UINT            a2
-       )
+SetBoundsRect(HDC hdc,
+              CONST RECT *prc,
+              UINT flags)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME add check for vaildate the flags */
+    return NtGdiSetBoundsRect(hdc, (LPRECT)prc, flags);
 }
 
 
@@ -269,7 +476,6 @@ SetMapperFlags(
        return 0;
 }
 
-
 /*
  * @unimplemented
  */
@@ -285,23 +491,6 @@ SetMetaFileBitsEx(
        return 0;
 }
 
-
-/*
- * @unimplemented
- */
-UINT
-STDCALL
-SetSystemPaletteUse(
-       HDC     a0,
-       UINT    a1
-       )
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-
 /*
  * @unimplemented
  */
@@ -318,7 +507,6 @@ SetTextJustification(
        return FALSE;
 }
 
-
 /*
  * @unimplemented
  */
@@ -369,10 +557,6 @@ EnumMetaFile(
        return FALSE;
 }
 
-
-
-
-
 /*
  * @unimplemented
  */
@@ -387,7 +571,6 @@ DeleteEnhMetaFile(
        return FALSE;
 }
 
-
 /*
  * @unimplemented
  */
@@ -406,7 +589,6 @@ EnumEnhMetaFile(
        return FALSE;
 }
 
-
 /*
  * @unimplemented
  */
@@ -440,7 +622,6 @@ GetEnhMetaFileHeader(
        return 0;
 }
 
-
 /*
  * @unimplemented
  */
@@ -457,7 +638,6 @@ GetEnhMetaFilePaletteEntries(
        return 0;
 }
 
-
 /*
  * @unimplemented
  */
@@ -610,23 +790,6 @@ SetColorAdjustment(
        return FALSE;
 }
 
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-GetColorAdjustment(
-       HDC                     hdc,
-       LPCOLORADJUSTMENT       a1
-       )
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
-}
-
-
 /*
  * @unimplemented
  */
@@ -748,27 +911,28 @@ ScaleWindowExtEx(
  */
 BOOL
 STDCALL
-UnrealizeObject(
-       HGDIOBJ a0
-       )
+UnrealizeObject(HGDIOBJ  hgdiobj)
 {
-       return NtGdiUnrealizeObject(a0);
-}
+    BOOL retValue = TRUE;
+
+    if (GDI_HANDLE_GET_TYPE(hgdiobj) != GDI_OBJECT_TYPE_BRUSH)
+    {
+        retValue = NtGdiUnrealizeObject(hgdiobj);
+    }
+
+    return retValue;
+}
 
 
 /*
- * @unimplemented
+ * @implemented
  */
 BOOL
 STDCALL
 GdiFlush()
 {
-        /*
-         * Although GdiFlush is unimplemented, it's safe to return
-         * TRUE, because we don't have GDI engine surface caching
-         * implemented yet.
-         */
-       return TRUE;
+    NtGdiFlush();
+    return TRUE;
 }
 
 
@@ -811,13 +975,11 @@ CheckColorsInGamut(
  */
 HCOLORSPACE
 STDCALL
-GetColorSpace(
-       HDC     hDc
-       )
+GetColorSpace(HDC hDc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 
@@ -837,34 +999,46 @@ SetColorSpace(
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 BOOL
 STDCALL
-GetDeviceGammaRamp(
-       HDC     a0,
-       LPVOID  a1
-       )
+GetDeviceGammaRamp( HDC hdc,
+                    LPVOID lpGammaRamp)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
-}
+    BOOL retValue = FALSE;
+    if (lpGammaRamp == NULL)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+    }
+    else
+    {
+        retValue = NtGdiGetDeviceGammaRamp(hdc,lpGammaRamp);
+    }
 
+    return retValue;
+}
 
 /*
- * @unimplemented
+ * @implemented
  */
 BOOL
 STDCALL
-SetDeviceGammaRamp(
-       HDC     a0,
-       LPVOID  a1
-       )
+SetDeviceGammaRamp(HDC hdc,
+                   LPVOID lpGammaRamp)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return FALSE;
+    BOOL retValue = FALSE;
+
+    if (lpGammaRamp)
+    {
+        retValue = NtGdiSetDeviceGammaRamp(hdc, lpGammaRamp);
+    }
+    else
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+    }
+
+    return  retValue;
 }
 
 
@@ -1116,66 +1290,39 @@ wglSwapLayerBuffers(
  * === WHERE ARE THEY DEFINED? =============
  */
 
-
 /*
  * @unimplemented
  */
 DWORD
 STDCALL
-GdiPlayDCScript(
+IsValidEnhMetaRecord(
        DWORD   a0,
-       DWORD   a1,
-       DWORD   a2,
-       DWORD   a3,
-       DWORD   a4,
-       DWORD   a5
+       DWORD   a1
        )
 {
        UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return 0;
-}
 
-
-/*
- * @unimplemented
- */
-DWORD
-STDCALL
-GdiPlayJournal(
-       DWORD   a0,
-       DWORD   a1,
-       DWORD   a2,
-       DWORD   a3,
-       DWORD   a4
-       )
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
 }
 
-
 /*
  * @unimplemented
  */
 DWORD
 STDCALL
-GdiPlayScript(
+IsValidEnhMetaRecordOffExt(
        DWORD   a0,
        DWORD   a1,
        DWORD   a2,
-       DWORD   a3,
-       DWORD   a4,
-       DWORD   a5,
-       DWORD   a6
+       DWORD   a3
        )
 {
        UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
        return 0;
-}
 
+}
 
 /*
  * @unimplemented
@@ -1197,56 +1344,6 @@ GetGlyphOutlineWow(
        return 0;
 }
 
-
-
-
-/*
- * @unimplemented
- */
-DWORD
-STDCALL
-SelectBrushLocal(
-       DWORD   a0,
-       DWORD   a1
-       )
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-
-/*
- * @unimplemented
- */
-DWORD
-STDCALL
-SelectFontLocal(
-       DWORD   a0,
-       DWORD   a1
-       )
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-
-/*
- * @unimplemented
- */
-DWORD
-STDCALL
-SetFontEnumeration(
-       DWORD   a0
-       )
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-
 /*
  * @unimplemented
  */
@@ -1348,17 +1445,7 @@ EndFormPage(HDC hdc)
        return 0;
 }
 
-/*
- * @unimplemented
- */
-BOOL 
-STDCALL
-FontIsLinked(HDC hdc)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
+
 
 /*
  * @unimplemented
@@ -1411,157 +1498,172 @@ GdiConvertAndCheckDC(HDC hdc)
 /*
  * @unimplemented
  */
-HBITMAP 
+HENHMETAFILE 
 STDCALL
-GdiConvertBitmap(HBITMAP hbm)
+GdiConvertEnhMetaFile(HENHMETAFILE hmf)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-HBRUSH
+BOOL
 STDCALL
-GdiConvertBrush(HBRUSH hbr)
+GdiDrawStream(HDC dc, ULONG l, VOID *v)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-HDC 
+DWORD 
 STDCALL
-GdiConvertDC(HDC hdc)
+GdiGetCodePage(HDC hdc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-HFONT 
+BOOL
 STDCALL
-GdiConvertFont(HFONT hfont)
+GdiIsMetaFileDC(HDC hdc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-HPALETTE 
+BOOL
 STDCALL
-GdiConvertPalette(HPALETTE hpal)
+GdiIsMetaPrintDC(HDC hdc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-HRGN
+BOOL
 STDCALL
-GdiConvertRegion(HRGN hregion)
+GdiIsPlayMetafileDC(HDC hdc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-HENHMETAFILE 
+BOOL
 STDCALL
-GdiConvertEnhMetaFile(HENHMETAFILE hmf)
+GdiValidateHandle(HGDIOBJ hobj)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-BOOL
+DWORD 
 STDCALL
-GdiDeleteLocalDC(HDC hdc)
+GetBitmapAttributes(HBITMAP hbm)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-int 
+DWORD 
 STDCALL
-GdiDescribePixelFormat(HDC hdc,int ipfd,UINT cjpfd,PPIXELFORMATDESCRIPTOR ppfd)
+GetBrushAttributes(HBRUSH hbr)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-BOOL
+BOOL 
 STDCALL
-GdiDrawStream(HDC dc, ULONG l, VOID *v)
+GetCharABCWidthsI(HDC hdc,
+                  UINT giFirst,
+                  UINT cgi,
+                  LPWORD pgi,
+                  LPABC lpabc
+)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-DWORD 
+BOOL 
 STDCALL
-GdiGetCodePage(HDC hdc)
+GetCharWidthI(HDC hdc,
+              UINT giFirst,
+              UINT cgi,
+              LPWORD pgi,
+              LPINT lpBuffer
+)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
+
+
 /*
- * @unimplemented
+ * @implemented
  */
-HBRUSH 
+ULONG 
 STDCALL
-GdiGetLocalBrush(HBRUSH hbr)
+GetEUDCTimeStamp(VOID)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    return NtGdiGetEudcTimeStampEx(NULL,0,TRUE);
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
-HDC 
+ULONG 
 STDCALL
-GdiGetLocalDC(HDC hdc)
+GetFontAssocStatus(HDC hdc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    ULONG retValue = 0;
+
+    if (hdc)
+    {
+        retValue = NtGdiQueryFontAssocInfo(hdc);
+    }
+
+    return retValue;
 }
 
 /*
@@ -1569,90 +1671,117 @@ GdiGetLocalDC(HDC hdc)
  */
 HFONT 
 STDCALL
-GdiGetLocalFont(HFONT hfont)
+GetHFONT(HDC dc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-BOOL
+DWORD 
 STDCALL
-GdiIsMetaFileDC(HDC hdc)
+GetLayout(HDC hdc
+)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 BOOL
 STDCALL
-GdiIsMetaPrintDC(HDC hdc)
+GetTextExtentExPointWPri(HDC hdc,
+                         LPWSTR lpwsz,
+                         ULONG cwc,
+                         ULONG dxMax,
+                         ULONG *pcCh,
+                         PULONG pdxOut,
+                         LPSIZE psize)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    return NtGdiGetTextExtentExW(hdc,lpwsz,cwc,dxMax,pcCh,pdxOut,psize,0);
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
-BOOL
+INT 
 STDCALL
-GdiIsPlayMetafileDC(HDC hdc)
+GetTextFaceAliasW(HDC hdc,
+                  int cChar,
+                  LPWSTR pszOut)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    INT retValue = 0;
+    if ((!pszOut) || (cChar))
+    {
+        retValue = NtGdiGetTextFaceW(hdc,cChar,pszOut,TRUE);
+    }
+    else
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+    }
+    return retValue;
 }
 
+
+
 /*
  * @unimplemented
  */
-BOOL
+BOOL 
 STDCALL
-GdiSetAttrs(HDC hdc)
+MirrorRgn(HWND hwnd,HRGN hrgn)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
+
+
 /*
  * @unimplemented
  */
-VOID
+DWORD 
 STDCALL
-GdiSetLastError(DWORD dwErrCode)
+QueryFontAssocStatus(VOID)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
-BOOL
+BOOL 
 STDCALL
-GdiSetPixelFormat(HDC hdc,int ipfd)
+RemoveFontMemResourceEx(HANDLE fh)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    BOOL retValue=0;
+
+    if (fh)
+    {
+        retValue = NtGdiRemoveFontMemResourceEx(fh);
+    }
+    else
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+    }
+    return retValue;
 }
 
 /*
  * @unimplemented
  */
-BOOL
+int 
 STDCALL
-GdiValidateHandle(HGDIOBJ hobj)
+RemoveFontResourceTracking(LPCSTR lpString,int unknown)
 {
        UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
@@ -1662,9 +1791,9 @@ GdiValidateHandle(HGDIOBJ hobj)
 /*
  * @unimplemented
  */
-BOOL
+HBITMAP 
 STDCALL
-GdiSwapBuffers(HDC hdc)
+SetBitmapAttributes(HBITMAP hbm, DWORD dwFlags)
 {
        UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
@@ -1674,12 +1803,13 @@ GdiSwapBuffers(HDC hdc)
 /*
  * @unimplemented
  */
-VOID 
+HBRUSH 
 STDCALL
-GdiSetServerAttr(HDC hdc,DWORD attr)
+SetBrushAttributes(HBRUSH hbm, DWORD dwFlags)
 {
        UNIMPLEMENTED;
        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+       return 0;
 }
 
 /*
@@ -1687,11 +1817,12 @@ GdiSetServerAttr(HDC hdc,DWORD attr)
  */
 DWORD 
 STDCALL
-GetBitmapAttributes(HBITMAP hbm)
+SetLayout(HDC hdc,
+          DWORD dwLayout)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
@@ -1699,184 +1830,248 @@ GetBitmapAttributes(HBITMAP hbm)
  */
 DWORD 
 STDCALL
-GetBrushAttributes(HBRUSH hbr)
+SetLayoutWidth(HDC hdc,LONG wox,DWORD dwLayout)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
+
+
 /*
- * @unimplemented
+ * @implemented
  */
-BOOL 
+int 
 STDCALL
-GetCharABCWidthsI(
-       HDC hdc,
-       UINT giFirst,
-       UINT cgi,
-       LPWORD pgi,
-       LPABC lpabc
-)
+StartFormPage(HDC hdc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    return StartPage(hdc);
 }
 
 /*
  * @unimplemented
  */
-BOOL 
+VOID 
 STDCALL
-GetCharWidthI(
-       HDC hdc,
-       UINT giFirst,
-       UINT cgi,
-       LPWORD pgi,
-       LPINT lpBuffer
-)
+UnloadNetworkFonts(DWORD unknown)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
-DWORD 
+BOOL 
 STDCALL
-GetFontUnicodeRanges(
-       HDC hdc,
-       LPGLYPHSET lpgs
-)
+GetTextExtentExPointI(HDC hdc,
+                      LPWORD pgiIn,
+                      int cgi,
+                      int nMaxExtent,
+                      LPINT lpnFit,
+                      LPINT alpDx,
+                      LPSIZE lpSize)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    return NtGdiGetTextExtentExW(hdc,pgiIn,cgi,nMaxExtent,(ULONG *)lpnFit, (PULONG) alpDx,lpSize,1);
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
-ULONG 
+BOOL 
 STDCALL
-GetEUDCTimeStamp(VOID)
+GetTextExtentPointI(HDC hdc,
+                    LPWORD pgiIn,
+                    int cgi,
+                    LPSIZE lpSize)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    return NtGdiGetTextExtent(hdc,pgiIn,cgi,lpSize,2);
 }
 
+
+
+
+
 /*
  * @unimplemented
  */
-ULONG 
+BOOL 
 STDCALL
-GetFontAssocStatus(HDC hdc)
+GdiRealizationInfo(HDC hdc,
+                   PREALIZATION_INFO pri)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
+
+
 /*
  * @unimplemented
  */
-HFONT 
+BOOL 
 STDCALL
-GetHFONT(HDC dc)
+GetETM(HDC hdc,
+       EXTTEXTMETRIC *petm)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-DWORD 
+BOOL
 STDCALL
-GetLayout(
-       HDC hdc
-)
+GdiAddGlsRecord(HDC hdc,
+                DWORD unknown1,
+                LPCSTR unknown2,
+                LPRECT unknown3)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-BOOL
+HANDLE
 STDCALL
-GetTextExtentExPointWPri(HDC hdc,LPWSTR lpwsz,ULONG cwc,ULONG dxMax,ULONG *pcCh,PULONG pdxOut,LPSIZE psize)
+GdiConvertMetaFilePict(HGLOBAL hMem)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
-int 
+DEVMODEW *
 STDCALL
-GetTextFaceAliasW(HDC hdc,int cChar,LPWSTR pszOut)
+GdiConvertToDevmodeW(DEVMODEA *dm)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    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
+    }
+
+    COPYN(dmICMMethod);
+    COPYN(dmICMIntent);
+    COPYN(dmMediaType);
+    COPYN(dmDitherType);
+    COPYN(dmReserved1);
+    COPYN(dmReserved2);
+
+    if ( dm->dmSize <= SIZEOF_DEVMODEA_400 )
+    {
+        return dmw; // we're done with 0x400 fields
+    }
+
+    COPYN(dmPanningWidth);
+    COPYN(dmPanningHeight);
+
+    return dmw;
+
+    #undef COPYN
+    #undef COPYS
 }
 
 /*
  * @unimplemented
  */
-LONG 
+HENHMETAFILE
 STDCALL
-HT_Get8BPPFormatPalette(LPPALETTEENTRY pPaletteEntry, USHORT RedGamma,USHORT GreenGamma, USHORT BlueGamma)
+GdiCreateLocalEnhMetaFile(HENHMETAFILE hmo)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-LONG 
+METAFILEPICT *
 STDCALL
-HT_Get8BPPMaskPalette(LPPALETTEENTRY pPaletteEntry, BOOL Use8BPPMaskPal,BYTE CMYMask, USHORT RedGamma, USHORT GreenGamma, USHORT BlueGamma)
+GdiCreateLocalMetaFilePict(HENHMETAFILE hmo)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
+
 /*
  * @unimplemented
  */
-BOOL 
+HANDLE 
 STDCALL
-MirrorRgn(HWND hwnd,HRGN hrgn)
+GdiGetSpoolFileHandle(LPWSTR pwszPrinterName,
+                      LPDEVMODEW pDevmode,
+                      LPWSTR pwszDocName)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-int 
+BOOL
 STDCALL
-NamedEscape(HDC hdc,PWCHAR pDriver,int nDriver,int iEsc,int cjIn,LPSTR pjIn,int cjOut,LPSTR pjOut)
+GdiDeleteSpoolFileHandle(HANDLE SpoolFileHandle)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
@@ -1884,100 +2079,103 @@ NamedEscape(HDC hdc,PWCHAR pDriver,int nDriver,int iEsc,int cjIn,LPSTR pjIn,int
  */
 DWORD 
 STDCALL
-QueryFontAssocStatus(VOID)
+GdiGetPageCount(HANDLE SpoolFileHandle)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-BOOL 
+HDC
 STDCALL
-RemoveFontMemResourceEx(
-       HANDLE fh
-)
+GdiGetDC(HANDLE SpoolFileHandle)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-int 
+HANDLE 
 STDCALL
-RemoveFontResourceTracking(LPCSTR lpString,int unknown)
+GdiGetPageHandle(HANDLE SpoolFileHandle,
+                 DWORD Page,
+                 LPDWORD pdwPageType)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-HBITMAP 
+BOOL
 STDCALL
-SetBitmapAttributes(HBITMAP hbm, DWORD dwFlags)
+GdiStartDocEMF(HANDLE SpoolFileHandle,
+               DOCINFOW *pDocInfo)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-HBRUSH 
+BOOL
 STDCALL
-SetBrushAttributes(HBRUSH hbm, DWORD dwFlags)
+GdiStartPageEMF(HANDLE SpoolFileHandle)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-DWORD 
+BOOL
 STDCALL
-SetLayout(
-       HDC hdc,
-       DWORD dwLayout
-)
+GdiPlayPageEMF(HANDLE SpoolFileHandle,
+               HANDLE hemf,
+               RECT *prectDocument,
+               RECT *prectBorder,
+               RECT *prectClip)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-DWORD 
+BOOL
 STDCALL
-SetLayoutWidth(HDC hdc,LONG wox,DWORD dwLayout)
+GdiEndPageEMF(HANDLE SpoolFileHandle,
+              DWORD dwOptimization)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-BOOL 
+BOOL
 STDCALL
-SetMagicColors(HDC hdc,PALETTEENTRY peMagic,ULONG Index)
+GdiEndDocEMF(HANDLE SpoolFileHandle)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
@@ -1985,109 +2183,100 @@ SetMagicColors(HDC hdc,PALETTEENTRY peMagic,ULONG Index)
  */
 BOOL
 STDCALL
-SetVirtualResolution(HDC hdc, int cxVirtualDevicePixel,int cyVirtualDevicePixel,int cxVirtualDeviceMm, int cyVirtualDeviceMm)
+GdiGetDevmodeForPage(HANDLE SpoolFileHandle,
+                     DWORD dwPageNumber,
+                     PDEVMODEW *pCurrDM,
+                     PDEVMODEW *pLastDM)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-int 
+BOOL
 STDCALL
-StartFormPage(HDC hdc)
+GdiResetDCEMF(HANDLE SpoolFileHandle,
+              PDEVMODEW pCurrDM)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
-/*
- * @unimplemented
- */
-VOID 
-STDCALL
-UnloadNetworkFonts(DWORD unknown)
+
+HBITMAP 
+STDCALL 
+CreateDIBitmap(HDC hDc,
+               const BITMAPINFOHEADER *Header,
+               DWORD Init, LPCVOID Bits, const BITMAPINFO *Data,
+               UINT ColorUse)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    /* FIMXE we need do more thing in user mode */
+    return NtGdiCreateDIBitmap(hDc, Header, Init, Bits, Data,  ColorUse);
 }
 
 /*
  * @unimplemented
  */
-BOOL 
+INT
 STDCALL
-GetTextExtentExPointI(
-       HDC hdc,
-       LPWORD pgiIn,
-       int cgi,
-       int nMaxExtent,
-       LPINT lpnFit,
-       LPINT alpDx,
-       LPSIZE lpSize
-)
+CombineRgn(HRGN  hDest,
+           HRGN  hSrc1,
+           HRGN  hSrc2,
+           INT  CombineMode)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part should be done in user mode */
+    return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); 
 }
 
 /*
  * @unimplemented
  */
-BOOL 
-STDCALL
-GetTextExtentPointI(
-       HDC hdc,
-       LPWORD pgiIn,
-       int cgi,
-       LPSIZE lpSize
-)
+HBITMAP STDCALL
+CreateBitmap(INT  Width,
+             INT  Height,
+             UINT  Planes,
+             UINT  BitsPixel,
+             PCVOID pUnsafeBits)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part should be done in user mode */
+    return NtGdiCreateBitmap(Width, Height, Planes, BitsPixel, (LPBYTE) pUnsafeBits);
 }
 
 /*
  * @unimplemented
  */
-NTSTATUS
-STDCALL
-GdiFullscreenControl(FULLSCREENCONTROL FullscreenCommand,PVOID FullscreenInput,
-                                       DWORD FullscreenInputLength,PVOID FullscreenOutput,
-                                       PULONG FullscreenOutputLength)
+LPWSTR STDCALL
+EngGetDriverName(HDEV hdev)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-INT 
-STDCALL
-GdiQueryFonts(PUNIVERSAL_FONT_ID pufiFontList,ULONG nBufferSize,PLARGE_INTEGER pTimeStamp )
+ULONG STDCALL
+XLATEOBJ_iXlate(XLATEOBJ *XlateObj,
+                ULONG Color)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-BOOL 
+ULONG *
 STDCALL
-GdiRealizationInfo(HDC hdc, PREALIZATION_INFO pri)
+XLATEOBJ_piVector(XLATEOBJ *XlateObj)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    return XlateObj->pulXlate;
 }
 
 /*
@@ -2095,1181 +2284,433 @@ GdiRealizationInfo(HDC hdc, PREALIZATION_INFO pri)
  */
 BOOL 
 STDCALL
-GetCharWidthInfo(HDC hdc,PCHWIDTHINFO pChWidthInfo)
+GdiPlayEMF(LPWSTR pwszPrinterName,
+           LPDEVMODEW pDevmode,
+           LPWSTR pwszDocName,
+           EMFPLAYPROC pfnEMFPlayFn,
+           HANDLE hPageQuery
+)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
+
+
 /*
  * @unimplemented
  */
-BOOL 
+BOOL
 STDCALL
-GetETM(HDC hdc,EXTTEXTMETRIC *petm)
+GdiPlayPrivatePageEMF(HANDLE SpoolFileHandle,
+                      DWORD unknown,
+                      RECT *prectDocument)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return 0;
 }
 
 /*
  * @unimplemented
  */
-BOOL
-STDCALL
-GdiAddGlsRecord(HDC hdc,DWORD unknown1,LPCSTR unknown2,LPRECT unknown3)
+VOID STDCALL GdiInitializeLanguagePack(DWORD InitParam)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    UNIMPLEMENTED;
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
 }
 
+
 /*
- * @unimplemented
+ * @implemented
  */
-HANDLE
+INT
 STDCALL
-GdiConvertMetaFilePict(HGLOBAL hMem)
+ExcludeClipRect(IN HDC hdc, IN INT xLeft, IN INT yTop, IN INT xRight, IN INT yBottom)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part need be done on user mode size */
+    return NtGdiExcludeClipRect(hdc, xLeft, yTop, xRight, yBottom);
 }
 
 /*
  * @implemented
  */
-DEVMODEW *
+INT
 STDCALL
-GdiConvertToDevmodeW(DEVMODEA *dm)
+ExtSelectClipRgn( IN HDC hdc, IN HRGN hrgn, IN INT iMode)
 {
-  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
-
-  COPYN(dmICMMethod);
-  COPYN(dmICMIntent);
-  COPYN(dmMediaType);
-  COPYN(dmDitherType);
-  COPYN(dmReserved1);
-  COPYN(dmReserved2);
-
-  if ( dm->dmSize <= SIZEOF_DEVMODEA_400 )
-    return dmw; // we're done with 0x400 fields
-
-  COPYN(dmPanningWidth);
-  COPYN(dmPanningHeight);
-
-  return dmw;
-
-#undef COPYN
-#undef COPYS
+    /* FIXME some part need be done on user mode size */
+    return NtGdiExtSelectClipRgn(hdc,hrgn, iMode);
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
-HENHMETAFILE
+BOOL
 STDCALL
-GdiCreateLocalEnhMetaFile(HENHMETAFILE hmo)
+GdiGradientFill(
+    IN HDC hdc,
+    IN PTRIVERTEX pVertex,
+    IN ULONG nVertex,
+    IN PVOID pMesh,
+    IN ULONG nMesh,
+    IN ULONG ulMode)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part need be done in user mode */
+    return NtGdiGradientFill(hdc, pVertex, nVertex, pMesh, nMesh, ulMode);
 }
 
+
 /*
- * @unimplemented
+ * @implemented
  */
-METAFILEPICT *
+BOOL
 STDCALL
-GdiCreateLocalMetaFilePict(HENHMETAFILE hmo)
+GdiTransparentBlt(IN HDC hdcDst,
+                  IN INT xDst,
+                  IN INT yDst,
+                  IN INT cxDst,
+                  IN INT cyDst,
+                  IN HDC hdcSrc,
+                  IN INT xSrc,
+                  IN INT ySrc,
+                  IN INT cxSrc,
+                  IN INT cySrc,
+                  IN COLORREF TransColor
+)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part need be done in user mode */
+    return NtGdiTransparentBlt(hdcDst, xDst, yDst, cxDst, cyDst, hdcSrc, xSrc, ySrc, cxSrc, cySrc, TransColor);
 }
 
-
 /*
  * @unimplemented
  */
-HANDLE 
+BOOL
 STDCALL
-GdiGetSpoolFileHandle(
-       LPWSTR          pwszPrinterName,
-       LPDEVMODEW      pDevmode,
-       LPWSTR          pwszDocName)
+GdiPrinterThunk(
+    IN HUMPD humpd,
+    DWORD *status,
+    DWORD unuse)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME figout the protypes, the HUMPD are a STRUCT or COM object */
+    /* status contain some form of return value that being save, what it is I do not known */
+    /* unsue seam have zero effect, what it is for I do not known */
+
+    // ? return NtGdiSetPUMPDOBJ(humpd->0x10,TRUE, humpd, ?) <- blackbox, OpenRCE info, and api hooks for anylaysing;
+    return FALSE;
 }
 
 /*
  * @unimplemented
+ *
  */
-BOOL
+HBITMAP
 STDCALL
-GdiDeleteSpoolFileHandle(
-       HANDLE  SpoolFileHandle)
+GdiConvertBitmapV5(
+    HBITMAP in_format_BitMap, 
+    HBITMAP src_BitMap,
+    INT bpp,
+    INT unuse)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME guessing the prototypes */
+
+    /* 
+     * it have create a new bitmap with desired in format, 
+     * then convert it src_bitmap to new format
+     * and return it as HBITMAP 
+     */
+
+    return FALSE;
 }
 
+
 /*
- * @unimplemented
+ * @implemented
+ *
  */
-DWORD 
-STDCALL
-GdiGetPageCount(
-       HANDLE  SpoolFileHandle)
+COLORREF 
+STDCALL 
+GetBkColor(HDC hdc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part are done in user mode */
+    return NtGdiGetBkColor(hdc);
 }
 
 /*
- * @unimplemented
+ * @implemented
+ *
  */
-HDC
-STDCALL
-GdiGetDC(
-       HANDLE  SpoolFileHandle)
+int
+STDCALL 
+GetBkMode(HDC hdc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part are done in user mode */
+    return NtGdiGetBkMode(hdc);
 }
 
 /*
- * @unimplemented
+ * @implemented
+ *
  */
-HANDLE 
-STDCALL
-GdiGetPageHandle(
-       HANDLE  SpoolFileHandle,
-       DWORD   Page,
-       LPDWORD pdwPageType)
+BOOL 
+STDCALL 
+GetBrushOrgEx(HDC hdc,LPPOINT pt)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part are done in user mode */
+    return NtGdiGetBrushOrgEx(hdc,pt);
 }
 
 /*
- * @unimplemented
+ * @implemented
+ *
  */
-BOOL
-STDCALL
-GdiStartDocEMF(
-       HANDLE          SpoolFileHandle,
-       DOCINFOW        *pDocInfo)
+BOOL 
+STDCALL 
+GetCharABCWidthsFloatW(HDC hdc,UINT FirstChar,UINT LastChar,LPABCFLOAT abcF)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part are done in user mode */
+    return NtGdiGetCharABCWidthsFloat(hdc, FirstChar, LastChar, abcF);
 }
 
 /*
- * @unimplemented
+ * @implemented
+ *
  */
-BOOL
-STDCALL
-GdiStartPageEMF(
-       HANDLE  SpoolFileHandle)
+int 
+STDCALL 
+GetDeviceCaps(HDC hdc,
+              int i)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part need be done in user mode */
+    return NtGdiGetDeviceCaps(hdc,i);
 }
 
+
 /*
- * @unimplemented
+ * @implemented
+ *
  */
-BOOL
-STDCALL
-GdiPlayPageEMF(
-       HANDLE  SpoolFileHandle,
-       HANDLE  hemf,
-       RECT    *prectDocument,
-       RECT    *prectBorder,
-       RECT    *prectClip)
+BOOL 
+STDCALL 
+GetCurrentPositionEx(HDC hdc,
+                     LPPOINT lpPoint)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part need be done in user mode */
+    return  NtGdiGetCurrentPositionEx(hdc, lpPoint);
 }
 
 /*
- * @unimplemented
+ * @implemented
+ *
  */
-BOOL
+int 
 STDCALL
-GdiEndPageEMF(
-       HANDLE  SpoolFileHandle,
-       DWORD   dwOptimization)
+GetClipBox(HDC hdc,
+           LPRECT lprc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part need be done in user mode */
+    return  NtGdiGetClipBox(hdc, lprc);
 }
 
 /*
- * @unimplemented
+ * @implemented
+ *
  */
-BOOL
+BOOL 
 STDCALL
-GdiEndDocEMF(
-       HANDLE  SpoolFileHandle)
+GetCharWidthFloatW(HDC hdc,
+                   UINT iFirstChar, 
+                   UINT iLastChar, 
+                   PFLOAT pxBuffer)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part need be done in user mode */
+    return NtGdiGetCharWidthFloat(hdc, iFirstChar, iLastChar, pxBuffer);
 }
 
 /*
- * @unimplemented
+ * @implemented
+ *
  */
 BOOL
 STDCALL
-GdiGetDevmodeForPage(
-       HANDLE          SpoolFileHandle,
-       DWORD           dwPageNumber,
-       PDEVMODEW       *pCurrDM,
-       PDEVMODEW       *pLastDM)
+GetCharWidth32W(HDC hdc,
+               UINT iFirstChar,
+               UINT iLastChar,
+               LPINT lpBuffer)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part need be done in user mode */
+    return NtGdiGetCharWidth32(hdc, iFirstChar, iLastChar, lpBuffer);
 }
 
 /*
- * @unimplemented
+ * @implemented
+ *
  */
 BOOL
 STDCALL
-GdiResetDCEMF(
-       HANDLE          SpoolFileHandle,
-       PDEVMODEW       pCurrDM)
+GetCharABCWidths(HDC hdc,
+                 UINT uFirstChar,
+                 UINT uLastChar,
+                 LPABC lpabc)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part need be done in user mode */
+    return NtGdiGetCharABCWidths(hdc, uFirstChar, uLastChar, lpabc);
 }
 
 
-HBITMAP 
-STDCALL 
-CreateDIBitmap(HDC
-       hDc, const BITMAPINFOHEADER *Header,
-       DWORD Init, LPCVOID Bits, const BITMAPINFO *Data,
-       UINT ColorUse)
-{
-       /* FIMXE we need do more thing in user mode */
-       return NtGdiCreateDIBitmap(hDc, Header, Init, Bits, Data,  ColorUse);
-}
-
 /*
- * @unimplemented
+ * @implemented
+ *
  */
-INT
+DWORD 
 STDCALL
-CombineRgn(HRGN  hDest,
-                    HRGN  hSrc1,
-                    HRGN  hSrc2,
-                    INT  CombineMode)
+GetFontData(HDC hdc,
+            DWORD dwTable,
+            DWORD dwOffset,
+            LPVOID lpvBuffer,
+            DWORD cbData)
 {
-    /* FIXME some part should be done in user mode */
-    return NtGdiCombineRgn(hDest, hSrc1, hSrc2, CombineMode); 
+    if (!lpvBuffer)
+    {
+       cbData = 0;
+    }
+    return NtGdiGetFontData(hdc, dwTable, dwOffset, lpvBuffer, cbData);
 }
 
-/*
- * @unimplemented
- */
-HBITMAP STDCALL
-CreateBitmap(
-    INT  Width,
-    INT  Height,
-    UINT  Planes,
-    UINT  BitsPixel,
-    PCVOID pUnsafeBits)
-{
-    /* FIXME some part should be done in user mode */
-    return NtGdiCreateBitmap(Width, Height, Planes, BitsPixel, (LPBYTE) pUnsafeBits);
-}
 
 /*
  * @implemented
+ *
  */
-VOID
+DWORD 
 STDCALL
-EngAcquireSemaphore ( IN HSEMAPHORE hsem )
+GetRegionData(HRGN hrgn,
+              DWORD nCount,
+              LPRGNDATA lpRgnData)
 {
-   RtlEnterCriticalSection((PRTL_CRITICAL_SECTION)hsem);
-}
-
-
-
-
-
-
-
+    if (!lpRgnData)
+    {
+        nCount = 0;
+    }
 
-/*
- * @unimplemented
- */
-FD_GLYPHSET* STDCALL
-EngComputeGlyphSet(INT nCodePage,INT nFirstChar,INT cChars)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    return NtGdiGetRegionData(hrgn,nCount,lpRgnData);
 }
 
-/*
- * @unimplemented
- */
-BOOL STDCALL
-EngCopyBits(SURFOBJ *Dest,
-           SURFOBJ *Source,
-           CLIPOBJ *Clip,
-           XLATEOBJ *ColorTranslation,
-           RECTL *DestRect,
-           POINTL *SourcePoint)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
 
 /*
- * @unimplemented
+ * @implemented
+ *
  */
-HBITMAP STDCALL
-EngCreateBitmap(IN SIZEL Size,
-               IN LONG Width,
-               IN ULONG Format,
-               IN ULONG Flags,
-               IN PVOID Bits)
+INT
+STDCALL
+GetRgnBox(HRGN hrgn,
+          LPRECT prcOut)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some stuff need be done in user mode */
+    return NtGdiGetRgnBox(hrgn, prcOut);
 }
 
 
 /*
- * @unimplemented
+ * @implemented
+ *
  */
-HPALETTE STDCALL
-EngCreatePalette(IN ULONG Mode,
-                IN ULONG NumColors,
-                IN ULONG *Colors,
-                IN ULONG Red,
-                IN ULONG Green,
-                IN ULONG Blue)
+INT
+STDCALL
+OffsetRgn( HRGN hrgn,
+          int nXOffset,
+          int nYOffset)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part are done in user mode */
+    return NtGdiOffsetRgn(hrgn,nXOffset,nYOffset);
 }
 
-/*
- * @unimplemented
- */
-HSEMAPHORE
+
+INT
 STDCALL
-EngCreateSemaphore ( VOID )
+GetTextCharsetInfo(HDC hdc,
+                   LPFONTSIGNATURE lpSig,
+                   DWORD dwFlags)
 {
-  PRTL_CRITICAL_SECTION CritSect = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(RTL_CRITICAL_SECTION));
-  if (!CritSect) return NULL;
-  RtlInitializeCriticalSection( CritSect );
-  return (HSEMAPHORE)CritSect;
+    /* FIXME some part are done in user mode */
+    return NtGdiGetTextCharsetInfo(hdc, lpSig, dwFlags); 
 }
 
 
 
-/*
- * @unimplemented
- */
-BOOL STDCALL
-EngDeletePalette(IN HPALETTE Palette)
+INT 
+STDCALL
+IntersectClipRect(HDC hdc,
+                  int nLeftRect,
+                  int nTopRect,
+                  int nRightRect,
+                  int nBottomRect)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part are done in user mode */
+    return NtGdiIntersectClipRect(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
 }
 
-/*
- * @unimplemented
- */
-VOID STDCALL
-EngDeletePath(PATHOBJ *ppo)
+INT 
+STDCALL
+OffsetClipRgn(HDC hdc,
+              int nXOffset,
+              int nYOffset)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    /* FIXME some part are done in user mode */
+    return NtGdiOffsetClipRgn( hdc,  nXOffset,  nYOffset);
 }
 
-/*
- * @unimplemented
- */
-VOID
+
+INT
 STDCALL
-EngDeleteSemaphore ( IN HSEMAPHORE hsem )
+NamedEscape(HDC hdc,
+            PWCHAR pDriver,
+            INT iEsc, 
+            INT cjIn,
+            LPSTR pjIn,
+            INT cjOut,
+            LPSTR pjOut)
 {
- if (!hsem) return;
-
- RtlDeleteCriticalSection( (PRTL_CRITICAL_SECTION) hsem );
- RtlFreeHeap( GetProcessHeap(), 0, hsem );
+    /* FIXME metadc, metadc are done most in user mode, and we do not support it 
+     * Windows 2000/XP/Vista ignore the current hdc, that are being pass and always set hdc to NULL 
+     * when it calls to NtGdiExtEscape from NamedEscape
+     */
+    return NtGdiExtEscape(NULL,pDriver,wcslen(pDriver),iEsc,cjIn,pjIn,cjOut,pjOut);
 }
 
-/*
- * @unimplemented
- */
-BOOL STDCALL
-EngDeleteSurface(IN HSURF Surface)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
 
-/*
- * @unimplemented
- */
-BOOL STDCALL
-EngEraseSurface(SURFOBJ *Surface,
-               RECTL *Rect,
-               ULONG iColor)
+BOOL
+STDCALL
+PatBlt(HDC hdc, 
+       int nXLeft, 
+       int nYLeft, 
+       int nWidth, 
+       int nHeight, 
+       DWORD dwRop)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part need be done in user mode */
+    return NtGdiPatBlt( hdc,  nXLeft,  nYLeft,  nWidth,  nHeight,  dwRop);
 }
 
-/*
- * @unimplemented
- */
-BOOL STDCALL
-EngFillPath(SURFOBJ *pso,PATHOBJ *ppo,CLIPOBJ *pco,BRUSHOBJ *pbo,POINTL *pptlBrushOrg,MIX mix,FLONG flOptions)
+BOOL
+STDCALL
+PolyPatBlt(IN HDC hdc,
+           IN DWORD rop4,
+           IN PPOLYPATBLT pPoly,
+           IN DWORD Count,
+           IN DWORD Mode)
 {
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
+    /* FIXME some part need be done in user mode */
+    return NtGdiPolyPatBlt(hdc, rop4, pPoly,Count,Mode);
 }
 
-/*
- * @unimplemented
- */
-PVOID STDCALL
-EngFindResource(HANDLE h,
-                int iName,
-                int iType,
-                PULONG pulSize)
-{
- HRSRC HRSrc;
- DWORD Size;
- HGLOBAL Hg;
- LPVOID Lock;
-
- if (!(HRSrc = FindResourceW( (HMODULE) h,
-                       MAKEINTRESOURCEW(iName),
-                       MAKEINTRESOURCEW(iType)
-                          ))) 
-                               return NULL;
- if (!(Size = SizeofResource( (HMODULE) h, HRSrc ))) return NULL; 
- if (!(Hg   = LoadResource(   (HMODULE) h, HRSrc ))) return NULL;
- Lock = LockResource( Hg );
- pulSize = (PULONG) Size;
- return (PVOID) Lock;
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL 
-EngFreeModule(HANDLE h)
-{
-  LdrUnloadDll(h);
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL
-EngGetCurrentCodePage(OUT PUSHORT OemCodePage,
-                     OUT PUSHORT AnsiCodePage)
-{
-   OemCodePage  = (PUSHORT) GetOEMCP();
-   AnsiCodePage = (PUSHORT) GetACP();
-}
-
-/*
- * @unimplemented
- */
-LPWSTR STDCALL
-EngGetDriverName(HDEV hdev)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-LPWSTR STDCALL
-EngGetPrinterDataFileName(HDEV hdev)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL 
-EngGradientFill(SURFOBJ *psoDest,CLIPOBJ *pco,XLATEOBJ *pxlo,TRIVERTEX *pVertex,ULONG nVertex,PVOID pMesh,ULONG nMesh,RECTL *prclExtents,POINTL *pptlDitherOrg,ULONG ulMode)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL
-EngLineTo(SURFOBJ *Surface,
-         CLIPOBJ *Clip,
-         BRUSHOBJ *Brush,
-         LONG x1,
-         LONG y1,
-         LONG x2,
-         LONG y2,
-         RECTL *RectBounds,
-         MIX mix)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-HANDLE STDCALL 
-EngLoadModule(LPWSTR pwsz)
-{
-   return LoadLibraryExW ( pwsz, NULL, LOAD_LIBRARY_AS_DATAFILE);
-}
 
 
-/*
- * @unimplemented
- */
-BOOL STDCALL 
-EngMarkBandingSurface(HSURF hsurf)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL
-EngMultiByteToUnicodeN(OUT LPWSTR UnicodeString,
-                      IN ULONG MaxBytesInUnicodeString,
-                      OUT PULONG BytesInUnicodeString,
-                      IN PCHAR MultiByteString,
-                      IN ULONG BytesInMultiByteString)
-{
-  RtlMultiByteToUnicodeN(
-                     UnicodeString,
-                     MaxBytesInUnicodeString,
-                     BytesInUnicodeString,
-                     MultiByteString,
-                     BytesInMultiByteString
-                        );
-}
 
-/*
- * @unimplemented
- */
-INT STDCALL 
-EngMultiByteToWideChar(UINT CodePage,
-                       LPWSTR WideCharString,
-                       INT BytesInWideCharString,
-                       LPSTR MultiByteString,
-                       INT BytesInMultiByteString)
-{
-  return MultiByteToWideChar(
-                         CodePage,
-                        0,
-                        MultiByteString,
-                        BytesInMultiByteString,
-                        WideCharString,
-                       (BytesInWideCharString/sizeof(WCHAR)) /* Bytes to (in WCHARs) */
-                           );
-}
 
-/*
- * @unimplemented
- */
-BOOL STDCALL
-EngPaint(IN SURFOBJ *Surface,
-        IN CLIPOBJ *ClipRegion,
-        IN BRUSHOBJ *Brush,
-        IN POINTL *BrushOrigin,
-        IN MIX  Mix)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
 
-/*
- * @unimplemented
- */
-BOOL STDCALL 
-EngPlgBlt(SURFOBJ *psoTrg,SURFOBJ *psoSrc,SURFOBJ *psoMsk,CLIPOBJ *pco,XLATEOBJ *pxlo,COLORADJUSTMENT *pca,POINTL *pptlBrushOrg,POINTFIX *pptfx,RECTL *prcl,POINTL *pptl,ULONG iMode)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
 
-/*
- * @implemented
- * Obsolete GDI Function
- * http://www.osronline.com/DDKx/graphics/gdioview_20tj.htm
- */
-BOOL STDCALL
-EngQueryEMFInfo(HDEV hdev,EMFINFO *pEMFInfo)
-{
-  return FALSE;
-}
 
-/*
- * @unimplemented
- */
-VOID STDCALL 
-EngQueryLocalTime(PENG_TIME_FIELDS etf)
-{
-  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;
-}
 
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-EngReleaseSemaphore ( IN HSEMAPHORE hsem )
-{
-  RtlLeaveCriticalSection( (PRTL_CRITICAL_SECTION) hsem);
-}
-
-
-
-/*
- * @unimplemented
- */
-BOOL STDCALL 
-EngStretchBltROP(SURFOBJ *psoDest,SURFOBJ *psoSrc,SURFOBJ *psoMask,CLIPOBJ *pco,XLATEOBJ *pxlo,COLORADJUSTMENT *pca,POINTL *pptlHTOrg,RECTL *prclDest,RECTL *prclSrc,POINTL *pptlMask,ULONG iMode,BRUSHOBJ *pbo,DWORD rop4)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL 
-EngStrokeAndFillPath(SURFOBJ *pso,PATHOBJ *ppo,CLIPOBJ *pco,XFORMOBJ *pxo,BRUSHOBJ *pboStroke,LINEATTRS *plineattrs,BRUSHOBJ *pboFill,POINTL *pptlBrushOrg,MIX mixFill,FLONG flOptions)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL
-EngStrokePath(SURFOBJ *pso,PATHOBJ *ppo,CLIPOBJ *pco,XFORMOBJ *pxo,BRUSHOBJ *pbo,POINTL *pptlBrushOrg,LINEATTRS *plineattrs,MIX mix)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL 
-EngTextOut(SURFOBJ *pso,STROBJ *pstro,FONTOBJ *pfo,CLIPOBJ *pco,RECTL *prclExtra,RECTL *prclOpaque,BRUSHOBJ *pboFore,BRUSHOBJ *pboOpaque,POINTL *pptlOrg,MIX mix)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL
-EngTransparentBlt(IN SURFOBJ *Dest,
-                 IN SURFOBJ *Source,
-                 IN CLIPOBJ *Clip,
-                 IN XLATEOBJ *ColorTranslation,
-                 IN PRECTL DestRect,
-                 IN PRECTL SourceRect,
-                 IN ULONG TransparentColor,
-                 IN ULONG Reserved)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL
-EngUnicodeToMultiByteN(OUT PCHAR MultiByteString,
-                      IN ULONG  MaxBytesInMultiByteString,
-                      OUT PULONG  BytesInMultiByteString,
-                      IN PWSTR  UnicodeString,
-                      IN ULONG  BytesInUnicodeString)
-{
-   RtlUnicodeToMultiByteN(
-                       MultiByteString,
-                       MaxBytesInMultiByteString,
-                       BytesInMultiByteString,
-                       UnicodeString,
-                       BytesInUnicodeString
-                         );
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL 
-EngUnlockSurface(SURFOBJ *pso)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-}
-
-/*
- * @unimplemented
- */
-INT STDCALL 
-EngWideCharToMultiByte( UINT CodePage,
-                        LPWSTR WideCharString,
-                        INT BytesInWideCharString,
-                        LPSTR MultiByteString,
-                        INT BytesInMultiByteString)
-{
-  return WideCharToMultiByte(
-                         CodePage,
-                         0,
-                         WideCharString,
-                        (BytesInWideCharString/sizeof(WCHAR)), /* Bytes to (in WCHARs) */
-                         MultiByteString,
-                         BytesInMultiByteString,
-                         NULL,
-                         NULL);
-}
-
-/*
- * @unimplemented
- */
-ULONG
-STDCALL
-FONTOBJ_cGetAllGlyphHandles(IN FONTOBJ *FontObj,
-                            IN HGLYPH  *Glyphs)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-ULONG
-STDCALL
-FONTOBJ_cGetGlyphs(IN FONTOBJ *FontObj,
-                   IN ULONG    Mode,
-                   IN ULONG    NumGlyphs,
-                   IN HGLYPH  *GlyphHandles,
-                   IN PVOID   *OutGlyphs)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-PFD_GLYPHATTR STDCALL
-FONTOBJ_pQueryGlyphAttrs(FONTOBJ *pfo,ULONG iMode)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-FD_GLYPHSET *STDCALL
-FONTOBJ_pfdg(FONTOBJ *pfo)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-IFIMETRICS*
-STDCALL
-FONTOBJ_pifi(IN FONTOBJ  *FontObj)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-PVOID
-STDCALL
-FONTOBJ_pvTrueTypeFontFile(IN FONTOBJ  *FontObj,
-                           IN ULONG    *FileSize)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-XFORMOBJ*
-STDCALL
-FONTOBJ_pxoGetXform(IN FONTOBJ  *FontObj)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
-FONTOBJ_vGetInfo(IN  FONTOBJ   *FontObj,
-                 IN  ULONG      InfoSize,
-                 OUT PFONTINFO  FontInfo)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL
-PATHOBJ_bEnum(PATHOBJ *ppo,PATHDATA *ppd)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL 
-PATHOBJ_bEnumClipLines(PATHOBJ *ppo,ULONG cb,CLIPLINE *pcl)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL 
-PATHOBJ_vEnumStart(PATHOBJ *ppo)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL
-PATHOBJ_vEnumStartClipLines(PATHOBJ *ppo,CLIPOBJ *pco,SURFOBJ *pso,LINEATTRS *pla)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL
-PATHOBJ_vGetBounds(PATHOBJ *ppo,PRECTFX prectfx)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL
-STROBJ_bEnum(STROBJ *pstro,ULONG *pc,PGLYPHPOS *ppgpos)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL
-STROBJ_bEnumPositionsOnly(STROBJ *pstro,ULONG *pc,PGLYPHPOS *ppgpos)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL
-STROBJ_bGetAdvanceWidths(STROBJ *pso,ULONG iFirst,ULONG c,POINTQF *pptqD)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-DWORD STDCALL
-STROBJ_dwGetCodePage(STROBJ  *pstro)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL
-STROBJ_vEnumStart(STROBJ *pstro)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL
-XFORMOBJ_bApplyXform(XFORMOBJ *pxo,ULONG iMode,ULONG cPoints,PVOID pvIn,PVOID pvOut)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-ULONG STDCALL
-XFORMOBJ_iGetXform(XFORMOBJ *pxo,XFORML *pxform)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-ULONG STDCALL
-XLATEOBJ_cGetPalette(XLATEOBJ *XlateObj,
-                    ULONG PalOutType,
-                    ULONG cPal,
-                    ULONG *OutPal)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-HANDLE STDCALL
-XLATEOBJ_hGetColorTransform(XLATEOBJ *pxlo)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-ULONG STDCALL
-XLATEOBJ_iXlate(XLATEOBJ *XlateObj,
-               ULONG Color)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-ULONG * STDCALL
-XLATEOBJ_piVector(XLATEOBJ *XlateObj)
-{
-  return XlateObj->pulXlate;
-}
-
-/*
- * @unimplemented
- */
-BOOL 
-STDCALL
-GdiPlayEMF
-(
-       LPWSTR     pwszPrinterName,
-       LPDEVMODEW pDevmode,
-       LPWSTR     pwszDocName,
-       EMFPLAYPROC pfnEMFPlayFn,
-       HANDLE     hPageQuery
-)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-GdiInitSpool(VOID)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-GdiPlayPrivatePageEMF
-(
-       HANDLE  SpoolFileHandle,
-       DWORD   unknown,
-       RECT    *prectDocument
-)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-       return 0;
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL GdiInitializeLanguagePack(DWORD InitParam)
-{
-       UNIMPLEMENTED;
-       SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-}